![]() |
|
![]() ![]() ![]() |
|
Wilko |
|
|||
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 4.5.2008 Репутация: нет Всего: нет |
Здравствуйте, столкнулся с такой задачей.
Необходимо разработать электронный словарь, в котором содержатся описания и переводы слов для разных локалий. Т.е. пользователь вводит слово на английском(допустим) ему выдается перевод этого слова(на другом языке, который выбрал пользователь) и его толкование. Требуется, чтобы поиск происходил даже при наличии в слове ошибок. Также необходимо, чтобы при вводе пользователем слова вылазило окно подсказки с существующими словами в словаре(как на гугл или яндекс, например). Возник вопрос: как это реализовать, если весь словарь хранится в БД? На каждую введеную пользователем букву "в лоб" искать введеное слово в базе данных? В упор не понимаю как это работает в поисковиках, при этом с огромной скоростью. |
|||
|
||||
sandland |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 78 Регистрация: 28.4.2007 Репутация: нет Всего: 1 |
Добрый вечер. Во-первых хотелось бы посоветовать книжку C. Manning "Introduction to information retrieval" - в ней есть целая глава посвященная исправлению опечаток и разработке тезаурусов.
Конечно, все зависит от размера словаря и грамотной проектировки БД. Первым что придет в голову - ввести индекс по полю "имя слова" - это будет в любом случае правильным решением. ( если вы используете реляционную базу данных ) другой вариант - использовать для хранения словаря файловую систему ( каталоги и файлы ) , и организовать его в виде дерева. Банальный пример: root | \ a-m n-z | \ \ a-hu hu-m \ \ n-sh si-z - простейший пример струкутуры папок, где хранятся файлы словарей. Рекомендую прочитать еще про B-деревья. Редактирвоание опечаток опирается на понятие "расстояние между 2мя словами ( термами)" - минимальное количество операций редактирования, с помощью которых строку s1 можно трансформировать в s2. операции редактирвоания: - вставка символа - удаление символа из строки - замена символа в строке В целом задача сводится к поиску в словаре множества строк s(i) для строки str, для которых это расстояние минимально. Выбор наиболее вероятного исправления уже зависит от конкретной задачи. Есть спец. алгоритмы динамического программирования и др. для вычисления расстояние редактирования + всегда можно придумать что-то свое, не менее эффективное ![]() почитайте книги по поиску, в них очень подробно рассматриваются эти задачи. Это сообщение отредактировал(а) sandland - 5.2.2011, 20:43 |
|||
|
||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |