Yakov
|
Словарь сокращений будет, наверное, работать очень быстро, т.к. у него будет пустой или почти пустой файл aff.
Есть ещё довод за разделение словаря: Если в словаре много коротких устаревших/редкоиспользуемых слов, то существует гораздо большая вероятность, что будут пропущены слова с ошибками (например вотум - > вот ум)
|
|
|
Записан
|
|
|
|
Рыбка Рио
|
Оказывается, дело не в aff всё-таки. Чем больше слов с ошибками, тем дольше работает словарь. Т.е. как только словарь понимает, что слово написано правильно, он переходит к новому, а если слово написано неправильно, то он обыскивает весь словарь - а это дольше. Поэтому, действительно, скорость растёт нелинейно. Например, стандартный словарь с пустым файлом aff работает почти в два раза дольше , чем с нормальным файлом aff. Поэтому при увеличениии количества слов в словаре скорость работы словаря даже возрастает. Если в том макросе для проверки словарей увеличить количество ошибочных слов, то скорость снизится. С этим и связано, что словарь с одной лишь буквой А работал не так уж и быстро, а словарь "без А" работал даже чуть медленнее (на 1 секунду), хотя слов в нём было меньше на 4231 , т.к. в макросе есть несколько слов на "а".
|
|
|
Записан
|
ubuntu 12.04 + LibO3.6.0
|
|
|
Рыбка Рио
|
Если в словаре много коротких устаревших/редкоиспользуемых слов, то существует гораздо большая вероятность, что будут пропущены слова с ошибками (например вотум - > вот ум) Да, тут не только скорость имеет значение. Ведь если словарь станет слишком большим, то почти все слова будут считаться правильными, ведь если, к примеру, в словаре имеются имена людей Ло, Лу, Ли, Ляо, Лиу, Лао, Лё, Лиро, Миу, Мур, Муни и т.д. (это же почти любое сочетание гласных и согласных!), то почти любая опечатка будет восприниматься как чьё-то имя. Т.е. если кто-то напишет случайно вместо предлога "В" "Ав", то это будет считаться именем Ав, и не подчеркнётся.
|
|
|
Записан
|
ubuntu 12.04 + LibO3.6.0
|
|
|
Рыбка Рио
|
Эврика. Нужно рассматривать две скорости работы словаря: при полностью правильном тексте (скорость1) и при полностью неправильном тексте (скорость2). Скорость1 словаря зависит от того, как быстро словарь обнаружит, что слово написано правильно и перейдёт к следующему слову, т.е. самые частые и короткие слова типа "я", "он", "она", "не", должны стоять в этом словаре в самом начале. Короче, самые обиходные и обычные слова - в начале, и самые редкие и длинные слова - в конце. Скорость1 не зависит от количества слов в словаре, а зависит от их расположения в словаре.
Скорость2 не зависит от расположения слов в словаре, а зависит только от их количества и от файла aff. Т.е., в любом случае, словарь будет обыскан от и до и будет обнаружено, что это ошибочное слово.
Обычный текст содержит всего несколько ошибок, поэтому основной вклад в общую скорость даёт скорость1.
Кстати, что означает TRY абвгдежз ... и т.д. в файле aff? Означает ли это, что если слово будет содержать букву не из данного набора, то оно будет признано ошибочным сразу?
|
|
« Последнее редактирование: 17 Июнь 2010, 09:22 от Трио »
|
Записан
|
ubuntu 12.04 + LibO3.6.0
|
|
|
dr.Faust
Администратор

Offline
Пол: 
Расположение: Ростов-на-Дону
Сообщений: 1 340
|
Скорость1 словаря зависит от того, как быстро словарь обнаружит, что слово написано правильно и перейдёт к следующему слову, т.е. самые частые и короткие слова типа "я", "он", "она", "не", должны стоять в этом словаре в самом начале. Короче, самые обиходные и обычные слова - в начале, и самые редкие и длинные слова - в конце. Скорость1 не зависит от количества слов в словаре, а зависит от их расположения в словаре. э... Разве словарь не должен быть упорядоченным? OOo, что просматривает словарь по одному слову? Не верю - это идиотизм. Скорее всего, слова перед использование словаря упорядочиваются.
|
|
|
Записан
|
Свобода информации - свобода личности!
|
|
|
bormant
Глобальный модератор
Offline
Сообщений: 939
|
Скорость1 словаря зависит от того, как быстро словарь обнаружит, что слово написано правильно и перейдёт к следующему слову, т.е. самые частые и короткие слова типа "я", "он", "она", "не", должны стоять в этом словаре в самом начале. Простите, бред. Утверждение истинно только для случая линейного просмотра при поиске. Такой поиск очень затратен (в худшем случае нужно просмотреть весь словарь). Обычно используют бинарный поиск в сортированном списке (последовательное сокращение области поиска в 2 или несколько раз, определение, в какой части исковое слово и т.д., иногда, начиная с какого-то незначительного размера последний "хвост" обрабатывают обычным поиском (дополнительная экономия бывает или нет)).
|
|
|
Записан
|
|
|
|
VlhOwn
Форумчанин
 
Offline
Пол: 
Расположение: Ростов-на-Дону
Сообщений: 1 076
|
Ну, не такой уж и бред. То, что Вы, Bormant, описали, есть реализация двоичного сбалансированного дерева с балансировкой на основе лексикографического порядка. То, о чем хотел, как мне кажется, сказать Трио, - это сбалансированное дерево с балансировкой на основе частотных характеристик слов. Правда для этого понадобится еще и частотный словарь, в котором тоже искать надо  Про функциональные способы вычисления частотных характеристик слова я не слышал.
|
|
|
Записан
|
|
|
|
Рыбка Рио
|
Да, похоже, bormant, вы правы. От порядка слов не зависит (что слова на я, что слова на а, одинаково быстро находит). Строка TRY оаитенрсвйлпкьыяудмзшбчгщюжцёхфэъАВСМКГПТЕИЛФНДОЭРЗЮЯБХЖШЦУЧЬЫЪЩЙЁ Не знаете зачем нужна эта строка?
|
|
« Последнее редактирование: 17 Июнь 2010, 11:58 от Трио »
|
Записан
|
ubuntu 12.04 + LibO3.6.0
|
|
|
bormant
Глобальный модератор
Offline
Сообщений: 939
|
Не знаю. Предположу, что именно в этом порядке пытаются подставлять буквы для получения вариантов замены неправильного слова. UPD: OPTIONS FOR SUGGESTION TRY characters Hunspell can suggest right word forms, when those differs from the bad form by one TRY character. The parameter of TRY is case sensitive. http://pwet.fr/man/linux/fichiers_speciaux/hunspell
|
|
« Последнее редактирование: 17 Июнь 2010, 11:54 от bormant »
|
Записан
|
|
|
|
|
Рыбка Рио
|
Оказывается, время, которое тратится на поиск ошибочного слова, зависит от длины слова (почти линейно).
[вложение удалено Администратором]
|
|
|
Записан
|
ubuntu 12.04 + LibO3.6.0
|
|
|
Yakov
|
Могу предложить ещё один словарь http://sisyphus.ru/ru/srpm/Sisyphus/ispell-ru-rk. Сборка для OpenOffice переделана из формата ispell, распространяется под GPL v2. Недостаток - какая-то ошибка в файле аффиксов, из- за которой очень многие слова подчёркиваются как ошибочные! Причина была в том, что Hunspell не понимает файл аффиксов Ispell После конвертации всё замечательно работает!!!  [вложение удалено Администратором]
|
|
|
Записан
|
|
|
|
PiVV
Гость
|
Дорогой товарищ Trio! Давайте не будем изобретать велосипеды и открывать открытые двери. Почитайте документацию по Hunspell (хотя бы устаревший перевод на mozilla.russia.org). А то вы своими откровениями по поводу принципов работы движка проверки орфографии просто пугаете.
P.S. На прошлом "самом дружелюбном" форуме я уже спрашивал - кто-нибудь знает как узнать версию движка hunspell, которая используется в установленной версии OOo?
|
|
|
Записан
|
|
|
|
prof-alex
|
кто-нибудь знает как узнать версию движка hunspell, которая используется в установленной версии OOo? Видимо спрашивать у сборщиков. Что-то я libhunspell.so в ООо не нашёл, видимо собирают статически.
|
|
|
Записан
|
 «Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации» Э. Дейкстра
|
|
|
Рыбка Рио
|
На прошлом "самом дружелюбном" форуме я уже спрашивал - кто-нибудь знает как узнать версию движка hunspell, которая используется в установленной версии OOo?
В DEV300m83 hunspell-1.2.9, а в OOO320m18 hunspell-1.2.8. ( http://svn.services.openoffice.org/opengrok)
|
|
« Последнее редактирование: 18 Июнь 2010, 18:12 от Трио »
|
Записан
|
ubuntu 12.04 + LibO3.6.0
|
|
|
|