嗨.. 任何人都可以幫助我找到一個算法在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