Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Алгоритм проверки орфографии

57K
16 февраля 2011 года
napukmaxep
15 / / 16.02.2011
Доброго веремени. Поучил я недавно задание составить программу, которая проверяла бы введенное ей слово и находила в нем до двух ошибок включительно. Дело усложняется тем, что программа должна работать без словаря, опираясь лишь на правила русского языка(насколько это возможно - словарные слова не рассматриваются). В напутствие получил совет погуглить и слух о том, что существует алгоритм, основанный на разбиении слова по три символа. Два дня поиска толковых результатов не дали.

В голову начали закрадываться мысли о поиске в слове стандартных морфем в нужных частях слова, определении по ним части речи и работе с этими морфемами по правилам(напоминаю, что словарные слова не рассматриваются, а значит кровать, вокзал - глаголы. и т.п.) Но конкретных алгоритмов пока не видится.

Так вот, товарищи, прошу помощи! Может у кого нибудь есть дельные идеи, или может кто знает об этом алгоритме-трех-букв.
297
16 февраля 2011 года
koodeer
1.2K / / 02.05.2009
Гуглите морфологический разбор.
http://www.codenet.ru/webmast/search/Morphology-Russian.php
Но совсем без словарной базы никак не обойтись.


Разве что можно поступить так: считаем ошибкой такую комбинацию букв, которая никак не может быть в слове. Например, ъ, ъ или ы в начале слова; подряд более двух одинаковых букв; и т. п. Думаю, именно это и называется алгоритмом трёх букв.
57K
16 февраля 2011 года
napukmaxep
15 / / 16.02.2011
Спасибо, совет хороший, подумаю в этом напралении. Но тем не менее намек был именно на использование правил орфографии.
Алгоритм-трех-букв мне был описан как: "Слово разбивается по три буквы, то есть император => имп|ера|тор и с этими частями что-то делается"
277
16 февраля 2011 года
arrjj
1.7K / / 26.01.2011
Цитата: koodeer
.....подряд более двух одинаковых букв.......


Длинношеее, змееед.

360
16 февраля 2011 года
P*t*
474 / / 15.02.2007
Мне кажется, что имеются в виду правила вроде жы шы, чя щя и т.д
5
16 февраля 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: koodeer
без словарной базы никак не обойтись.



Цитата: arrjj
Длинношеее, змееед.



Дык, об этом сразу сказали :)

1.8K
16 февраля 2011 года
LM(AL/M)
332 / / 20.12.2005
может как то так:
1) берем словарную базу (это подготовка данных для алогоритма а не часть его) и на ее основе строим мн-во всевозможных допустимых 3-буквенных сочетаний, напр. "правило" дает [color=blue]пра, рав, ави, вил, ило[/color] -- и так со всеми словами
2) после того как составлен набор всех сочетаний по 3 буквы можно проверять слова: тестируемое слово точно так же разбивается на тройки и если очередная тройка не находится в нашем наборе то ошибка. Пример "прывило" → [color=red]пры, рыв, ыви,[/color][color=blue] вил, ило[/color] (для набора в предыдущем примере)
278
17 февраля 2011 года
Alexander92
1.1K / / 04.08.2008
Мне кажется, что ближе всех к истине все-таки P*t*, речь ведь идет о нахождении не опечаток, как это делает Word, а именно орфографических ошибок. Я бы взял основные правила русского правописания и строил алгоритм на их основе, их не так много, по большому счету. Да и словарная база действительно тут не нужна оказывается.
1.8K
17 февраля 2011 года
LM(AL/M)
332 / / 20.12.2005
по-моему некоторые правила русского правописания сильно зависят от разнык характеристик слова (род, часть речи, тип склонения и тд) а это можно определить только по словарю
274
17 февраля 2011 года
Lone Wolf
1.3K / / 26.11.2006
Как по мне можно построить конечный автомат. И плясать от этого..
57K
17 февраля 2011 года
napukmaxep
15 / / 16.02.2011
Пораскинул еще мозгами, набросал что-то вроде этого:
1. Проверяем ввод на униерсальные правила(как то сказали koodeer, P*t* - "сделаннный", "ъкология", "чюкотка")
2. Сканим слово с конца, на предмет начичия стандартных морфем(создать базу из них, в том числе и морфемы со стандртными ошибками), определяем чать речи. К примеру: слово "серебрянный" - видим в конце "ый" - либо приагательное, либо причастие. Сканим дальше, видим суффикс "янн". В то же время этот суффикс является ошибочным, согласно правилу, правильный суффикс "ян" - нашли ошибку.[SIZE="1"]*[/SIZE]

Так же искать и стандарные приставки и прочие морфемы, и, опираясь на правила, определять свойтва слова(вид, склонение и т.п.)

[SIZE="1"]*Пример, конечно, не идеален, но примерую суть отражает[/SIZE]

Соответственно, если допущена ошибка, на которую правила не ориентированы("серебрянцй") - алгоритм не сработает, но такие случаи без словарной базы не обработать, ибо это можно представить как самодостаточное слово, но, как я понял, это и не требуется.

как-то так пока думается..

Цитата: Lone Wolf
Как по мне можно построить конечный автомат. И плясать от этого..



каким образом?

274
17 февраля 2011 года
Lone Wolf
1.3K / / 26.11.2006
Собственно вы и подходите к построению автомата. То что вы только что описали, им и является. пункт 2.
Почитайте про них. постройте правила перехода.
297
17 февраля 2011 года
koodeer
1.2K / / 02.05.2009
Цитата: LM(AL/M)
может как то так:
1) берем словарную базу (это подготовка данных для алогоритма а не часть его) и на ее основе строим мн-во всевозможных допустимых 3-буквенных сочетаний, напр. "правило" дает [color=blue]пра, рав, ави, вил, ило[/color] -- и так со всеми словами
2) после того как составлен набор всех сочетаний по 3 буквы можно проверять слова: тестируемое слово точно так же разбивается на тройки и если очередная тройка не находится в нашем наборе то ошибка. Пример "прывило" → [color=red]пры, рыв, ыви,[/color][color=blue] вил, ило[/color] (для набора в предыдущем примере)


Кстати, очень и очень похоже на истину! Если позарез нужно реализовать алгоритм трёх букв, то это подходит.
Естественно, ни один естественный язык нельзя проверить набором простых правил, всегда будет куча исключений. Но на крайний случай сойдёт.

63
18 февраля 2011 года
Zorkus
2.6K / / 04.11.2006
Забавно что никто похоже не вспомнил про расстояние Левенштейна и Дамерау-Левенштейна. Классика спеллчекеров.
244
18 февраля 2011 года
UAS
2.0K / / 19.07.2006
Цитата: Zorkus
Забавно что никто похоже не вспомнил про расстояние Левенштейна и Дамерау-Левенштейна. Классика спеллчекеров.


К этим же методам вдогонку ещё следующие: Расстояние Хемминга, Коэффициент Дайса, Коэффициент и расстояние Джаккарда (Jaccard),

63
21 февраля 2011 года
Zorkus
2.6K / / 04.11.2006
Цитата: UAS
К этим же методам вдогонку ещё следующие: Расстояние Хемминга, Коэффициент Дайса, Коэффициент и расстояние Джаккарда (Jaccard),


Да, полезный методы. А еще полнее тут - http://en.wikipedia.org/wiki/String_metric.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог