在树顶中匹配复数词



有没有办法使用 Treetop 以编程方式匹配复数词。语言学 gem 会将一个单词复数化,但如何将其插入回解析器中。

以下是我正在尝试执行的操作的示例:

#!/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文件可以在数组中定义所有有效的单数unit字符串,将它们复数化,然后创建一个规则,将有问题的令牌与每个复数单元进行比较:

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

相关内容

  • 没有找到相关文章

最新更新