Ruby 树梢上的复数匹配词
是否有一种方法可以使用Treetop以编程方式匹配复数单词。语言学宝石将使一个单词复数化,但如何将其插入到解析器中呢 下面是我尝试做的一个例子:Ruby 树梢上的复数匹配词,ruby,parsing,nlp,treetop,peg,Ruby,Parsing,Nlp,Treetop,Peg,是否有一种方法可以使用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_
#!/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
一般来说,语言gem不能将任意树顶规则定义复数化,因为它们不是字符串 使用语义谓词,您的
recipe.treetop
文件可以在数组中定义所有有效的单数单位
字符串,将其复数化,然后创建一个规则,将相关标记与这些复数单位进行比较:
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
一般来说,语言gem不能将任意树顶规则定义复数化,因为它们不是字符串 使用语义谓词,您的
recipe.treetop
文件可以在数组中定义所有有效的单数单位
字符串,将其复数化,然后创建一个规则,将相关标记与这些复数单位进行比较:
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
看看你的完整语法以及你在用它做什么会很有帮助。还有:你一定要使用树梢吗?像regexp这样简单的东西能实现你的目标吗?看看你的完整语法以及你在用它做什么会很有帮助。还有:你一定要使用树梢吗?像regexp这样简单的东西能实现你的目标吗?这正是我想要的。我想看看是否可以先解析这个词,然后检查它的结尾,但我想这对于不规则的复数词(goose和geese)是没有意义的。唯一的一件事是,我可能想记忆
单数单位
,因为每次它碰到那个节点时都会使用它。这正是我想要的。我想看看是否可以先解析这个词,然后检查它的结尾,但我想这对于不规则的复数词(goose和geese)是没有意义的。唯一的一件事是,我可能想记住单数单位
,因为每次它碰到那个节点时都会使用它。