Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - проверка орфографии

Ответить
Настройки темы
Теория - проверка орфографии
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Всем привет! Хочу собрать "на коленке" программу для проверки орфографии русского языка. Пока что склоняюсь к нечёткому поиску по словарю. Формулирую как 2 задачи:
1. Дан набор слов русского языка и текст, который следует проверить. Требуется написать список неправильных слов и предложить до 10 вариантов исправления.
2. Дана строка запроса и текст. Требуется написать список до 20 строк из текста, которые чем-то похожи на строку запроса.
Хотелось бы быстрый, но несложный алгоритм. Кто что может подсказать?

Отправлено: 16:15, 07-07-2012

 
pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Используя ограничение на длину слова (удалили не больше 2-х и добавили не больше 2-х букв) получается увеличить скорость в 2 раза, сохранив результаты.
Код: Выделить весь код
spell: ладошек
   1. ладоше (1)
   2. ладоней (2)
   3. ладошки (2)
   4. ладошку (2)
   5. людишек (2)
spell: компьютеры
   1. компьютерный (2)
   2. комитеты (4)
   3. компроме (5)
   4. компрене (5)
   5. комитета (5)
spell: стругацкие
   1. дурацкие (4)
   2. чумацкие (4)
   3. турецкие (4)
   4. строжайшие (4)
   5. трусоцким (4)
spell: робинзон
   1. родиной (3)
   2. рубинов (3)
   3. робенок (3)
   4. рубикон (3)
   5. родинок (3)
spell: люк
   1. люд (1)
   2. люб (1)
   3. лак (1)
   4. глюк (1)
   5. лют (1)
spell: намекающей
   1. намекающий (1)
   2. намекающая (2)
   3. намекаете (3)
   4. вытекающей (3)
   5. намекают (3)
spell: бездонность
   1. бездарность (2)
   2. бездонного (3)
   3. бездонной (3)
   4. бездонное (3)
   5. безличность (3)
spell: космоса
   1. комода (2)
   2. космой (2)
   3. корма (3)
   4. кошма (3)
   5. косность (3)
spell: множественность
   1. мужественность (2)
   2. божественность (2)
   3. множественном (3)
   4. множественное (3)
   5. художественность (3)
spell: твердь
   1. тверда (1)
   2. тверд (1)
   3. тверди (1)
   4. твердя (1)
   5. тверды (1)
spell: твердь
   1. тверда (1)
   2. тверд (1)
   3. тверди (1)
   4. твердя (1)
   5. тверды (1)
spell: атланта
   1. атлета (2)
   2. атласа (2)
   3. таланта (2)
   4. танта (2)
   5. атласная (3)
spell: фосфоресцировала
   1. восторжествовала (6)
   2. восторжествовал (7)
   3. откомандировала (7)
   4. господствовала (7)
   5. восторжествовали (7)
spell: пробитую
   1. прибитую (1)
   2. пролитую (1)
   3. побитую (1)
   4. пробита (2)
   5. продиктую (2)
spell: расплывались
   1. расплевались (1)
   2. расплылись (2)
   3. раскалывались (2)
   4. расписывались (2)
   5. раскрывались (2)
spell: кляксы
   1. клятвы (2)
   2. клюквы (2)
   3. классы (2)
   4. клялся (2)
   5. лясы (2)
spell: туши
   1. туше (1)
   2. туш (1)
   3. тужи (1)
   4. тушит (1)
   5. тушил (1)
spell: люк
   1. люд (1)
   2. люб (1)
   3. лак (1)
   4. глюк (1)
   5. лют (1)
spell: раздавленной
   1. раздавленног (1)
   2. раздавленное (1)
   3. раздавленный (1)
   4. раздавленно (1)
   5. раздавленного (2)
spell: кривоватые
   1. розоватые (3)
   2. кроватке (3)
   3. виноватые (3)
   4. красноватые (3)
   5. кривоглазые (3)
spell: голубизны
   1. голубизну (1)
   2. голубине (2)
   3. голубиных (2)
   4. глубины (2)
   5. голубятня (3)
spell: пологими
   1. плохими (2)
   2. долгими (2)
   3. положим (2)
   4. похожими (2)
   5. полосами (2)
spell: склонами
   1. склонам (1)
   2. клоками (2)
   3. словами (2)
   4. слонам (2)
   5. склонными (2)
spell: размытому
   1. размытом (1)
   2. разлитому (2)
   3. развитому (2)
   4. разбитому (2)
   5. накрытому (3)
   ...
misspelled 8619 of 93652 words
indexed 162163 words
load dictionary spent 0.652 secs
showing only first 25 errors
spell check spent 5.621 secs
Теперь используем другую функцию: за различие символов добавляем штраф +1, за различие соседних символов ещё +1.
Если символы на одинаковых позициях на клавиатуре расположены дальше круга радиусом 1 клавиши, добавляем штраф +3:
Код: Выделить весь код
indexed 162163 words
load dictionary spent 0.661 secs
showing only first 25 errors
spell check spent 0.392 secs
spell: ладошек
   1. лавочек (6)
   2. ладоней (6)
   3. ладошку (6)
   4. ладонке (8)
   5. людишек (8)
spell: компьютеры
   1. кухмистеры (14)
   2. контролеры (15)
   3. компактный (15)
   4. компаньоны (15)
   5. компанейцы (15)
spell: стругацкие
   1. мертвецкие (15)
   2. строжайшие (16)
   3. струменцию (16)
   4. строжайшее (17)
   5. стебницкий (17)
spell: робинзон
   1. рутинное (12)
   2. починков (12)
   3. новинкой (12)
   4. поминутн (12)
   5. романовн (12)
spell: люк
   1. лак (3)
   2. лек (3)
   3. лок (3)
   4. ляк (3)
   5. лук (3)
spell: намекающей
   1. намекающий (3)
   2. намекающая (8)
   3. вытекающей (9)
   4. набегающий (9)
   5. замечающий (9)
spell: бездонность
   1. бездарность (5)
   2. бездарности (8)
   3. безличность (8)
   4. преданность (11)
   5. безличности (11)
spell: космоса
   1. косушка (9)
   2. косынка (9)
   3. костела (9)
   4. косятся (9)
   5. косится (9)
spell: множественность
   1. торжественность (11)
   2. торжественности (14)
   3. торжественностью (16)
   4. семейственности (18)
   5. торжественностию (19)
spell: твердь
   1. тверди (3)
   2. тверда (3)
   3. тверды (3)
   4. твердя (3)
   5. твердо (3)
spell: твердь
   1. тверди (3)
   2. тверда (3)
   3. тверды (3)
   4. твердя (3)
   5. твердо (3)
spell: атланта
   1. таланта (5)
   2. таланте (8)
   3. фаланга (8)
   4. таланты (8)
   5. таланту (8)
spell: фосфоресцировала
   1. восторжествовала (25)
   2. сфотографирована (28)
   3. компрометировала (28)
   4. восторжествовали (30)
   5. восторжествовать (33)
spell: пробитую
   1. прибитую (3)
   2. пролитую (3)
   3. пробитые (6)
   4. пролитою (8)
   5. пробитая (8)
spell: расплывались
   1. расплевались (3)
   2. раскрывались (6)
   3. расставались (9)
   4. расплываться (9)
   5. расплываются (9)
spell: кляксы
   1. клятвы (6)
   2. клямку (8)
   3. клюквы (8)
   4. клялся (8)
   5. клятву (9)
spell: туши
   1. куши (3)
   2. туше (3)
   3. суши (3)
   4. тушу (3)
   5. души (3)
spell: люк
   1. лак (3)
   2. лек (3)
   3. лок (3)
   4. ляк (3)
   5. лук (3)
spell: раздавленной
   1. раздавленный (3)
   2. раздавленное (5)
   3. раздавленног (5)
   4. раздраженной (8)
   5. раздавленная (8)
spell: кривоватые
   1. провожатые (11)
   2. кохловатые (13)
   3. желтоватые (14)
   4. кровожадцы (14)
   5. кровожадны (14)
spell: голубизны
   1. голубизну (3)
   2. голубятня (9)
   3. голубиная (9)
   4. голубятне (11)
   5. голубчику (11)
spell: пологими
   1. порогами (6)
   2. полонили (6)
   3. полосами (6)
   4. похожими (8)
   5. положили (8)
spell: склонами
   1. салопами (6)
   2. коконами (8)
   3. склонили (8)
   4. законами (8)
   5. склонений (9)
spell: размытому
   1. разлитому (8)
   2. разбитому (8)
   3. развитому (8)
   4. накрытому (9)
   5. разумному (10)
   ...
misspelled 8619 of 93652 words
Если не показывать слова с расстоянием больше 8, то вполне имхо сносные предложения получаются. Правда функция туповата получается при вставке или удалении символа. Как её можно улучшить (производительность хотелось бы сохранить)?

Отправлено: 23:56, 13-07-2012 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


пробуем другие варианты: у меня с орфографией в принципе нормально, но есть опечатки:
1. нажатие вместо рядом находящейся клавиши
2. набор части слова в другом прядке (иногда пальцы срабатывают в обратной последовательности. Обычно пара букв, но изредка до 4-х)
3. пропуск буквы
4. лишняя буква из окрестности клавиши
Решение: будем сравнивать так: растянем слово №1 и №2 на одну и ту же длину. Если в некоторой окрестности буквы из слова 1 оказалась такая же буква из слова 2, значит добавляем штраф, равный расстоянию между буквами обоих слов на растянутом отрезке. Таким образом не требуется матрица как в методе Левенштейна, а нужен только проход по диагонали матрицы.
Если буквы в окрестности не найдено, то добавляем второй штраф - расстояние между символами на клавиатуре.
Код: Выделить весь код
		ё  й ц у к е н г ш щ з х ъ
		    ф ы в а п р о л д ж э
		     я ч с м и т ь б ю
Дальше игры с размерами штрафов (чтобы усилить тот или иной вариант). Мне больше всего понравился вариант, когда раскладка вообще не учитывается. Но это на правильно написанных словах, но отсутствующих в словаре. Посему прошу, кто что может, скиньте своих опечаток, потестировать. Или я могу скинуть исходник, попробуйте варианты, сообщите удачные.
знакомые буквы + раскладка
Код: Выделить весь код
indexed 162163 words
load dictionary spent 0.688 secs
showing only first 25 errors
spell check spent 0.55 secs
spell: ладошек
   1. лондоне (81)
   2. горошек (83)
   3. шпажонку (85)
   4. хорошее (87)
   5. большее (87)
spell: компьютеры
   1. камердинеру (95)
   2. камердинер (97)
   3. кропотливая (100)
   4. камердинера (102)
   5. кормильцев (102)
spell: стругацкие
   1. страницами (100)
   2. маркграфине (100)
   3. своенравнее (100)
   4. смиренными (102)
   5. варварские (104)
spell: робинзон
   1. орлиного (91)
   2. полтинник (91)
   3. подлинное (95)
   4. портного (97)
   5. плотного (97)
spell: люк
   1. любу (112)
   2. обок (112)
   3. лжец (112)
   4. олиц (112)
   5. люду (112)
spell: намекающей
   1. намекающий (81)
   2. намекающая (89)
   3. примыкающей (91)
   4. намекавший (92)
   5. наступающей (93)
spell: бездонность
   1. бездарность (102)
   2. бездарности (107)
   3. бездарностию (112)
   4. наклонность (112)
   5. преданность (113)
spell: космоса
   1. красота (91)
   2. кассира (91)
   3. красотка (92)
   4. красотку (92)
   5. неисправ (92)
spell: множественность
   1. торжественность (94)
   2. торжественности (97)
   3. торжественностью (98)
   4. преднамеренность (99)
   5. второстепенность (99)
spell: твердь
   1. твердом (102)
   2. твердое (102)
   3. твердос (102)
   4. твердой (106)
   5. откроют (108)
spell: твердь
   1. твердом (102)
   2. твердое (102)
   3. твердос (102)
   4. твердой (106)
   5. откроют (108)
spell: атланта
   1. встретив (90)
   2. пролеток (90)
   3. еропегов (91)
   4. пролети (92)
   5. смоленск (92)
spell: фосфоресцировала
   1. сфотографирована (116)
   2. компрометировала (116)
   3. скомпрометирован (117)
   4. компрометировали (119)
   5. компрометировать (122)
spell: пробитую
   1. пробитыми (107)
   2. пролитыми (107)
   3. пробирала (110)
   4. пролитую (110)
   5. пролиться (110)
spell: расплывались
   1. расплевались (91)
   2. раскрывались (91)
   3. расставались (91)
   4. расписывались (91)
   5. раскалывались (91)
spell: кляксы
   1. кровавы (102)
   2. классы (106)
   3. кличка (110)
   4. крикса (110)
   5. капская (110)
spell: туши
   1. танта (130)
   2. тигра (130)
   3. таков (130)
   4. такты (130)
   5. трушу (130)
spell: люк
   1. любу (112)
   2. обок (112)
   3. лжец (112)
   4. олиц (112)
   5. люду (112)
spell: раздавленной
   1. раздавленное (82)
   2. раздавленног (82)
   3. продавленном (88)
   4. раздраженное (91)
   5. раздраженной (91)
spell: кривоватые
   1. варварства (98)
   2. варварстве (98)
   3. красноватые (98)
   4. неисправные (100)
   5. красноватый (100)
spell: голубизны
   1. голубизну (105)
   2. голубиному (113)
   3. коломбина (114)
   4. полусонный (115)
   5. соловьиный (116)
spell: пологими
   1. поглотим (68)
   2. прогоните (70)
   3. проломами (70)
   4. поглотити (70)
   5. полотнами (70)
spell: склонами
   1. сапогами (79)
   2. салопами (82)
   3. вагонами (84)
   4. склонными (84)
   5. капорами (86)
spell: размытому
   1. грамматику (105)
   2. даровитому (107)
   3. размыслив (109)
   4. разбитому (109)
   5. радоваться (109)
   ...
misspelled 8619 of 93652 words
только поиск знакомых букв
Код: Выделить весь код
indexed 162163 words
load dictionary spent 0.656 secs
showing only first 25 errors
spell check spent 0.38 secs
spell: ладошек
   1. ладонке (16)
   2. младшег (16)
   3. ладошки (16)
   4. ладошку (16)
   5. людишек (16)
spell: компьютеры
   1. комментарии (18)
   2. кухмистеры (18)
   3. компостелло (18)
   4. комплименты (18)
   5. композитор (18)
spell: стругацкие
   1. испугавшие (18)
   2. содрогание (18)
   3. строжайшие (18)
   4. содроганием (18)
   5. ассигнацией (18)
spell: робинзон
   1. повинной (17)
   2. пробитое (17)
   3. коринной (17)
   4. повинною (17)
   5. поодиноч (17)
spell: люк
   1. глюк (16)
   2. лек (17)
   3. лак (17)
   4. люд (17)
   5. плю (17)
spell: намекающей
   1. намекающий (14)
   2. намекающая (15)
   3. задевающее (16)
   4. надлежащей (16)
   5. надлежащее (16)
spell: бездонность
   1. бездарность (14)
   2. обязанность (15)
   3. преданность (15)
   4. бездарности (15)
   5. безличность (15)
spell: космоса
   1. корамора (17)
   2. косточка (17)
   3. косности (17)
   4. косность (17)
   5. косилось (17)
spell: множественность
   1. торжественность (14)
   2. художественность (14)
   3. торжественности (15)
   4. торжественностью (15)
   5. художественности (15)
spell: твердь
   1. твердо (15)
   2. тверда (15)
   3. тверды (15)
   4. твердя (15)
   5. тверди (15)
spell: твердь
   1. твердо (15)
   2. тверда (15)
   3. тверды (15)
   4. твердя (15)
   5. тверди (15)
spell: атланта
   1. таланта (14)
   2. атласная (15)
   3. ханаана (16)
   4. атамана (16)
   5. фаланга (16)
spell: фосфоресцировала
   1. восторжествовала (17)
   2. компрометировала (17)
   3. сфотографирована (17)
   4. восторжествовали (17)
   5. восторжествовать (18)
spell: пробитую
   1. пролитую (14)
   2. прибитую (14)
   3. продиктую (15)
   4. прочитаю (16)
   5. пролитою (16)
spell: расплывались
   1. расписывались (14)
   2. расплевались (14)
   3. раскалывались (14)
   4. расползались (15)
   5. располагались (15)
spell: кляксы
   1. коляск (17)
   2. клямки (17)
   3. колосс (17)
   4. клялся (17)
   5. классы (17)
spell: туши
   1. тушил (15)
   2. тушит (15)
   3. тушки (15)
   4. тучи (16)
   5. тиши (16)
spell: люк
   1. глюк (16)
   2. лек (17)
   3. лак (17)
   4. люд (17)
   5. плю (17)
spell: раздавленной
   1. раздавленное (13)
   2. раздавленног (13)
   3. раздавленного (13)
   4. раздавленный (13)
   5. раздраженной (14)
spell: кривоватые
   1. хриповатым (16)
   2. кохловатые (16)
   3. красноваты (16)
   4. красноватые (16)
   5. кривоглазые (16)
spell: голубизны
   1. голубизну (14)
   2. полуубиты (15)
   3. голубчики (17)
   4. голубятни (17)
   5. голубиному (17)
spell: пологими
   1. полонили (16)
   2. положили (16)
   3. порогами (16)
   4. поглотим (16)
   5. волооким (16)
spell: склонами
   1. склонными (14)
   2. поклонами (15)
   3. колоннами (15)
   4. склянками (15)
   5. законами (16)
spell: размытому
   1. разумному (15)
   2. разбитому (15)
   3. разлитому (15)
   4. развитому (15)
   5. размытарит (17)
   ...
misspelled 8619 of 93652 words

Отправлено: 23:25, 15-07-2012 | #12



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - проверка орфографии

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2010 - Word | Проверка орфографии stst Microsoft Office (Word, Excel, Outlook и т.д.) 4 09-08-2012 14:17
Прочие - Проверка орфографии в названиях каталогов SummerMovedOn Программное обеспечение Windows 2 09-09-2009 19:26
Проверка орфографии rel Хочу все знать 3 17-07-2009 15:45
Проверка русской орфографии DeepProg Программное обеспечение Windows 6 04-12-2004 16:17
Проверка орфографии 97Word под Win2000 Guest Microsoft Windows NT/2000/2003 6 29-10-2004 14:12




 
Переход