2013-04-16 15 views
5

私はPythonでUnicode文字列を持っています。文字列に中国語/日本語の文字があるかどうかを判断する方法を探しています。可能であれば、それらの文字を見つけることができる方が良いでしょう。PythonでUnicode文字列に中国語/日本語文字が含まれているかどうかを知る方法はありますか?

これは言語検出の問題とは少し異なるようです。私の文字列は、英語と中国語のテキストが混在している可能性があります。

私のコードはインターネットにアクセスしています。

+0

可能な回答:http://stackoverflow.com/questions/6432926/how-can-i-relate-unicode-blocks-to-languages-scripts http://stackoverflow.com/questions/4545977/python-can -i-detect-unicode-string-language-code?rq = 1 – Patashu

答えて

2

この正規表現[\u2E80-\u9FFF]を使用すると、CJK文字を一致させることができます。

+3

これはほぼ完全ですが、完全ではありません。公式のUnicodeデータベースである[Scripts.txt](http://www.unicode.org/Public/UNIDATA/Scripts.txt)によると、漢字は '2E80'から' 9FCC'の**サブセット**をカバーしています「F900」〜「FAD9」、「20000」〜「2FA1D」と並んでいる。しかし、サブセットはやや複雑です... – nneonneo

4

Unicodeスクリプトプロパティを使用して、それらが一般的に関連付けられているスクリプトを特定することができます。

Pythonのunicodedataモジュールには、このプロパティはありません。ただし、unicodedata2unicodescriptなど、多数のサードパーティ製モジュールがこの情報を持っています。それらを照会して、Hanスクリプトに中国語(および漢字、ハンジャー)に対応する文字が含まれているかどうかを確認できます。

+0

ありがとう!サードパーティのモジュールはUbuntuやその他のディストリビューション用にパッケージ化されていますか?私はunicodedata2またはunicordscriptのパッケージを見ませんでした。この停止のためにPythonにバグはありますか? – nealmcb

2

私は彼の答えでnneonneoが言及したPythonのunicodedataモジュールを試しました。おそらく動作すると思います。

>>> import unicodedata 
>>> unicodedata.name('你') 
'CJK UNIFIED IDEOGRAPH-4F60' 
>>> unicodedata.name('桜') 
'CJK UNIFIED IDEOGRAPH-685C' 
>>> unicodedata.name('あ') 
'HIRAGANA LETTER A' 
>>> unicodedata.name('ア') 
'KATAKANA LETTER A' 
>>> unicodedata.name('a') 
'LATIN SMALL LETTER A' 

ご覧のとおり、両方の漢字と日本の漢字を採用CJK UNIFIED IDEOGRAPHに分類し、ひらがなとカタカナが正しく認識されています。私は韓国語の文字をテストしませんでしたが、彼らはCJK UNIFIED IDEOGRAPHに入るべきだと思います。 、

>>> import unicodedata 
>>> unicodedata.category('你') 
'Lo' 
>>> unicodedata.category('桜') 
'Lo' 
>>> unicodedata.category('あ') 
'Lo' 
>>> unicodedata.category('ア') 
'Lo' 
>>> unicodedata.category('a') 
'Ll' 
>>> unicodedata.category('A') 
'Lu' 

hereによると、Llが小文字のLuは大文字で、Loが他のです:あなただけそれがCJK文字/文字だ場合は気にするかどう

はまた、単純であるようです。

+0

韓国語のハングル文字は、一般的にそのように識別されます。統一された部分は、これらのスクリプト間で(一般的に)共有されるグリフを収集しますが、ハングルスクリプトは韓国語のみです。とにかく、ブロック名やカテゴリよりもScriptプロパティを見る方がいいです(数学的な記号やグラフィック装飾などの多くの 'Lo'文字があります。また、探しているスクリプトの1つではありません)。アラビア語、ヘブライ語、インド系のスクリプトなどはすべて大文字と小文字の区別がありません。) – tripleee

+0

@tripleee Pythonで提案したことを簡単に行う方法はありますか? – Jellyflower

+0

@ nneonneoの答えをご覧ください。 – tripleee

関連する問題