1

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
4

1 に答える 1

1

一般に、言語学のgemは、任意のTreetopルール定義を複数形にすることはできません。それらは文字列ではありません。

セマンティック述語を使用すると、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
于 2012-10-12T00:05:30.623 に答える