2010-05-01 198 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。