2009-10-22 3 views
16

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

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

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

Update

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

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

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

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

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

+3

Другие современные языки, которые не используют пробелы между словами тайский, Лао, кхмерский (камбоджийский), и бирманский (Мьянма). На вьетнамском языке существует связанная с этим проблема, что пробелы используются между всеми слогами, за исключением иностранных слов. – hippietrail

ответ

15

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

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

EDIT:
Ресурсы
Это слово ломать проблемы, а также связанные с ними вопросы, так нетривиальной, что целые книги написаны об этом. См. Например, CJKV Information Processing (CJKV означает китайский, японский, корейский и вьетнамский языки, вы также можете использовать ключевое слово CJK, поскольку во многих текстах вьетнамский язык не обсуждается). См. Также Word Breaking in Japanese is hard для одного пейджера на эту тему.
Понятно, что большинство материалов, охватывающих эту тему, написано на одном из основных языков на родном языке и поэтому ограничено для людей без относительной владения этими языками. По этой причине, а также чтобы помочь вам проверить систему поиска, как только вы начнете внедрять логику прерывания слова, вам следует обратиться за помощью к носителю или двум носителям.

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

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

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

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

+0

Для меня совершенно приемлемо разделить сложные слова. Мне просто нужно знать, когда разделить символы. Посмотрите, как скоро будет сделано обновление для частичного решения. –

+0

Простите меня. Я также хотел сказать спасибо за ваше время. :) –

+0

@Joe: Добро пожаловать. У меня, похоже, интерес к лингвистике и НЛП, но очень, очень мало знаний, характерных для языков CJK. Прочитайте мое редактирование, добавив несколько ключевых слов и онлайн-ссылок, которые могут помочь вашему поиску.Удачи :-) – mjv

1

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

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

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

(ред сказать, что есть лучший ответ здесь: How to classify Japanese characters as either kanji or kana?)

+1

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

+0

Я с нетерпением жду того дня, когда это решение уже не подходит, и я могу решить проблему более полно и интересно. –

+0

Спасибо за ваше время. –

 Смежные вопросы

  • Нет связанных вопросов^_^