我在Python中有一個Unicode字符串。我正在尋找一種方法來確定字符串中是否有中文/日文字符。如果可能,最好能夠找到這些角色。有沒有辦法知道Unicode字符串是否包含Python中的任何中文/日文字符?
看起來這與語言檢測問題有點不同。我的字符串可以是英文和中文文本的混合。
我的代碼可以上網。
我在Python中有一個Unicode字符串。我正在尋找一種方法來確定字符串中是否有中文/日文字符。如果可能,最好能夠找到這些角色。有沒有辦法知道Unicode字符串是否包含Python中的任何中文/日文字符?
看起來這與語言檢測問題有點不同。我的字符串可以是英文和中文文本的混合。
我的代碼可以上網。
您可以使用此正則表達式[\u2E80-\u9FFF]
來匹配CJK字符。
這幾乎是,但不完全正確。根據官方的Unicode數據庫[Scripts.txt](http://www.unicode.org/Public/UNIDATA/Scripts.txt),漢字包括'2E80'的**子集**到'9FCC' ,以及'F900'到'FAD9'和'20000'到'2FA1D'。但子集有點複雜... – nneonneo
您可以使用Unicode腳本屬性來確定它們通常與哪些腳本關聯。
Python的unicodedata
模塊,可悲的是,沒有這個屬性。但是,許多第三方模塊(例如unicodedata2
和unicodescript
)確實具有此信息。您可以查詢它們並檢查腳本Han
中是否有任何字符,它對應於中文(以及漢字和漢字)。
謝謝!是否爲Ubuntu或其他發行版打包了任何第三方模塊?我沒有看到unicodedata2或unicodescript的軟件包。 python上是否有這個中斷的錯誤? – nealmcb
我嘗試了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
。
另外,如果你只關心它是否是一個CJK字符/字母或沒有,看來這是簡單的:
>>> 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
是其他。
韓國的韓文字符一般是這樣標識的。 「統一」部分收集(通常)在這些腳本之間共享的字形,但韓文腳本完全是韓語。無論如何,要查看腳本屬性而不是塊名或類別(有許多'Lo'字符是數學符號,圖形裝飾等,或者只是不在您正在查找的腳本之一中。阿拉伯語,希伯來語,印度語腳本等都沒有大小寫區分。) – tripleee
@tripleee有沒有一種簡單的方法來完成你在Python中的建議? – Jellyflower
查看@ nneonneo的回答。 – tripleee
可能的答案: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