PythonのこのUnicodeに最適なASCIIはどこですか”データベース?

StackOverflow https://stackoverflow.com/questions/816285

  •  03-07-2019
  •  | 
  •  

質問

Unicodeの句読点を使用するテキスト(左二重引用符、アポストロフィの右単一引用符など)があり、ASCIIで必要です。 Pythonにはこれらの文字のデータベースがあり、明らかなASCII代替文字が含まれているので、それらをすべて「&」に変換するよりも優れています。

役に立ちましたか?

解決

Unidecode は完全なソリューションのようです。派手な引用符をアスキー引用符に変換し、アクセント付きラテン文字をアクセントなしに変換し、ASCIIに相当しない文字を処理する音訳を試みます。そうすれば、ユーザーは何を見る必要はありませんか?従来の7ビットASCIIシステムを介してテキストを渡す必要があったとき。

>>> from unidecode import unidecode
>>> print unidecode(u"\u5317\u4EB0")
Bei Jing 

http://www.tablix.org/~avian / blog / archives / 2009/01 / unicode_transliteration_in_python /

他のヒント

元の答えでは、 unicodedata.normalize も提案しました。しかし、私はそれをテストすることにしましたが、ユニコード引用符では動作しないことがわかりました。アクセント付きUnicode文字の翻訳に適しているため、 unicodedata.normalize unicode.decomposition 関数を使用して実装されていると推測します。文字と発音区別記号の組み合わせであるユニコード文字を処理しますが、私は実際にはユニコード仕様の専門家ではないため、熱気に満ちているかもしれません...

いずれにしても、代わりに unicode.translate を使用して句読点を処理できます。 translate メソッドは、Unicode序数の辞書をUnicode序数に変換するため、Unicodeのみの句読点をASCII互換の句読点に変換するマッピングを作成できます。

'Maps left and right single and double quotation marks'
'into ASCII single and double quotation marks'
>>> punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 }
>>> teststring = u'\u201Chello, world!\u201D'
>>> teststring.translate(punctuation).encode('ascii', 'ignore')
'"hello, world!"'

必要に応じて句読点マッピングを追加できますが、Unicodeの句読点文字を1つ1つ処理することについて必ずしも心配する必要はないと思います。アクセントやその他の発音区別記号を処理する必要がある場合は、 unicodedata.normalize を使用してこれらの文字を処理できます。

興味深い質問。

Googleはこのページを見つけて、 unicodedataモジュールは次のとおりです。

import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')

これについては、 http://code.activestate.com/recipes/251871/で追加の議論があります。 にはNFKDソリューションがあり、±などの変換テーブルを実行するいくつかの方法があります。 => +/-およびその他の非文字。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top