Pythonの「このUnicodeに最適なASCII」データベースはどこにありますか?[閉まっている]


86

左二重引用符、アポストロフィの右一重引用符など、Unicode句読点を使用するテキストがいくつかあり、ASCIIで必要です。Pythonには、明らかなASCII置換を備えたこれらの文字のデータベースがあるので、すべてを「?」に変換するよりもうまくいくことができます。?


2
これを見つけた人
Martin Thoma 2015

回答:


90

Unidecodeは完全なソリューションのように見えます。ファンシークォートをasciiクォートに変換し、アクセント付きラテン文字をアクセントなしに変換し、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/


3
フム..ドイツ語のウムラウトは、例えばö= OE、A = AEなどの代わりに、そのベース文字に変換されている
ThiefMaster

4
@ThiefMasterは、これらの同等物がすべての言語に当てはまりますか?たぶん、Unidecodeは最小公分母を目指しています。
マークランサム

Unidecodeは、間違いなく言語に依存しないソリューションに適しています。ドイツ語中心のソリューションの場合s/ö/oe/は、残りの文字をunidecode。でクリーンアップする前に、該当する文字を手動で変換します(など)。
alexis 2015

4
一方、確かに、フィンランド語、例えば、ä -> aö -> o完全に間違っている、それはまだすることが好ましいaeoe
アンティHaapala

25

私の最初の答えでは、私も提案しましたunicodedata.normalize。ただし、テストすることにしましたが、Unicode引用符では機能しないことがわかりました。アクセント付きのUnicode文字をうまく翻訳できるので、この関数unicodedata.normalizeを使用して実装されていると思いunicode.decompositionます。おそらく、文字と発音区別符号の組み合わせであるUnicode文字しか処理できないと思いますが、実際にはそうではありません。 Unicode仕様の専門家なので、熱気に満ちているかもしれません...

いずれにしても、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の句読文字をすべて処理することについて必ずしも心配する必要はないと思います。あなたがいる場合行うアクセントやその他の発音区別符号を処理する必要性を、あなたはまだ使用することができunicodedata.normalize、それらの文字に対処します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.