Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 树梢上的复数匹配词_Ruby_Parsing_Nlp_Treetop_Peg - Fatal编程技术网

Ruby 树梢上的复数匹配词

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_

是否有一种方法可以使用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

一般来说,语言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)是没有意义的。唯一的一件事是,我可能想记住
单数单位
,因为每次它碰到那个节点时都会使用它。