Я пытаюсь проверить пользовательский ввод (в Python) и посмотреть, используется ли правильный язык, в данном случае корейский. Давайте возьмем корейское слово для адреса электронной почты: 이메일 주소.
Я могу проверить каждый символ так:
import unicodedata as ud
for chr in u'이메일 주소':
if 'HANGUL' in ud.name(chr): print "Yep, that's a Korean character."
Но это кажется крайне неэффективным, особенно для длинных текстов. Конечно, я мог бы создать статический словарь, содержащий все блоки корейских слогов, но этот словарь содержал бы около 25 000 символов, и опять же, его было бы неэффективно проверять. Кроме того, мне также нужно решение для японского и китайского языков, которое может содержать еще больше символов.
Поэтому я хотел бы использовать шаблон Regex, охватывающий все символы Unicode для блоков слога хангыль. Но я понятия не имею, есть ли для этого диапазон или где его найти.
Например, этот шаблон регулярного выражения охватывает все латинские символы, включая скобки и другие часто используемые символы:
import re
LATIN_CHARACTERS = re.compile(ur'[\x00-\x7F\x80-\xFF\u0100-\u017F\u0180-\u024F\u1E00-\u1EFF]')
Может ли кто-нибудь перевести это регулярное выражение, чтобы оно соответствовало слоговому блоку корейского хангыля? Или вы можете показать мне таблицу или ссылку для самостоятельного поиска таких диапазонов?
Шаблон, соответствующий китайскому и японскому языкам, также был бы очень полезен. Или одно регулярное выражение для одновременного соответствия всем символам CJK. Мне не нужно было бы различать японцев и корейцев.
Вот библиотека Python для этой задачи, но она работает с невероятно огромными словарями: https://github.com/EliFinkelshteyn/alphabet-detector Я не могу представить, чтобы это было эффективно для большого текста и большого количества пользовательских данных.
Спасибо!