Здравствуйте!
Мне необходимо производить лексикографический разбор слов для поисковой системы. Для словарей лучше всего подходит тернарное дерево, словарь думаю взять из lingvo, хранить в БД, но какие структуры создать и какие методы использовать - мне неведомо. Знаю только, что существует нормализованная форма слова, существуют также слова, не участвующие в поиске (союзы, предлоги,...). Меня интересует общий алгоритм и эффективные методы работы со словарями, Буду признателен за полезные статьи и направления. Спасибо. Алексей
ничего не понял что ты сказал( наверное ты тоже ), но методом гадания на кофейной гуще: http://www.aot.ru/
Неплохой проект, только слабенький - не перевел слово "ябловами" -> "яблоками".
Немного конкретизирую задачу: провести нормализацию слова.
В некоторых источниках пишут: машинная морфология - выделение основы слова, суффикса, пристаки и окончания.
Причем эту процедуру необходимо делать для разных языков.
Видел неплохой проект http://aspell.net
Кстати, еще одна проблема: как определить язык ввода?
> Немного конкретизирую задачу: провести нормализацию слова.
> В некоторых источниках пишут: машинная морфология - выделение основы слова, суффикса, пристакияндекс пишем :-)
все начинают отсюда:
"Грамматический словарь русского языка А. А. Зализняка"http://ru.wikipedia.org/wiki/%C3%F0%E0%E...
не знаю влезет ли ссылка
Ну вообще не в ту сторону.
Во-первых: нужны словари, по которым будут искаться слова. Вопрос: какие?
Во-вторых: как проводить нормализацию слова?
В-третьих: какие структуры словарей необходимо иметь, чтобы по нормализованной форме найти все подходящие слова?
ты какими-то дикими понятиями оперируешь.
1) хочешь искать слова и спрашиваешь у людей какие слова ты хочешь искать?
2) aot - если не удовлетворяет, закрываешь все и пишешь с нуля. яндекс, мейл, жж ... почемуто используют, а тут тебе на - слабенький.
3) что такое структура словаря? что такое подходящие слова и кому они должны подходить?
ну слабенький - это с высоты своего профессионализма оценено конечно? человеком который задал вопрос с чего начать?ябловами -> яблоками - по какому такому правилу оно должно получиться? это скорее задача нечеткого поиска.
Поиск Левенштейна
В качестве словарей решено взять lingvo - парсить их и на их основе создавать бд слов, а уже к ним писать алгоритм нормализации и парсинга
По поводу AOT:
Насколько я понял, он поддерживает только русский язык?
Есть еще несколько технических требований к словарю:
1. Поддержка японских языков
2. поддержка Unicode (ucs-2)
> По поводу AOT:
> Насколько я понял, он поддерживает только русский язык?неправильно понял.
> Есть еще несколько технических требований к словарю:
> 1. Поддержка японских языковза соседним столом японоговорящий коллега подсказал что в японском слова не искажаются ни падежами, ни множественным числом, у них в языке вообще все тупо.
> 2. поддержка Unicode (ucs-2)
ну конвертация между кодироками, - или счеташь это задача словаря?
> за соседним столом японоговорящий коллега подсказал что в японском слова не искажаются
> ни падежами, ни множественным числом, у них в языке вообще все
> тупо.Вопрос не в том - просто или тупо, а в том, что в АОТ словаря на японский нет никакого.
>> 2. поддержка Unicode (ucs-2)
> ну конвертация между кодироками, - или счеташь это задача словаря?Опять-таки - вопрос не в кодировке а в представлении символа одно- и двух-байтовое. АОТ не понимает двухбайтовые символы (содержащие, в частности, и японские)
hunspell, судя по документации, поддерживает Unicode, только где взять Unicode-словари и aff-файлы к ним?
> hunspell, судя по документации, поддерживает Unicode, только где взять Unicode-словари
> и aff-файлы к ним?google и навигация по сайту.
> google и навигация по сайту.Потратил день и нервы - наверное, /dev/hands кривые, и я все делаю через /dev/ass
не знаю как насчет либ, но для FTS-постгреса все *spell словари можно было сконвертировать в желаемую кодировку при помощи iconv и скормить в таком виде. фактически словарь - текстовой файл, с отсортированными построчно по алфавиту словами. тобишь смело можно предположить что каждая запись интерпретируется как набор байт и над всем этим работает бинарный поиск.попробывать проверить - дело 10мин, написать сюда и ждать ответ - день.
развивай в себе экспериментатора и научись пользоваться гуглом - ты не первопроходец - расшаренного опыта в сети предостаточно.