2013-04-16 14 views
5

Mam ciąg znaków Unicode w języku Python. Szukam sposobu na określenie, czy w ciągu znaków znajduje się znak chiński/japoński. Jeśli to możliwe, lepiej będzie móc zlokalizować te postacie.Czy istnieje sposób sprawdzenia, czy ciąg znaków Unicode zawiera jakąkolwiek chińską/japońską czcionkę w języku Python?

Wygląda na to, że różni się nieco od problemu z wykrywaniem języka. Mój ciąg może być mieszanką angielskich i chińskich tekstów.

Mój kod ma dostęp do Internetu.

+0

możliwe odpowiedzi: 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

Odpowiedz

2

Możesz użyć tego wyrażenia [\u2E80-\u9FFF], aby dopasować znaki CJK.

+3

To prawie, ale nie do końca poprawne. Według [Scripts.txt] (http://www.unicode.org/Public/UNIDATA/Scripts.txt), oficjalnej bazy danych Unicode, znaki Han obejmują ** podzbiór ** z '2E80' do' 9FCC' , wraz z 'F900' do' FAD9' i '20000' do' 2FA1D'. Ale podzbiór jest nieco skomplikowany ... – nneonneo

4

Możesz użyć właściwości skryptu Unicode, aby określić, z którym skryptem są zwykle powiązani.

Moduł Pythona unicodedata, niestety, nie ma tej właściwości. Jednak wiele modułów innych firm, takich jak unicodedata2 i unicodescript, ma tę informację. Możesz zapytać je i sprawdzić, czy masz jakieś znaki w skrypcie Han, który odpowiada chińskim (i Kanji i Hanja).

+0

Dzięki! Czy któryś z modułów zewnętrznych jest spakowany dla Ubuntu lub innych dystrybucji? Nie widziałem pakietów dla unicodedata2 lub unicodescript. Czy są jakieś błędy na pythonie dla tej przerwy? – nealmcb

2

Próbowałem modułu Pythona unicodedata wspomnianego przez nneonneo w jego odpowiedzi i myślę, że prawdopodobnie działa.

>>> 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' 

Jak widać, oba znaki chińskie i japońskie przyjął chińskie znaki są podzielone na CJK UNIFIED IDEOGRAPH i hiragana i katakana prawidłowo rozpoznana. Nie testowałem koreańskich postaci, ale myślę, że powinny one również należeć do CJK UNIFIED IDEOGRAPH.

Ponadto, jeśli tylko zależy, czy jest to CJK znaków/liter lub nie, wydaje się to prostsze:

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

Według here, Ll jest małe, Lu jest wielka i Lo jest inne.

+0

Znaki koreańskie w języku koreańskim są ogólnie identyfikowane jako takie. Część "zunifikowana" gromadzi glify, które (ogólnie) są współużytkowane przez te skrypty, ale skrypt Hangul jest wyłącznie koreański. Lepiej i tak spojrzeć na właściwość Script niż na nazwę bloku lub kategorię (jest wiele znaków 'Lo', które są symbolami matematycznymi, dekoracjami graficznymi itp., Lub po prostu nie w jednym ze skryptów, których szukasz. Hebrajskie, indyjskie skrypty itd. Nie mają rozróżnienia wielkich/małych liter). – tripleee

+0

@tripleee Czy istnieje prosty sposób zrobienia tego, co zasugerowałeś w Pythonie? – Jellyflower

+0

Zobacz odpowiedź @ nneonneo. – tripleee

Powiązane problemy