Вільний алгоритм стемінгу для української мови

Це тільки перша реалізація алгоритму. Наразі він досить примітивний та має значний відсоток помилок (для файлу-зразка на 1018 слів - акуратність лише 94.01 %).

Якщо не дуже зрозуміли, що таке стемінг - перегляньте демо. Введіть у форму будь-які українські слова і побачете результат.

Поступово, проект "обростає" допоміжними інструментами. Наприклад, пошуком слів по закінченню, що дозволяє оцінити яких саме слів торкнеться те чи інше правило стемінгу.

Ще зверніть увагу на динамічне дерево закінчень.

Особливості алгоритму

Алгоритм працює з окремими словами. Це означає, що контекст у якому вжито слово - невідомий. Також недоступні категорії мовознавства як будова слова (корінь, суфікс, ...) та частини мови (іменник, прикметник тощо).

Наразі маємо такі прийоми при аналізі слів:

Від слова відсікається закінчення
Наприклад, закінчення "увати" перетворює слово "критикувати" у "критик".
Слово має незмінне закінчення
Слова з цим закінченням залишаються без змін. Приклад - "ск" і незмінні слова "блиск", "тиск", "обеліск" тощо.
Слово змінює закінчення
Це правило стосується слів у яких при відмінюванні "випадають" певні літери ("ядро" та "ядер" - закінчення "ер" змінюється на "р") чи змінюються ("чоловік" та "чоловіче" - "к" змінюється на "ч").
Слово відповідає регулярному виразу
Це спроба об'єнати декілька правил у одне складне. Можлово цей прийом не доживе до фінальної версії алгоритму. Але зараз, у коді зустрічаються вирази схожі на:
"(ов)*ува(в|вши|вшись|ла|ло|ли|ння|нні|нням|нню|ти|вся|всь|лись|лися|тись|тися)$"
Слово не змінюється при стемінгу, але є виключенням з правил
Це небажаний випадок для алгоритму. Він змущує утримувати словник слів виключень. Приклади "віче", "наче".
Слово змінюється при стемінгу, але теж є виключенням
Це найгірший випадок для алгоритму, тому що він змущує зберігати у словника одразу дві форми слова: оригинільну і стематизовану. Наприкад, слово "відер" має змінитися на "відр", хоча інші слова, що закінчуються на "ер" так не стематизуються ("авіадиспетчер", "вітер", "гравер" тощо).
Короткі слова залишаються незмінніми
Службові частини мови (прийменники, сполучники, частки), як правило, дуже короткі слова. За умовчанням алгоритм ігнорує слова до 2-х літер включно.

Всі ці прийоми можна застосовувати группами, які утворюють правила стемінгу.

Що треба зробити?

Знайти однодумців

Проект дуже молодий. Для його успішного втілення потрібна команда. Якщо ви програміст, мовознавець, студент, науковець або просто небайдужа людина - запрошую до співпраці.

Буду вдячний - якщо Ви по-піарите цей проект у соцмережах, адже результати його роботи можна використати, наприклад, у дипломній роботі, дисертації чи навіть прикрутити до пошукового модуля CMS вашого сайту.

Мої контакти

Створити справжню тестову базу

Файл-зразок потрібно довести хоча б до 10 тисяч слів (90% роботи попереду). Причому акцент робити на складних формах стемінгу, коли форму стемінга визначити не так просто (короткі слова, дієслова, слова іноземного походження тощо).

Викласти код з GNU/GPL ліцензією у вільний доступ

Бажано, щоб код лежав у якомусь відкритому ресурсі на зразок SourceForge чи GitHub.