WordNet:获得最合理的定义

时间:2014-08-14 14:55:00

标签: ruby-on-rails ruby wordnet

我在Rails应用程序中使用带有WordNet Ruby gem的Wordnet wordnet-defaultdb。有时这段代码会给出无意义的定义:

require 'wordnet'
lex = WordNet::Lexicon.new
synset = lex[:brown]
synset.definition #=> "a university in Rhode Island"

或者它可以定义第二个' as"球员驻守在内场第二垒附近的棒球队的守备位置"

有没有办法按用法对定义进行排序并获得最相关的('棕色'作为颜色和'第二'作为数字或作为时间单位)?

1 个答案:

答案 0 :(得分:1)

使用lookup_synsets返回所有同义词,而不仅仅是第一个。

lex.lookup_synsets( :brown )

WordNet数据文件附带cntlist,其中列出了次数"每个标记的感觉都出现在语义一致性中。所以常用术语的数量最多。您的两个示例要求将是使用此计数的最高结果。

标记计数放入数据库中的sense表中,但它看起来不像WordNet gem提供数据接口,因此您可以使用sequel方法访问它。

lex.lookup_synsets( :brown ).each do |s|    
  printf "%5d: %s\n", WordNet::Sense.select( :tagcount ).where( :synsetid=>s.synsetid ).first.tagcount, s.definition
end

或者,如果您可以在:wordid查找单词,那么您可以在单个查询中获得标记数量最多的:synsetid

WordNet::Sense.select( :synsetid ).where( :wordid => 17745 ).reverse( :tagcount ).limit( 1 ).first.synsetid

可能会出现这样的情况,这对你来说也没有帮助,那里有最重要的计数或根本没有计数。