|
Модераторы: Poseidon, Snowy, bems, MetalFan |
|
Hiori |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 29.3.2016 Репутация: нет Всего: нет |
Проверку орфографии я уже сделала. Для этого при нажатии клавиши, если последний символ входит в заранее заданный массив разделителей
Выхватываю слово под курсором, потом отсекаю разделительные знаки, после чего ищу слово в словаре. Ну помимо этого убираю из слова символ #769 (ударение), перевожу в нижний регистр и т.п. Словарь организован потомком от TStringList, в котором добавлен некий хэш для каждой строки (D7 поэтому такие извращения). С самой проверкой у меня особых проблем не возникло. Вопрос. Кто-нибудь может подсказать хотя бы примерный алгоритм поиска вариантов при ошибке? Поясню. Я подразумеваю, что введено, например, слово "Ножык" и мне каким-то образом нужно подобрать к нему правильный вариант "ножик". Так же для "офрум" должен быть вариант "форум". Это сообщение отредактировал(а) Hiori - 4.4.2019, 21:46 |
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Теория: Нечёткий поиск в тексте и словаре
Пример реализации: Levenshtein distance Готовая реализация на delphi: ApproxStrUtils |
|||
|
||||
Hiori |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 29.3.2016 Репутация: нет Всего: нет |
спасибо, то что нужно
|
|||
|
||||
Hiori |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 29.3.2016 Репутация: нет Всего: нет |
Более или менее разобралась с нечётким поиском, ещё раз спасибо. Вобщем всё работает как надо.
Теперь возник закономерный вопрос, возможно ли как-то оптимизировать его? При том, что словарь содержит более 2.5 миллионов слов поиск затягивается на 6-15 секунд. Мне будет достаточно стройной идеи в какую сторону смотреть, потому что у меня совершенно нет вариантов. |
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
1. Словарь на 2.5 миллиона слов? Например, в словаре Open Office менее 150 000 слов. Зачем столько?
2. Список можно распараллелить на несколько потоков. Например поделить на 4 части и обрабатывать каждую в своём потоке 3. Список можно пополнять по мере обработки - добавлять варианты по мере обнаружения 4. Можно разбить на приоритеты. Например обработать сначала слова, которые начинаются на ту же букву. В большинстве случаев ошибка редко бывает в первой букве, так что первые результаты можно будет получить уже в течении первой секунды. Затем обработать слова, с такой же длиной +-1, добавить в список их. Ошибка в большее количество уже вряд ли подойдёт. 5. можно попробовать сократить словарь до словоформ. Например, обрезая суффиксы, окончания, приставки. Например син = синий, синим, синька, синенький. Но не синус. Ибо обратно добавлением окончания не восстанавливается. Но это уже более сложно. |
|||
|
||||
Hiori |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 29.3.2016 Репутация: нет Всего: нет |
ну я сама пока пришла только к тому, чтобы вырезать корни и их оставить в словаре, чтобы сократить словарь за счёт этого, но это надо тщательно обдумать, а так много как раз за счёт вариантов слов, плюс наиболее часто используемые аббревиатуры
|
|||
|
||||
Akella |
|
|||
Творец Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
||||
|
||||
Hiori |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 51 Регистрация: 29.3.2016 Репутация: нет Всего: нет |
ещё и как годятся, спасибо большое
|
|||
|
||||
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
2 Пользователей читают эту тему (2 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |