2

我已經實現了使用樹結構樹的Levenshtein距離算法,如Steve Hanov所述。 但是,我在處理特殊字符時遇到了困難。例如,如果我計算Großmann和Grossmann之間的距離,我需要距離爲零,因爲ß和ss應該被認爲是相等的。Levenshtein距離和特殊字符

什麼是最好的解決方案(如果有)來支持這些特殊情況。

我最初的想法是在計算距離之前對所有字符串進行歸一化處理。 所以在Großmann - > Grossman,österreich - > oesterreich,... 但是,在.NET中似乎沒有這樣的功能?

回答

1

挑戰在於目前的文化並沒有識別出單個單詞的語言。

假設你願意在比賽方面出錯。

確定一組永遠不需要映射的字符。

確定所有文化的集合映射。

確定特定文化的映射。

首先做一個未映射的Levenshtein距離。

如果未映射的距離爲零,則停止。

如果未映射的距離大於x(例如4),則停止,因爲它不匹配。

如果單詞只包含從不需要映射的字符(例如a-z),則停止。

如果距離爲零,則映射到所有文化。

映射到默認文化,如果距離爲零停止。

映射到其他文化,如果距離是零停止。

我添加了一條直線string.compare到Levenshtein報告0如果是true。

+0

我認爲你的建議方法會做我想要的,所以謝謝你:-) –

0

我認爲正常化是要走的路。

我不知道有任何圖書館能夠提供這種現成的產品,並且快速搜索沒有任何結果。

這裏討論一個類似的問題:Converting "Bizarre" Chars in String to Roman Chars

他們的解決方案,只要您能夠提前全面識別所有必要的映射,就可以手動創建映射。

+0

是的,但那會非常麻煩。例如,比較德語時,應該用oe代替ö,但是,在比較英語文化時,不應該對此進行標準化。 –

+0

@KevinMeiresonne我不明白爲什麼應該這樣,但如果有必要,爲每種文化建立一個單獨的映射。 –

+0

如果文化是英語,你不想把ö轉換成oe?這對我來說沒有意義。 – Paparazzi