我在Rails应用程序中使用带有WordNet Ruby gem的Wordnet wordnet-defaultdb。有时这段代码会给出无意义的定义:
require 'wordnet'
lex = WordNet::Lexicon.new
synset = lex[:brown]
synset.definition #=> "a university in Rhode Island"
或者它可以定义第二个' as"球员驻守在内场第二垒附近的棒球队的守备位置"
有没有办法按用法对定义进行排序并获得最相关的('棕色'作为颜色和'第二'作为数字或作为时间单位)?
答案 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
可能会出现这样的情况,这对你来说也没有帮助,那里有最重要的计数或根本没有计数。