我想使用Levenshtein距離算法將匹配單個搜索項與可能匹配的字典進行匹配。算法返回一個距離,表示爲將搜索字符串轉換爲匹配字符串所需的操作次數。 我想將結果呈現在排名最高的「N」(比如說10)匹配的百分比列表中。使用Levenshtein距離匹配的匹配的百分比等級
由於搜索字符串可能比單個字典字符串更長或更短,因此將以百分比形式表示距離的適當邏輯將定性反映「查詢結果」對查詢的每個結果的接近程度字符串,100%表示完全匹配。
我考慮以下選項:
Q = query string
M = matched string
PM = Percentage Match
Option 1. PMi = (1 - Lev_distance(Q, Mi)/Strlen(Q)) * 100
Option 2. PMi = (1 - Lev_distance(Q, Mi)/max(Strlen(Q), strlen(Mi))) * 100
選項1具有負百分比的可能性的情況下的距離比搜索字符串長度,其中匹配字符串是長越大。例如,與「ABC Corp.」匹配的查詢「ABC」會導致負面的比賽百分比。
選項2似乎沒有給出一組Mi的一致百分比,因爲每個計算可能會使用不同的分母,因此得到的百分比值將不會被標準化。
我只能想到的其他方式是將lev_distance與字符串長度進行比較,而是將頂部「N」個匹配的比較距離顯示爲逆百分位數(100百分位數)。
有什麼想法?有更好的方法嗎?因爲Levenshtein距離可能是模糊匹配最常用的算法,所以我一定會錯過一些東西,這肯定是一個非常普遍的問題。
結果是否定的,然後簡單地返回0? PS:我已經發布的問題也在這裏http://math.stackexchange.com/questions/1776860/convert-levenshtein-distance-to-percents –
我不明白什麼是與Option2的問題,因爲我已經實現了完全你描述它的相同的邏輯,似乎正常工作。你能解釋一下嗎? – Roberto14