2012-09-21 5 views
1

프로그래밍 방식으로 Treetop을 사용하여 복수 단어를 대조하는 방법이 있습니까? 언어학의 보석은 단어를 복수화 할 것이지만 어떻게 파서에 다시 삽입 할 수 있습니까?Treetop에서 복수 단어 일치하기

가 여기에 내가 할 노력하고있어의 예 : 일반적으로

#!/usr/bin/env ruby 
require 'treetop' 
require 'linguistics' 
include Linguistics::EN 
Treetop.load_from_string DATA.read 

parser = RecipeParser.new 

p parser.parse('cans') 

__END__ 
grammar Recipe 
    rule units 
     unit &{|s| plural(s[0].text_value) } 
    end 
    rule unit 
     'can' 
    end 
end 
+0

그것을 : 배열에 모든 유효한 단수 unit 문자열을 정의를 복수형으로하고 그 복수로 각 유닛에 문제의 토큰을 비교하는 규칙을 만들 수 있습니다 의미 술어에게 recipe.treetop 파일을 사용하여

당신의 문법 전체를보고 도움이 될 것입니다. 또한 : 절대적으로 Treetop을 사용해야합니까? 정규 표현식만큼 단순한 것이 목표를 달성 할 수 있습니까? – pje

답변

1

, 언어학 보석은 임의의 나무 꼭대기 규칙 정의를-라고요 복수형 할 수없는 문자열.

require "linguistics" 

grammar Recipe 
    rule units 
    [a-zA-Z\-]+ &{ |u| 
     Linguistics.use(:en) 
     singular_units = [ "can" ] 

     singular_units. 
     map(&:en). 
     map(&:plural). 
     include?(u[0].text_value) 
    } 
    end 
end 
+1

그게 내가 찾고 있던 바로 그거야. 처음에 단어를 파싱하고 결말을 조사 할 수 있는지를 알기 위해 노력했지만, 불규칙한 복수형 (거위 및 거위)에 대해서는 의미가 없습니다. 유일한 것은, 아마도 singular_units를 메모하기를 원할 것입니다. 왜냐하면 그 노드에 도달 할 때마다 사용되기 때문입니다. –