Разрыв слова в языках без пробелов между словами (например, азиатский)?

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

Я не могу просто поставить пробел между каждым символом, потому что английский тоже должен работать. Я хотел бы решить эту проблему с PHP или MySQL.

Могу ли я настроить MySQL для распознавания символов, которые должны быть их собственными единицами индексации? Есть ли модуль PHP, который может распознавать эти символы, чтобы я мог просто выбросить пробелы вокруг них для индекса?

Обновить

Частичное решение:

$string_with_spaces =
  preg_replace( "/[".json_decode('"\u4e00"')."-".json_decode('"\uface"')."]/",
  " $0 ", $string_without_spaces );

Это делает класс персонажей из, по крайней мере, некоторых из символов, которые мне нужно обработать специально. Я, наверное, должен упомянуть, что можно индексировать текст.

Кто-нибудь знает все диапазоны символов, которые мне понадобятся для вставки пробелов?

Кроме того, должен быть лучший, портативный способ представления этих символов в PHP? Исходный код в Literal Unicode не идеален; Я не узнаю всех персонажей; они могут не отображаться на всех машинах, которые мне приходится использовать.

2 ответа

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

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

РЕДАКТИРОВАТЬ:
Ресурсы
Эта проблема с ломкой слов, а также связанные с ней проблемы настолько нетривиальны, что о ней пишут целые книги. См., Например, CJKV Information Processing (CJKV обозначает китайский, японский, корейский и вьетнамский языки; вы также можете использовать ключевое слово CJK, поскольку во многих текстах вьетнамский язык не обсуждается). См. Также " Разорвать слова на японском языке" трудно для одного пейджера на эту тему.
Понятно, что большая часть материала, охватывающего эту тему, написана на одном из базовых родных языков и, следовательно, имеет ограниченное применение для людей, не владеющих этими языками относительно свободно. По этой причине, а также для того, чтобы помочь вам проверить поисковую систему после того, как вы начнете реализовывать логику средства разбиения по словам, вам следует обратиться за помощью к одному или двум носителям языка.

Различные идеи
Ваша идея определения символов, которые систематически подразумевают разрыв слова (например, кавычки, скобки, дефисные символы и т. Д.), Хороша, и это, вероятно, одна эвристика, используемая некоторыми средствами разбиения по словам профессионального уровня. Тем не менее, вы должны искать авторитетный источник для такого списка, а не собирать его с нуля, основываясь на неподтвержденных результатах.
Связанная идея состоит в том, чтобы разбить слова при переходах Кана-кандзи (но я полагаю, что не наоборот), и, возможно, при переходах Хирагана-Катакана или наоборот.
Не относящийся к собственно разрыву слов, индекс может [ -или, может не-;-)] извлекать выгоду из систематического преобразования каждого, скажем, символа хирагана в соответствующий символ катакана. Просто необразованная идея! Я не знаю достаточно о японском языке, чтобы знать, поможет ли это; интуитивно, это было бы слабо похоже на систематическое преобразование акцентированных букв и так далее в соответствующие не акцентированные буквы, как это практикуется на нескольких европейских языках.

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

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

Удачи в этом неприятном, но достойном начинании.

Год спустя, и вам, вероятно, это больше не нужно, но код на следующей странице может иметь некоторые подсказки для того, что вы хотите (ed) сделать:

http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/spamfilter/japanese-tokenizer.el.txt

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

(Отредактировано, чтобы сказать, что здесь есть лучший ответ: как классифицировать японские символы как кандзи или кана?)

Другие вопросы по тегам