2011-02-09 4 views
2

特定のユニコード文字がどのスクリプトに属しているかを示すライブラリがありますか?与えられたユニコード文字または文字列のスクリプト名を与えるPythonのライブラリはありますか?

たとえば、入力 "u 'ሕ'"の場合、エチオピアまたはそれに類するものが返されます。

+0

良いニュースは、確かに、特定のUnicodeコードポイントがどのスクリプトに属しているかを示すライブラリがあります。悪いニュースは、そのライブラリがPerlディストリビューションの一部であり、Pythonの一部ではないということです。どのようにあなたは1つから他のものに得る私は分かりません。 – tchrist

答えて

2

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) 

コードは堅牢でも最適化もされていないことに注意してください。引数が有効な文字またはコードポイントを示すかどうかをテストし、隣接する同等の範囲を結合する必要があります。

+0

Scripts.txtファイルの意味を理解するのに数秒かかりましたが、これが私の必要なものです。ありがとう! – donatello

+0

これは明白ではないし、今後この問題を抱える人を助けるため、 '' Scripts.txt''について何かを明確にしてください –

7

はたぶんunicodedataモジュール内のデータは、あなたが探しているものです。

unicodedata.lookup("ETHIOPIC SYLLABLE HHE") 

print unicodedata.name(u"ሕ") 

プリント

ETHIOPIC SYLLABLE HHE 

印刷された名前は、対応する文字を検索するために使用することができます

+0

それは動作しません:** Script **プロパティにアクセスする必要があります。名前はスクリプトと同じではありません。その名前を他のものから推測することは絶対にしてはいけません。これは、標準のUnicode :: UCDモジュールのcharscript()関数を使用した簡単な操作です。 'perl -MUnicode :: UCD = charscript -le 'print charscript(0x1215)' 'Ethiopic'を出力します。コードポイント0x3B1は' Greek '、コードポイント0x1000は' Myanmar'などです。PythonからPerlライブラリコードを簡単に呼び出すことはできますか?ここに必要なもののようです。 – tchrist

+0

@tchrist:私はそれが*スクリプト*プロパティではないことを知っています。質問はやや曖昧で、「エチオピアまたはそれに類するもの」を返すべきだと述べています。明示的にこれを指摘してくれてありがとう - 私はおそらくasnwerでそれを言及していたはずです。 –

関連する問題