3

ユニコード文字列のレーベンシュタイン編集距離を評価する必要があります。つまり、編集距離にバイアスがかからないように、同一のコンテンツを含む 2 つの文字列を正規化する必要があります。

テスト用にランダムな Unicode 文字列を生成する方法は次のとおりです。

def random_unicode(length=10):
    ru = lambda: unichr(random.randint(0, 0x10ffff))
    return ''.join([ru() for _ in xrange(length)])

そして、ここに失敗している簡単なテストケースがあります:

import unicodedata
uni = random_unicode()
unicodedata.normalize(uni, 'NFD')

そして、ここにエラーがあります:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-9: ordinal not in range(128)

uni実際に Unicode オブジェクトであることを確認しました。

u'\U00020d93\U000fb2e6\U0005709a\U000bc31e\U00080262\U00034f00\U00059941\U0002dd09\U00074f6d\U0009ef7a'

誰かが私を啓発できますか?

4

1 に答える 1

5

のパラメータを切り替えましたnormalize関連ドキュメントから:

unicodedata.normalize(form, unistr)

Unicode 文字列の正規形フォーム* unistr* を返します。フォームの有効な値は、「NFC」、「NFKC」、「NFD」、および「NFKD」です。

最初の引数はフォームで、2 番目の引数は正規化される文字列です。これはうまくいきます:

unicodedata.normalize('NFD', uni)
于 2013-01-18T15:10:27.747 に答える