2014-02-12 15 views
0

我被要求猜想當部分預期數據丟失時,用戶意圖。例如,如果我想要獲得very wellnot very well,但我只能獲得not,則應將其標記爲not very wellLevenshtein成本設置

notvery well的Levenshtein距離是9notnot very well的距離爲10。我想我實際上是試圖用扳手驅動螺絲釘,但我們已經同意在我們的團隊中使用Levenshtein來處理這種情況。

正如你所看到的上述問題,反正是有,如果我可以通過改變插入更換刪除成本使得一些感覺出來的嗎?

P.S.我不想爲這個特定的例子找一個黑客。我想要的東西一般按預期工作,並在這些情況下也輸出更好的結果。

+2

探測法可能是一個更好的算法:https://en.wikipedia.org/wiki/Soundex。 「不」和「杯」具有相同的水平距離。 IMO,「if(str.match(/^\ s * [nN])){str ='not well well'} else {str ='very well'}」更簡單。 –

+0

@glennjackman我100%同意你的觀點。這就是我所提供的,但論點是它可能無法像其他語言那樣運行,而不是英語。無論如何,我會再次與我們的團隊合作。 – Mahdi

回答

0

很好的Levenshtein距離實際上是12對準是:

------not 
very well 

所以有6個插入具有6(1成本爲每個插入),總費用,和3個替代品,總成本爲6(每次更換成本爲2)。的總成本爲12。

的Levenshtein距離爲不能很好地是10對準是:

not---------- 
not very well 

這包括僅10插入。所以你可以選擇不是很好作爲最佳匹配。

成本和調整可以用htql計算爲Python:

import htql 
a=htql.Align() 
a.align('not', 'very well') 
# (12.0, ['------not', 'very well']) 
a.align('not', 'not very well') 
# (10.0, ['not----------', 'not very well'])