Грамота.Ру
ГРАМОТА СЛОВАРИ СПРАВКА НАВИГАТОР КЛАСС ИГРА Версия для мобильных устройств
Конференции Новости Журнал Конкурсы Олимпиады Форум Поиск О портале


Вече
 форумы  |  новая тема  |  начало  |  к началу  |  поиск  |  войти   назад  |  вперед 
 Алгоритм проверки орфографии?
Автор: Dim 
Дата:   25-01-02 01:00

Как работает алгоритм проверки орфографии русского языка?

Ответить на это сообщение
 
 Re: Плохо :)
Автор: Юлия Зайцева 
Дата:   25-01-02 11:53

Вот приблизительный набросок примитивного метода проверки правильности написания окончаний в словосочетаниях прил.+сущ.

таблица A (словарь)
поля:
a(слово без оконч.), b(часть речи), c(оконч.ед.ч.м.р.и.п.), d(оконч.ед.ч.ж.р.), e(род), f(склонение) ... z
записи (символьные значения кодовых полей используются для наглядности):
а b c d e f
розов п ый ая
крысовыхухол с ь ж 3

таблица B (окончания)
поля:
b(часть речи), c(оконч.ед.ч.м.р.и.п.), d(оконч.ед.ч.ж.р.и.п.), e(род), f(склонение), r(родительный м.р.е.ч.), r1(родительный ж.р.е.ч.)...p3(предложный ж.р.м.ч.)
записи:
b c d e f r r1 ... p3
п ый ая ого ой
с ж 3 и ... ях

Проверяемый текст: розового крысовыхухолях
Берём первое слово. Ищем в поле а таб. A по максимальному совпадению. Находим: розов. Выделяем окончание у первого слова путём сравнения с найденной основой. Ищем в таб. B значение по соответствию кодов b,c,d,e,f из таб. А. Находим, определяем падеж и число путём сравнения выделенного ранее окончания с полями r,r1...p3 таб. В. Берём второе слово. Ищем в таб. A по максимальному совпадению. Находим: крысовыхухол. Далее аналогично случаю с первым словом. Сравниваем падежи и числа обоих слов. Если не совпадают, выдаём сообщение об ошибке.

Само собой, метод несовершенен, поскольку в нём не учитываются формы и степени прилагательных, осоенности правописания гласных после шипящих и т.д., но никто и не утверждал, что это легко :)

Ответить на это сообщение
 
 Re:
Автор: Юлия Зайцева 
Дата:   25-01-02 11:57

пардон, не знала, что здешняя система пробелы жрёт. :) Но разберётесь как-нибудь...

Ответить на это сообщение
 
 Re:
Автор: Наталья 
Дата:   25-01-02 20:47

Я подозреваю, что проверялки , встроенные в редакторы текстов, просто-напросто ищут слово в словаре, в котором есть все словоформы. Сейчас есть достаточно быстрые алгоритмы поиска, а словарь , как правило, довольно бедный, так что слов не очень много. Я заметила, что теперь во всех газетах, журналах и прочей литературе, которая, по-видимому, обрабатывается автоматическими корректорами, напрочь исчезло слово "ни". Вместо него всегда стоит "не". Я объясняю это тем, что "не" в словаре стоит перед "ни". Проверялка никогда не исправит "не" на "ни", потому что "ни" - допустимое слово. Точно так же очень распространены ошибки в глагольных формах, оканчивающихся на "тся" и "ться". Опять-таки, проверялка находит первый вариант раньше, чем второй. Вообще , ошибки, связанные с синтаксическим анализом встречаются гораздо чаще, потому что реализовывать полный синтаксический анализ слишком долго(если вообще возможно).

Ответить на это сообщение
 
 Алгоритм Орфокоррекции
Автор: Dim 
Дата:   26-01-02 14:35

Уважаемая Юлия, если я правильно понял - осуществляется проверка на предмет "есть слово в словаре или нет". Как осуществляется автоматическая коррекция слова? Например, в программе Word для слова с ошибкой можно получить все варианты "правильных слов".

Ответить на это сообщение
 
 Re: сравнение символьных переменных :)
Автор: Юлия Зайцева 
Дата:   27-01-02 11:13

Есть множество методов поиска, в том числе поиск по неполному соответствию. Алгоритмы описаны; каким из них пользуются разработчики WW, не знаю. Это как раз самая простая часть работы ;) Куда сложнее разобраться в согласовании слов, а орфография на уровне одного слова проста и программируема, но бесполезна. Самый простой способ - это тот, о котором говорила Наталья: ввести в словарь все словоформы, а потом использовать поиск по неполному соответствию (вспомните процедуру сравнения символьных строк, тогда поймёте, что это такое). Но это не даёт возможности решать задачи типа той, которую я позавчера расписывала.
Вы на каком языке пишете? Может, программа будет нагляднее?..

Ответить на это сообщение
 
 Re: сравнение символьных переменных :)
Автор: Dim 
Дата:   28-01-02 13:24

C/C++
А если ошибка не в окончании?:)
Fuzzy search - это же медленно!

Ответить на это сообщение
 
 Re: сравнение символьных переменных :)
Автор: Юлия Зайцева 
Дата:   28-01-02 22:41

Боюсь, Вы меня не совсем правильно поняли. Это семейство задач не относится к системам с нечёткой логикой. И поиск в них осуществляется по простым и единообразным алгоритмам и достаточно быстро: объёмы информации относительно невелики. Есть же теория баз данных, есть индексирование, ускоряющее поиск, есть, наконец, СУБДы, возможности кторых позволяют засунуть весь алгоритм фильтрации по неполному соответствию в один SQL-запрос. В С тоже есть нужные библиотеки и функции, только в справочнике рыться лень :) Точно есть функция логического "или", только синтаксис не помню (символ какой-то псевдографический); есть функция подстроки, есть функция вхождения выражения в выражение. Что ещё нужно-то? Индексы сформировали и вперёд - фильтровать :)
А если ошибка не в окончании, значит надо писать методы для суффиксов, приставок и т.д. Правда, это актуально тольк при согласовании слов. Ещё раз поввторяю: это СЛОЖНАЯ программа, и здесь нет лёгких решений, а местами и вовсе никаких решений нет :)

Ответить на это сообщение
 
 Позвольте не согласиться
Автор: Dim 
Дата:   28-01-02 23:41

Но Word ведь проверяет:)
А объёмы информации сравнительно велики - вот словарь хим. терминов 1 млн. лемм - зафильтруешься:) при отборе слов-кандидатов.
А есть ли какой нибудь свод алгоритмов по орфографии: проверки согласования, выбора кандидатов и.т.п где можно взглянуть на готовые решения?
Спасибо!

Ответить на это сообщение
 
 Re: Позвольте не согласиться
Автор: Юлия Зайцева 
Дата:   29-01-02 12:14

Word проверяет ПЛОХО именно потому, что многое в принципе невозможно проверить без знания семантики.
Не вполне поняла, что Вы подразумеваете под словом "лемма", но если Вы имеете в виду количество слов, то Вам наврали: в словаре Ожегова всего 80.000 слов, в словаре Даля - 200.000, а во всём русском языке, если мне память не изменяет, около 500.000. А Вы о химии какой-то :) Бросьте, объёмы информации можно считать большими, если БД пополняется на 50-100 тыс. записей в день.
Насчёт готовых алгоритмов - не помню, где-то видела. Потрясите сеть, наверняка десяток-другой найдёте.

Ответить на это сообщение
 
 Re: Алгоритм
Автор: Dim 
Дата:   05-02-02 10:57

Давайте сузим задачу до проверки одного слова в пределах одной ошибки редактирования. Например слово "ьужчина" (мужчина) и "каркан"(может быть аркан, капкан, канкан, каран). Как находятся правильные-слова кандидаты?

Ответить на это сообщение
 
 Re: Алгоритм
Автор: Юлия Зайцева 
Дата:   05-02-02 18:05

Ладно. Не знаю, позволяют ли библиотеки С вставлять в SQL-запросы свои функции, но предположим, что не позволяют. Примем предельное кол-во несовпадающих символов за 1. Примем допустимое расхождение в длинах исходного слова и искомого за 20%.

field1 - поле, в котором ведётся поиск
a=исходное слово
b=длина(a)
с=округленное(b/5)
for i=0 to b-1
искать, где field1 содержит (подстроку от a c 1-го символа по i-тый И подстроку от a c i+2-го символа по b-тый) И длина(field1)>=b-с И длина(field1)<=b+с
if найдено
выбрать
endif
endfor

Можно ещё указать номера символов в field1, с которых начинается
вхождение подстрок. Но можно и не указывать.
Чтобы не увеличивать время поиска, рекомендую сначала собрать комплект подстрок в двумерный массив(2, b-1), сформировать циклом выражение и сделать макроподстановку в команду фильтра (запроса).
Это экспромт, так что на всякий случай проверьте счётчики.

Ответить на это сообщение
 
 Re: Алгоритм проверки орфографии?
Автор: lil 
Дата:   18-08-05 13:59

Как будет правильно "Согласно ценнику" или "Согласно ценника"?

Ответить на это сообщение
 
 Re: Алгоритм проверки орфографии?
Автор: starry_dust 
Дата:   15-09-07 14:22

Правильно будет : согласно ценнику, т.к. наречие 'согласно' предполагает наличие после него существительного в дательном падеже, а не в родительном. Так, например, согласно(Чему?) акту, согласно закону и так далее...

Ответить на это сообщение
 форумы  |  свернуть  |  начало  |  к началу   назад  |  вперед