2

Python には、アクセントを考慮した編集距離がありますか。たとえば、次のプロパティを保持する場所

d('ab', 'ac') > d('àb', 'ab') > 0
4

3 に答える 3

6

レーベンシュタイン モジュールの場合:

In [1]: import unicodedata, string

In [2]: from Levenshtein import distance

In [3]: def remove_accents(data):
   ...:     return ''.join(x for x in unicodedata.normalize('NFKD', data)
   ...:                             if x in string.ascii_letters).lower()

In [4]: def norm_dist(s1, s2):
   ...:     norm1, norm2 = remove_accents(s1), remove_accents(s2)
   ...:     d1, d2 = distance(s1, s2), distance(norm1, norm2)
   ...:     return (d1+d2)/2.

In [5]: norm_dist(u'ab', u'ac')
Out[5]: 1.0

In [6]: norm_dist(u'àb', u'ab')
Out[6]: 0.5
于 2013-04-03T15:21:47.773 に答える
3

Unicode では、アクセント付き文字を基本文字と結合アクセント文字に分解できます。たとえば、結合するグラブ アクセントが後に続くようにà分解します。a

正規化フォーム NFKD を使用して両方の文字列を変換します。これは、アクセント付き文字を分解し、互換性のある文字を正規の形式に変換します。次に、挿入と削除よりも置換をランク付けする編集距離メトリックを使用します。

于 2013-04-03T15:24:02.007 に答える