Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка орфографии 
:(
    Опции темы
Hiori
Дата 2.4.2019, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 29.3.2016

Репутация: нет
Всего: нет



Проверку орфографии я уже сделала. Для этого при нажатии клавиши, если последний символ входит в заранее заданный массив разделителей
Код

Separators = [' ', '.', ',', '?', ':', ';', '(', ')', '/', '\', '!', '-', '—', '–',  '…', 
'''', '"', '<', '>', '*', '%', '«', '»', '[', ']', #0, #$D, #$A];

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

Вопрос.
Кто-нибудь может подсказать хотя бы примерный алгоритм поиска вариантов при ошибке? Поясню. Я подразумеваю, что введено, например, слово "Ножык" и мне каким-то образом нужно подобрать к нему правильный вариант "ножик". Так же для "офрум" должен быть вариант "форум".

Это сообщение отредактировал(а) Hiori - 4.4.2019, 21:46
PM MAIL   Вверх
Snowy
Дата 2.4.2019, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Теория: Нечёткий поиск в тексте и словаре
Пример реализации: Levenshtein distance
Готовая реализация на delphi: ApproxStrUtils

PM MAIL   Вверх
Hiori
Дата 2.4.2019, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 29.3.2016

Репутация: нет
Всего: нет



спасибо, то что нужно
PM MAIL   Вверх
Hiori
Дата 4.4.2019, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 29.3.2016

Репутация: нет
Всего: нет



Более или менее разобралась с нечётким поиском, ещё раз спасибо. Вобщем всё работает как надо.
Теперь возник закономерный вопрос, возможно ли как-то оптимизировать его? При том, что словарь содержит более 2.5 миллионов слов поиск затягивается на 6-15 секунд. Мне будет достаточно стройной идеи в какую сторону смотреть, потому что у меня совершенно нет вариантов.
PM MAIL   Вверх
Snowy
Дата 4.4.2019, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



1. Словарь на 2.5 миллиона слов? Например, в словаре Open Office менее 150 000 слов. Зачем столько?
2. Список можно распараллелить на несколько потоков. Например поделить на 4 части и обрабатывать каждую в своём потоке
3. Список можно пополнять по мере обработки - добавлять варианты по мере обнаружения
4. Можно разбить на приоритеты. Например обработать сначала слова, которые начинаются на ту же букву. В большинстве случаев ошибка редко бывает в первой букве, так что первые результаты можно будет получить уже в течении первой секунды. Затем обработать слова, с такой же длиной +-1, добавить в список их. Ошибка в большее количество уже вряд ли подойдёт.
5. можно попробовать сократить словарь до словоформ. Например, обрезая суффиксы, окончания, приставки. Например син = синий, синим, синька, синенький. Но не синус. Ибо обратно добавлением окончания не восстанавливается. Но это уже более сложно. 
PM MAIL   Вверх
Hiori
Дата 4.4.2019, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 29.3.2016

Репутация: нет
Всего: нет



ну я сама пока пришла только к тому, чтобы вырезать корни и их оставить в словаре, чтобы сократить словарь за счёт этого, но это надо тщательно обдумать, а так много как раз за счёт вариантов слов, плюс наиболее часто используемые аббревиатуры
PM MAIL   Вверх
Akella
Дата 18.7.2019, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Сторонние компоненты не годятся?
Например http://www.addictivesoftware.com/addict.htm#spelling
PM MAIL   Вверх
Hiori
Дата 19.7.2019, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 29.3.2016

Репутация: нет
Всего: нет



ещё и как годятся, спасибо большое
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1475 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.