Конвертация словаря в формат Hunspell

Автор Yakov, 22 апреля 2010, 11:38

0 Пользователи и 1 гость просматривают эту тему.

yup

#105
В официальной документации Hunspell сказано, что строки аффиксов должны иметь вид:
ЦитироватьPFX flag stripping prefix [condition [morphological_fields...]]
SFX flag stripping suffix [condition [morphological_fields...]]
где поля stripping и prefix/suffix являются обязательными, а отсутствие соответствующего значения обозначается нулём:
ЦитироватьZero stripping or affix are indicated by zero.

Тем не менее, в выложенном здесь словаре присутствует сотня строк вида:
SFX 6 ый  .
SFX 10 0  .
SFX 11 0  .
SFX 18 а  .
...
SFX 2503 ый  .
SFX 2513 ный  .

(На всякий случай, во вложении файл (UTF-8) с полным списком.)

По идее, в этих строках точка (условие) должна считаться значением суффикса.
Потому и вопрос: это ошибка при создании словаря, или код Hunspell такое нормально воспринимает?

Yakov

Цитата: yup от 31 января 2021, 04:53код Hunspell такое нормально воспринимает?
Это типовая запись, даже в словаре Hunspell (предустановленном в LibreOffice) для локали en_US используется точка.

mikekaganski

man 4 hunspell:

ЦитироватьZero condition is indicated by dot. Condition is a simplified, regular expression-like pattern, which must be met before the affix can be applied. (Dot signs an arbitrary character. ...
С уважением,
Михаил Каганский

yup

#108
Граждане, кажется, вы меня не поняли. Я не о том, что точка не нужна (хотя, судя по тому, что в описании синтаксиса строки она стоит в квадратных скобках, её, действительно, в конце лучше не ставить - русский радист это явно знал :)).

Я о том, что если понимать документацию буквально, то вместо пустой отбрасываемой части слова (stripping) или пустого аффикса (prefix/suffix) должен стоять ноль. А в указанных строках нули вместо отбрасываемых частей присутствуют, а нулей вместо аффиксов нет.

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

Yakov

Цитата: yup от 31 января 2021, 04:53По идее, в этих строках точка (условие) должна считаться значением суффикса.
Точка в указанном примере не является значением суффикса!!!
Точка - это условие, которое применяется к основе слова из основного словаря. Если стоит точка - то строка в описании суффикса применяется к любому слову.


yup

#111
Цитата: Yakov от 31 января 2021, 13:59Точка в указанном примере не является значением суффикса!!!
Точка - это условие, которое применяется к основе слова из основного словаря.

Смотрим официально заявленный синтаксис:
ЦитироватьPFX flag stripping prefix [condition [morphological_fields...]]
SFX flag stripping suffix [condition [morphological_fields...]]

Согласно ему, первые 4 элемента строки (?FX, flag, stripping и affix) являются обязательными. Поэтому вместо нулевых stripping или suffix полагается ставить 0 - "свято место пусто не бывает".

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

Собственно, unmunch так и делает - выдаёт варианты слов, использующих данные правила, с точкой в конце.

Кстати, описание по ссылке жутко устарело (и содержит несколько хоть и не очень существенных, но ошибок). Если хотите, выложу свой перевод нынешней версии этой документации.

Yakov

#112
Точка отсекается Hunspell, так что на проверке это не сказывается.
А, вообще, видимо в следующем релизе словаря я внесу изменения в файл аффиксов,
так как там есть строчки и с "0" и с " " (пробелом), заменю пробелы на 0 для привидения файла в единообразный вид.


yup

#113
Цитата: Yakov от 31 января 2021, 14:46Точка отсекается Hunspell, так что на проверке это не сказывается.
Только что проверил с помощью именно Hunspell: из тройки строк
Цитироватьблаговещавшийся
благовещавш
благовещавш.
в которой две последние очевидно являются неправильными, последняя была расценена как одно правильное слово!

Цитата: Yakov от 31 января 2021, 14:46А, вообще, видимо в следующем релизе словаря я внесу изменения в файл аффиксов
Заодно попробуйте и точки в конце всех строк аффиксов убрать. Судя по документации, точку вместо пустого условия нужно ставить только в случае, когда в строке есть ещё и морфологические параметры. Если их нет, то точка не нужна. В таком случае её удаление из нынешнего словаря, если повезёт, может дать небольшой выигрыш, но если и нет, то в любом случае ничего не ухудшит

Yakov

В будущем планируется добавить морфологические параметры, поэтому точки должны остаться.

yup

Забыл спросить: пополнением новых версий словаря собственно словами занимаетесь вы сами, или массив слов каждый раз берётся готовым у АОТ?

А то я в файле .dic очевидные неправильности пообнаруживал и теперь не знаю, кому о них сообщать.

yup

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

Думаю, от их удаления скорость проверки может хорошо так подрасти.

yup

#117
Хоть это и не входило в первоначальные планы, но я написал утилиту для оптимизации словаря (на JavaScript под Windows Script Host). Программа ищет и удаляет:
1. Правила, которые ничего не делают.
2. Дубликаты правил внутри классов правил.
3. Дубликаты классов.

В результате её работы число правил в нынешнем russian-aot.aff уменьшается на 5555 штук (с 13712 до 8157).

Программкой поделиться?

yup

Поскольку словарь здешний заявлен как "Орфографический словарь для русского языка (только "Ё")", то решил я посмотреть, насколько корректен он в части "(только "Ё")". Вооружился Hunspell-ом и несколькими самописными программами, обложился академическими словарям, изданными Институтом русского языка, и начал...

Промежуточный итог: около 2000 неправильных слов (т.е., либо слово должно быть в словаре в двух написаниях, а есть только в одном, либо наоборот - должно быть в одном написании, а есть в обоих).

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

Файлы со списками слов, найденных на первом этапе, выложить?

yup

#119
Yakov, пожалуйста, обратите внимание: Ваш конвертер словарей работает неправильно. Он в конце каждого, абсолютно каждого, класса суффиксов добавляет лишнее правило. Совершенно постороннее, из другого класса. Именно потому и возникают слова вроде приведённых в моём предыдущем сообщении.
А также этот конвертер в каких-то ситуациях целиком теряет классы. Например, класс 12 используется в словаре, но отсутствует в файле аффиксов.

И ещё он не всегда учитывает, что фамилии, имена, отчества, географические названия и прочие имена  собственные в словарь Hunspell надо писать с большой буквы, и пишет их с маленькой.