特定のユニコード文字がどのスクリプトに属しているかを示すライブラリがありますか?与えられたユニコード文字または文字列のスクリプト名を与えるPythonのライブラリはありますか?
たとえば、入力 "u 'ሕ'"の場合、エチオピアまたはそれに類するものが返されます。
特定のユニコード文字がどのスクリプトに属しているかを示すライブラリがありますか?与えられたユニコード文字または文字列のスクリプト名を与えるPythonのライブラリはありますか?
たとえば、入力 "u 'ሕ'"の場合、エチオピアまたはそれに類するものが返されます。
Scripts.txt
ファイルを解析することができます。
# -*- coding: utf-8; -*-
import bisect
script_file = "/path/to/Scripts.txt"
scripts = []
with open(script_file, "rt") as stream:
for line in stream:
line = line.split("#", 1)[0].strip()
if line:
rng, script = line.split(";", 1)
elems = rng.split("..", 1)
start = int(elems[0], 16)
if len(elems) == 2:
stop = int(elems[1], 16)
else:
stop = start
scripts.append((start, stop, script.lstrip()))
scripts.sort()
indices = [elem[0] for elem in scripts]
def find_script(char):
if not isinstance(char, int):
char = ord(char)
index = bisect.bisect(indices, char) - 1
start, stop, script = scripts[index]
if start <= char <= stop:
return script
else:
return "Unknown"
print find_script(u'A')
print find_script(u'Д')
print find_script(u'ሕ')
print find_script(0x1000)
print find_script(0xE007F)
print find_script(0xE0080)
コードは堅牢でも最適化もされていないことに注意してください。引数が有効な文字またはコードポイントを示すかどうかをテストし、隣接する同等の範囲を結合する必要があります。
Scripts.txtファイルの意味を理解するのに数秒かかりましたが、これが私の必要なものです。ありがとう! – donatello
これは明白ではないし、今後この問題を抱える人を助けるため、 '' Scripts.txt''について何かを明確にしてください –
はたぶんunicodedata
モジュール内のデータは、あなたが探しているものです。
unicodedata.lookup("ETHIOPIC SYLLABLE HHE")
:
print unicodedata.name(u"ሕ")
プリント
ETHIOPIC SYLLABLE HHE
印刷された名前は、対応する文字を検索するために使用することができます
それは動作しません:** Script **プロパティにアクセスする必要があります。名前はスクリプトと同じではありません。その名前を他のものから推測することは絶対にしてはいけません。これは、標準のUnicode :: UCDモジュールのcharscript()関数を使用した簡単な操作です。 'perl -MUnicode :: UCD = charscript -le 'print charscript(0x1215)' 'Ethiopic'を出力します。コードポイント0x3B1は' Greek '、コードポイント0x1000は' Myanmar'などです。PythonからPerlライブラリコードを簡単に呼び出すことはできますか?ここに必要なもののようです。 – tchrist
@tchrist:私はそれが*スクリプト*プロパティではないことを知っています。質問はやや曖昧で、「エチオピアまたはそれに類するもの」を返すべきだと述べています。明示的にこれを指摘してくれてありがとう - 私はおそらくasnwerでそれを言及していたはずです。 –
良いニュースは、確かに、特定のUnicodeコードポイントがどのスクリプトに属しているかを示すライブラリがあります。悪いニュースは、そのライブラリがPerlディストリビューションの一部であり、Pythonの一部ではないということです。どのようにあなたは1つから他のものに得る私は分かりません。 – tchrist