Regex для извлечения слов из других языков

Я знаю, что могу извлечь английские буквы и цифры, используя регулярное выражение A-Za-z0-9.

Как я могу извлечь слова из других языков, таких как арабский, и разрешить только буквы и цифры в их сценарии и ничего больше?

Один из способов, который я использовал, - отфильтровать все, что мне не нужно, из текста, и тогда у меня останутся только слова, но этот подход требует много процессорного времени и неэффективен для крупномасштабных приложений.

Теперь мне было интересно, какие еще методы использовались или кто-то знает, что можно использовать для анализа текста на других языках.

Как можно извлечь слова из таких языков, как китайский, японский и т. д., в которых даже не используются пробелы между словами? Один из подходов, который я использовал для различения слов, заключается в том, чтобы рассматривать стили и разрывы строк как способ понять, что они должны быть разными произведениями, но иногда этот подход может быть ненадежным, когда люди не используют много разрывов строк или форматирования для разделения разных слов. слова.

Итак, подводя итог, как можно анализировать другие языки с помощью регулярных выражений?


person Vish    schedule 09.08.2011    source источник


Ответы (4)


Как правило, регулярные выражения недостаточно эффективны для извлечения слов в языках, не использующих разделитель слов (например, пробел).

Чтобы извлечь слова из китайского, вам нужен огромный словарь известных слов, и вы разбиваете предложение в соответствии с известными словами, отдавая предпочтение более длинным словарным статьям (поскольку каждый символ сам по себе является допустимым словом).

Чтобы извлечь слова из японского, это зависит от стиля письма. Если текст полностью написан на кане, используйте словарь, упомянутый выше. Если текст представляет собой стандартное сочетание кандзи и каны, то вы, по крайней мере, можете знать, что каждый переход кана к кандзи почти наверняка является началом нового слова.

person Nayuki    schedule 09.08.2011
comment
ха-ха, вот это меня смущает, потому что я не знаю, какой подход выбрать, потому что я не могу найти словарь китайских слов. Может быть, вы можете помочь мне с некоторыми ссылками. - person Vish; 10.08.2011
comment
Поиск в Google бесплатных файлов китайского словаря дает следующее: mdbg.net/chindict/chindict. php?page=cedict . Я добавлю еще один ответ о том, как разделить слова на китайском языке. - person Nayuki; 10.08.2011

Предположим, у нас есть словарь китайского языка, и мы хотим разделить фразу следующим образом:

Один из подходов состоит в том, чтобы сканировать слева и брать как можно больше букв, сохраняя при этом слово в словаре. Затем мы продвигаемся вперед на это количество букв и повторяем. Этот подход, называемый жадным методом, дал бы нам следующее разделение фразы: [國度]

Это не единственный подход, так как иногда лучший сплит не жадный до отказа. Например, если у нас есть словарь {A, B, C, D, AB, BCD} и текст ABCD, то мы можем разделить текст как [AB][C][D] или как [A][BCD] . Последнее разделение может быть предпочтительнее первого.

Удобно, что эта веб-страница может продемонстрировать разделение слов на практике: http://www.mdbg.net/chindict/chindict.php

person Nayuki    schedule 10.08.2011
comment
Я также не удивлюсь, если в китайском языке есть каламбуры, в которых несколько более коротких слов объединяются в одно более длинное, и, следовательно, не имеют ни одного правильного разбора. - person porges; 10.08.2011
comment
В то время как мой пример фразы показывает одно- и двухсимвольные слова, более длинные слова могут быть найдены в более технических или специфических контекстах. Для литературных вещей есть тонны и тонны 4-символьных идиом. Для технических вещей есть такие вещи, как 碳水化合物 = углеводы. - person Nayuki; 10.08.2011

Если вы просто хотите фильтровать по символу, а не по какой-либо лингвистической конструкции более высокого порядка, вы можете сделать то же самое с большинством языков — вам просто нужна библиотека регулярных выражений, поддерживающая Unicode. Вы можете найти список здесь и отфильтровать на основе этих диапазонов.

person dfb    schedule 09.08.2011

Как [A-Za-z0-9] можно использовать для английского текста (примерно), так и [\p{Script=Arabic}0-9] можно использовать для арабского текста (примерно).

person MRAB    schedule 10.08.2011