API Яндекс Лінгвістики під

Після відвідування Yet another Conference 2013 у мене виникла ідея написати API для всіх сервісів яндекс лінгвістики під .NET. Після нетривалого ковтання таких бібліотек на щастя не виявилося. Незважаючи на те, що може вона нікому особливо і не знадобиться, я все ж таки вирішив реалізувати її хоча б для того, щоб попрактикуватися з RestSharp, тестуванням та різними функціями гітхабу (issuers, release, markdown та ін.). Крім того, у процесі реалізації довелося зіткнутися з цікавим алгоритмом порівняння рядків, про який я згадаю у топіці.

Відразу кидаю посилання на вихідні та бінарики на GitHub: Code, Binary

Реалізовані API

  • Яндекс.Предиктор.Даний сервіс дозволяє програмам отримувати у вигляді підказок найбільш ймовірне продовження слова або фрази. Предиктор також враховує помилки у вихідному запиті. Це полегшує процес введення тексту, особливо на мобільних пристроях.
  • Яндекс.Словник.Даний сервіс дозволяє програмам отримувати докладні словникові статті з машинних словників Яндекса. Статті містять згруповані переклади, інформацію про частини мови, приклади та транскрипцію для англійських слів.
  • Яндекс.Переклад.Переклад тексту для більш ніж 30 мов.
  • Яндекс.Спеллер.Сервіс перевірки правопису, який допомагає знаходити та виправляти орфографічні помилки. Робота сервісу полягає в використанні орфографічного словника. Наразі Спеллер перевіряє тексти українською, українською та англійською мовами.
RestSharp дозволяє дуже легко писати код для синхронних та асинхронних HTTP GET та POST запитів, а також перетворювати отримані відповіді у форматі XML або JSON на .NET об'єкти (в даному проекті використовувавсяXML).

Розширена функція підрахунку відстані Дамерау-Левенштейна

У процесі реалізації спеллера мені захотілося, щоб користувачеві відображався як виправлений варіант тексту, а й помилки у ньому. На думку відразу спала думка про відстань Левейштейна. Однак:

  • Даний алгоритм не враховує транспозиційних помилок, якими є 80% при наборі тексту (дані з вікіпедії).
  • Даний алгоритм він повертаєвідстань, а непозиціїпомилок у новому слові.
Перший недолік був нівельований за допомогою відстані Дамерау-Левенштейна, а другий - за допомогою аналізу матриці, отриманої в процесі роботи алгоритму (відстань - це значення елемента останнього ряду в останньому стовпці матриці. Відповідно в моєму випадку відстанню буде загальна кількість помилок, поверненою цією функцією).

Таким чином було реалізовано алгоритм для пошуку наступних помилок у помилковому (word) та коректному (correctedWord) словах:

  • Заміна.Приклад: синхрафазатрон -> синхрпрофазпротрон
  • Вставка.Приклад: синхрофазотр -> синхрофазотрвін
  • Видалення.Приклад: синнхрофаазотрон -> сінхрофазотрон
  • Транспозиція.Приклад: синхрофазортон -> синхрофазотрвін
Крім того, ваги різних помилок можуть налаштовуватися (за замовчуванням усі мають однакову вагу, рівну одиниці).

Інтерфейс був реалізований на WinForms з надією, що програма буде запускатися і на Mono. Проте на ньому тестування не проводилось.

яндекс

А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»