2010-05-01 205 views
2

嗨.. 任何人都可以帮助我找到一个算法在Java代码中找到基于上下文的搜索词的同义词,我想用WordNet数据库实现算法。字消歧算法(Lesk算法)

例如,“我正在运行Java程序”。从上下文中,我想找到单词“running”的同义词,但同义词必须符合上下文。

回答

9

让我说明一个可能的方法:

  1. 让你的句子是A B C
  2. 让每个单词有同义词集,即{A:(a1, a2, a3), B:(b1), C:(c1, c2)}
  3. 现已形成可能的同义词集集:(a1, b1, c1), (a1, b1, c2), (a2, b1, c1) ... (a3, b1, c2)
  4. 定义功能F(a, b, c)返回(a,b,c)之间的距离(分数)。
  5. 在每个synset集上调用F。
  6. 挑选最高分的集合。

对于初学者来说,函数F可以只返回节点的两个节点之间的数的倒数的乘积:

最大化(产品[i = 0到LEN(句子); J = 0 to len(sentence)](1/D(node_i,node_j)))

稍后,您可以增加其复杂性。

+0

你是指使用Levenshtein距离? – user330394 2010-05-07 16:20:56

+0

恩,没有。距离=两个单词之间的节点数。 Wordnet就像一个连接图,每个synset都是一个节点。边缘是像Hypernyms,Hyponyms等关系 – pravin 2010-05-11 10:39:50

+0

对于Lesk算法,D =从同义词集中的多个定义中的单词的计数 – 2010-06-10 00:17:54

1

嗨,我一定要看看this页面,当时我正在寻找lesk算法实现。 我认为它是作为JAWS包的一部分。 我还没用过它,但我想这会帮助

2

This是您的问题的完美文档。该算法的acc不高,但我认为这足够了。

this链接上,您可以找到用于WordNet搜索(JAWS)的Java API。