嗨.. 任何人都可以帮助我找到一个算法在Java代码中找到基于上下文的搜索词的同义词,我想用WordNet数据库实现算法。字消歧算法(Lesk算法)
例如,“我正在运行Java程序”。从上下文中,我想找到单词“running”的同义词,但同义词必须符合上下文。
嗨.. 任何人都可以帮助我找到一个算法在Java代码中找到基于上下文的搜索词的同义词,我想用WordNet数据库实现算法。字消歧算法(Lesk算法)
例如,“我正在运行Java程序”。从上下文中,我想找到单词“running”的同义词,但同义词必须符合上下文。
让我说明一个可能的方法:
A B C
{A:(a1, a2, a3), B:(b1), C:(c1, c2)}
(a1, b1, c1), (a1, b1, c2), (a2, b1, c1) ... (a3, b1, c2)
F(a, b, c)
返回(a,b,c)之间的距离(分数)。对于初学者来说,函数F可以只返回节点的两个节点之间的数的倒数的乘积:
最大化(产品[i = 0到LEN(句子); J = 0 to len(sentence)](1/D(node_i,node_j)))
稍后,您可以增加其复杂性。
这里是Perl实现的算法http://senserelate.sourceforge.net/您可以从Java代码中使用它,但它需要一些配置工作。
你是指使用Levenshtein距离? – user330394 2010-05-07 16:20:56
恩,没有。距离=两个单词之间的节点数。 Wordnet就像一个连接图,每个synset都是一个节点。边缘是像Hypernyms,Hyponyms等关系 – pravin 2010-05-11 10:39:50
对于Lesk算法,D =从同义词集中的多个定义中的单词的计数 – 2010-06-10 00:17:54