morpher.ru 8 (499) 647 86 54
nowhere@morpher.ru
 
 

Сравнение с аналогами

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

Так как же выяснить, какой продукт лучше? В данной статье описывается методика и результаты тестирования нескольких продуктов с аналогичной заявленной функциональностью. На самом деле, каждый продукт индивидуален и реализует свой уникальный набор функций. Но все из нижеперечисленных продуктов реализуют функцию склонения фамилий, имен и отчеств (ФИО). Именно она и была проверена в данном исследовании.

Были протестированы следующие сервисы склонения:

  • Склонение фамилий, имен и отчеств по падежам. aka Padeg.dll
    Библиотека функций. Версия 3.3
    Авторы – Сергей Плахов и Геннадий Покаташкин.
    Win32 DLL, написанная на Дельфи, с экспортируемыми функциями и COM-интерфейсом.
  • Падеж. Версия "Крохотулька" (далее Крохотулька)
    Автор – Железняков Юрий Юрьевич aka SuperJur.
    Обработка на языке 1С. Впервые опубликована в 2002 г.
    В целях тестирования алгоритм был портирован на C#.
  • Яндекс.Склонятор
    Веб-сервис. Первая версия опубликована 8 сентября 2008.
  • Морфер
    .NET DLL, версия от 20.12.2008. Впервые внедрён в 2003 г.

Методика тестирования

Каждому из сервисов был предложен один и тот же набор тестов, где каждый тест состоит из:

  • ФИО в именительном падеже,
  • номера падежа,
  • правильного ответа – ФИО в форме данного падежа.

Тест считается пройденным, если ответ сервиса на запрос (ФИО в именительном падеже, номер падежа) совпадает с правильным ответом. Мерой качества сервиса склонения принимается процент правильных ответов. Тесты были составлены вручную, и в рамках тестирования предполагается их правильность. На деле, конечно, они правильны с точностью до человеческих ошибок составителя. При составлении тестового набора избегались примеры, допускающие неоднозначное склонение, например, женская фамилия Смородина в родительном падеже может быть (кого?) Смородиной или Смородины. Обсуждение таких фамилий.

Всего в тестовом наборе около 1000 тестов. Все ФИО были взяты из Интернета – из списков выпускников, военнослужащих, депутатов и т.п., поэтому есть уверенность, что они не выдуманные, а принадлежат реальным людям. Все ФИО трёхчленные, так как большинство сервисов (кроме Морфера) полагаются на отчество при определении рода или требуют явного указания рода. Морфер напротив не требует ни отчества, ни рода, а сам определяет род и выдаёт его на выходе.

При сравнении ответов были допущены некоторые послабления. А именно, считались одинаковыми буквы Е и Ё, игнорировались пробелы, вставляемые некоторыми сервисами в конце строки, не учитывался регистр букв, не учитывалось наличие или отсутствие предлога у формы предложного падежа.

Например, при склонении «ИВАНОВ Илья Петрович» в творительном падеже различные сервисы выдают следующие результаты:

Яндекс: «ИВАНОВым Ильей Петровичем»
Крохотулька: «Ивановым Ильей Петровичем » (лишний пробел в конце)
Морфер: «ИВАНОВЫМ Ильёй Петровичем»
Padeg.dll: «Ивановым Ильей Петровичем»

Все они признаются одинаковыми программой тестирования.

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

Результаты

Итоговые результаты тестирования от 23.12.2008:

  % ошибок  
Морфер: 1,5% Протокол...
Padeg.dll: 2,3% Протокол...
Крохотулька: 16,3% Протокол...
Яндекс: 50,3% Протокол...

Примечание: результаты тестирования и тесты обновлены 6.01.2009 в соответствии с обсуждением на сайте Padeg.dll (начиная с сообщения от 05-01-2009 21:30). Из тестового набора удалены фамилии Заяц и Киричек как неоднозначно склоняющиеся.

Примечание 2: результаты тестирования обновлены 24.06.2009 в соответствии с поправкой автора "Крохотульки" Sj относительно реализации функции Лев в языке 1С (см. комментарий внизу этой страницы).

Программа тестирования вместе с тестами доступна для скачивания и поэтому любой желающий может проверить эти результаты. Те, у кого нет DLL Морфера, могут заменить её веб-сервисом, с которым программа тестирования тоже умеет работать.

Скриншот программы

Скачать полный исходный код программы с тестами (424K)

В папке bin\Release есть уже собранный исполняемый файл.


Комментарии

Добавить комментарий
SuperJur 15.05.2009 20:32 UTC

Добрый день.
Просьба выслать сам алгоритм "крохотульки" , который бы тестирован, на Sj@bk.ru, ибо сомневаюсь в предоставленных результатах его тестирования.

Удачи!
Sj



Сергей Слепов 15.05.2009 23:32 UTC

Рад Вас видеть на моем сайте, Юрий Юрьевич! :)

Код "крохотульки" был взят с Проклуба непосредственно перед тестированием. Его версия на C# есть в дистрибутиве программы тестирования, доступной для скачивания на этой странице (файл \Сервисы\Крохотулька.cs). Там же исходный текст на 1С.

С уважением,
Сергей



Sj 06.06.2009 16:14 UTC

Привет, Сергей!
Сорь, что так долго молчал. Рад слышать тебя, точнее - читать. Все, что мог от сюда Сервисы\Крохотулька.cs, я скачал, ну и да ладна... вот бы еще надыбать те фамили, что не так склоняются, а?



Sj 06.06.2009 16:15 UTC

а. все. вижу протокол.



Sj 06.06.2009 16:17 UTC

Все. Будет битва!



Сергей Слепов 23.06.2009 14:01 UTC

Sj, ну как, что показала экспертиза? Соответствуют ли результаты тестирования переписанной на C# версии "Крохотульки", результатам исходной версии на 1С?



Sj 24.06.2009 05:21 UTC

Доброе утро время суток и слебядей!

>> Соответствуют ли результаты тестирования переписанной на C# версии "Крохотульки", результатам исходной версии на 1С?

Отвечу прямо: и да, и нет. А теперь по порядку:
Дошёл я до имени Тариел, на нем и остановился. Там, где приведен результат и ожидаемый результат, действительно была несуразность. Но там, где написано "(ошибка)"... такого в исходном коде мне достичь не удалось - функция возвращает результат равный ожидаемому.
Дальнейшая экспертиза продолжиться в скором времени, как только закрою активные проекты... Что-то слишком много накопилось всего. Да и имя Тариел заставило меня призадуматься... Под вопросом остаются фио написанные целиком большими буквами. Имхо, все же любое фио должны начинаться с заглавной буквы, а остальные маленькие ( меня этому в школе еще учили ).



Сергей Слепов 24.06.2009 09:41 UTC

Строка "(ошибка)" возвращается, когда возникает исключение. Например, при вызове Лев("абв",5). А в 1С эта функция ведет себя иначе?



Sj 24.06.2009 10:20 UTC

Лев("абв",5) вернет "абв", ошибки не возникнет



Сергей Слепов 24.06.2009 13:52 UTC

Исправил функции Лев и Сред. Процент ошибок упал с 36.6% до 16.3%. Обновил протокол и тестовую программу.



Sj 27.06.2009 16:57 UTC

я тоже раньше думал, что никогда не ошибаюсь...



Sj 27.06.2009 17:24 UTC

>> Процент ошибок упал с 36.6% до 16.3%
это выражение не совсем корректно. Более правильно сказать, что процент ошибок стал более соответстовать действительности. Так как вы сами понимаете почему.



СергейКа 10.08.2009 05:06 UTC

Интересно было бы увидеть результат тестирования в сравнении со "штатной" компонентой от 1С "NameDecl.dll" ...



Cube 12.01.2010 07:30 UTC

Компонента в 1С безнадежно отстала в своем развитии, а жаль... Лично я ей не пользуюсь, т.к. она не склоняет должности, поэтому она в половине случаев бесполезна (например строку "в лице директора Василия Пупкина" она сформировать не сможет)...



Владимир 09.03.2010 15:43 UTC

Интересное исследование. Хоть мне оно пока что ни к чему, но проделанная работа достойна похвал. Как говорится, риспект!
Думаю, рано или поздно (прямо или косвенно) Ваш опыт пригодится каждому рядовому программисту.



S031 17.03.2010 08:37 UTC

Спасибо Сергею за предоставленную базу для тестирования. Спасибо Юрию за "крохотульку". Немного доработал ее напильником снизив процент ошибок до 6. скачать можно тут:
http://narod.ru/disk/18833411000/Declension.cs.html



Алекс 02.04.2010 19:55 UTC

А есть ли обработка определения пола/рода по фио для 1с?
Что-то я все перерыл, нет такой!



Сергей Слепов 06.10.2011 19:23 UTC

Алекс, теперь функция определения пода/рода есть во внешней компоненте для 1С.



(аноним) 19.04.2013 15:53 UTC

А Вы не тестировали http://excelvba.ru/code/GenitiveCase ? Было бы интересно посмотреть, сколько ошибок будет у такого маленького решения.



Сергей Слепов 19.04.2013 20:38 UTC

Нет, не тестировал, но думаю, что ошибок будет порядка 15%, т.к. данное решение сопоставимо по сложности с "Крохотулькой" (см. выше). Если хотите, сами потестируйте. Могу для этого выслать вам надстройку для Excel.



Юрий 19.07.2013 09:30 UTC

Вот ещё один кандидат на сравнение (сам не пользовался): http://ndeclin.narod.ru/download.htm



Сергей Слепов 19.07.2013 18:27 UTC

NDeclin - это обертка вокруг Padeg.dll для работы в 1С. Качество склонения полностью определяется библиотекой Padeg.dll, которая здесь протестирована. Со времени тестирования (2008 год) алгоритм Padeg.dll, насколько мне известно, не изменился. Морфер же продолжает активно развиваться - пополняется словарь, оттачиваются алгоритмы, добавляются новые функции (перевод во множественное число, пропись чисел, украинский язык, поддержка большего числа типов словосочетаний).

Для работы с 1С рекомендую бесплатный веб-сервис. Для его использования достаточно написать всего 3 строчки кода:
Определение=Новый WSОпределения("http://morpher.ru/WebService.asmx?WSDL");

Морфер=Новый WSПрокси(Определение,"http://morpher.ru/","WebService","WebServiceSoap");
Сообщить(Морфер.GetXml("Генеральный директор"));

Эти 3 строчки дают вам качественное склонение, причем качество это со временем будет только улучшаться :)



Андрей 05.03.2014 08:25 UTC

День добрый.
Интересное решение, понравилось.
Пробовал из 1С, скачал обработку и проверил.
Обнаружил что веб сервис не распознает украинский язык,
он по умолчанию считает его русским.
Нужно доработать чтобы определял язык или передавать параметр языка.

С уважением, Андрей



Сергей Слепов 05.03.2014 09:23 UTC

Андрей, спасибо за положительный отзыв. Для украинского языка необходимо использовать функцию веб-сервиса GetXmlUkr.



Андрей 05.03.2014 16:29 UTC

День добрый, Сергей!

Спасибо за дополнение. Учту при использовании.
Рекомендую добавить в пример обработки из 1С
для полноты картины использования.

С уважением, Андрей



Константин 01.12.2014 17:50 UTC

Автору респект. Но есть вопрос.
В чем удобство подобного стиля:

IСервисСклонения IСервисСклоненияFactory.Create () ???

Чтобы это написать, необходимо 5! раз переключить раскладку. Я уже молчу о читабельности и мультиязычности.



Добавить комментарий


 

Библиотеки

Заметили опечатку? Выделите слово мышкой и нажмите Ctrl-Enter. Система Orphus

© Сергей Слепов, 2003 - 2016. Перепечатка материалов сайта только с разрешения автора.