Я хотел бы сделать работу по полнотекстовому поиску MySQL с японским и китайским текстами, а также с любым другим языком. Проблема в том, что эти языки и, возможно, другие обычно не имеют пробела между словами. Поиск не полезен, когда вы должны ввести то же предложение, что и в тексте.
Я не могу просто поставить пробел между каждым персонажем, потому что английский тоже должен работать. Я хотел бы решить эту проблему с PHP или MySQL.
Могу ли я настроить MySQL для распознавания символов, которые должны быть их собственными индексами? Есть ли модуль PHP, который может распознавать эти символы, чтобы я мог просто выбросить пробелы вокруг индекса?
Обновить
Частичное решение:
$string_with_spaces = preg_replace( "/[".json_decode('"\u4e00"')."-".json_decode('"\uface"')."]/", " $0 ", $string_without_spaces );
Это делает класс персонажа, по крайней мере, из некоторых персонажей, которые мне нужны для лечения. Я должен, вероятно, упомянуть, допустимо пропустить индексированный текст.
Кто-нибудь знает все диапазоны символов, которые мне нужны, чтобы вставлять пробелы?
Кроме того, должен быть лучший, переносимый способ представления этих символов в PHP? Исходный код в Literal Unicode не идеален; Я не узнаю всех персонажей; они могут не отображаться на всех машинах, которые я должен использовать.
Для разбиения слов на упомянутые языки требуется лингвистический подход , например тот, который использует словарь наряду с пониманием основных правил стриминга .
Я слышал об относительно успешных полнотекстовых поисковых приложениях, которые просто разделяют каждый отдельный символ как отдельное слово на китайском языке, просто применяя ту же «токенизацию» критериев поиска, предоставляемых конечными пользователями. Затем поисковая система обеспечивает лучший рейтинг для документов, которые снабжают символы-слова в том же порядке, что и критерии поиска. Я не уверен, что это может быть распространено на такие языки, как японский, поскольку наборы символов Хиракана и Катаганы делают текст более похожим на европейские языки с коротким алфавитом.
EDIT :
Ресурсы
Проблема с этим словом, а также связанные с этим проблемы настолько нетривиальны, что об этом написаны целые книги. См. Например, CJKV Information Processing (CJKV означает китайский, японский, корейский и вьетнамский языки, вы также можете использовать ключевое слово CJK, поскольку во многих текстах вьетнамский язык не обсуждается). См. Также Word Breaking на японском языке сложно для одного пейджера по этой теме.
Понятно, что большинство материалов, охватывающих эту тему, написано на одном из основных родных языков и поэтому ограничено для людей без относительной владения этими языками. По этой причине, а также чтобы помочь вам проверить систему поиска, как только вы начнете внедрять логику прерывания слова, вам следует обратиться за помощью к носителю или двум носителям.
Различные идеи
Ваша идея идентифицировать персонажей, которые систематически подразумевают разрыв слова (например, цитаты, скобки, дефисные персонажи и т. Д.), Хороша, и это, вероятно, одна эвристика, используемая некоторыми профессиональными словечками. Тем не менее, вы должны искать авторитетный источник для такого списка, а не собирать его с нуля, основываясь на анекдотических выводах.
Связанная идея состоит в том, чтобы сломать слова на переходах Кана-Канджи (но я предполагаю не наоборот) и, возможно, в переходах Хирагана-Катакана или наоборот.
Не связанный с разрывом слов, индекс может [-или не может- ;-)] извлекать выгоду из систематического преобразования каждого, скажем, характера хираганы, в соответствующий характер катаканы. Просто необразованная идея! Я не знаю достаточно о японском языке, чтобы знать, поможет ли это; интуитивно, это было бы слабо связано с систематической конверсией подчеркнутых букв и, таким образом, в соответствующее не акцентированное письмо, как это практикуется на нескольких европейских языках.
Возможно, идея, о которой я упоминал ранее, систематического индексирования индивидуального характера (и ранжирования результатов поиска на основе их приближения по критерию поиска) может быть слегка изменена, например, сохраняя последовательные символы каны вместе, а затем некоторые другие правила … и создать несовершенную, но достаточно практичную поисковую систему.
Не разочаровывайтесь, если это не так … Как сказано, это далеко не тривиально, и это может сэкономить вам время и деньги в долгосрочной перспективе, сделав паузу и прочитав книгу или две. Еще одна причина, чтобы попытаться узнать больше о «теории» и лучших методах, заключается в том, что на данный момент вы, похоже, сосредоточены на слове, но вскоре поисковая система может также извлечь выгоду из осознания стресса ; действительно, эти два вопроса, по крайней мере, связаны с лингвистикой, и могут быть полезны при обработке в тандеме.
Удачи вам в этом неприятном, но достойном стремлении.
Год спустя, и вам, вероятно, это не нужно, но код на следующей странице может содержать некоторые подсказки для того, что вы хотите (ed):
http://www.geocities.co.jp/SiliconValley-PaloAlto/7043/spamfilter/japanese-tokenizer.el.txt
Если вы сделали какие-либо успехи после вышеуказанных сообщений в своем собственном поиске, я уверен, что другим будет интересно узнать.
(Отредактировано, чтобы сказать, что здесь есть лучший ответ: как классифицировать японские символы как кандзи или кану? )