Сайт Алексея Озерицкого

Искусственный интеллект, суперкомпьютерные системы, параллельные вычисления, численные методы, алгоритмы

Stemmer

Стеммер — это алгоритм или программа для определения основы заданного исходного слова:

кружка: кружка (сущ., ж.), кружок (сущ., м.)
моя: мыть (гл.), мой (мест.)

Такие алгоритмы применяются в поиcковых системах для обобщения поисковых запросов пользователей.

Мой Stemmer написан в качестве обучающего примера для иллюстрации подходов к созданию подобных программ и основан на использовании библиотеки hunspell.

Распространяется по лицензии BSD из трех пунктов.

Скачать stemmer2-2008-11-05.tar.gz (848,2 Кб)

Сборка

Для сборки Stemmer необходимо установить пакеты flex и hunspell.

Выполните следующие команды:

tar xvf stemmer2-xxxx-xx-xx.tar.gz
cd stemmer2-xxxx-xx-xx
cmake -DCMAKE_BUILD_TYPE=Release .
make

Использование

Для работы программы необходимы словари. Два словаря включены в дистрибутив, другие можно найти на сайте aspell.net.

Текст считывается из stdout.

cd stemmer2
cat test.txt | ../bin/stemmer2

Пример работы программы

Через запятую перечислены варианты начальных форм.
:1 означает, что слово найдено в словаре
:2 означает, что слово определено с помощью snowball.

Исходный файл

Буря мглою небо кроет,
 Вихри снежные крутя;
 То, как зверь, она завоет,
 То заплачет, как дитя,
 То по кровле обветшалой
 Вдруг соломой зашумит,
 То, как путник запоздалый,
 К нам в окошко застучит.
Наша ветхая лачужка
 И печальна и темна.
 Что же ты, моя старушка,
 Приумолкла у окна?
 Или бури завываньем
 Ты, мой друг, утомлена,
 Или дремлешь под жужжаньем
 Своего веретена?
Выпьем, добрая подружка
 Бедной юности моей,
 Выпьем с горя; где же кружка?
 Сердцу будет веселей.
 Спой мне песню, как синица
 Тихо за морем жила;
 Спой мне песню, как девица
 За водой поутру шла.
Буря мглою небо кроет,
 Вихри снежные крутя;
 То, как зверь, она завоет,
 То заплачет, как дитя.
 Выпьем, добрая подружка
 Бедной юности моей,
 Выпьем с горя; где же кружка?
 Сердцу будет веселей.

Результат

[Буря: буря, бурить, :1] [мглою: мгла, :1] [небо: небо, :1] [кроет: крыть, :1],
 [Вихри: вихрь, :1] [снежные: снежный, :1] [крутя: крутить, :1];
 [То: то, :1], [как: как, :1] [зверь: зверь, :1], [она: она, :1] [завоет: завыть, :1],
 [То: то, :1] [заплачет: заплакать, :1], [как: как, :1] [дитя: дитя, :1],
 [То: то, :1] [по: по, :1] [кровле: кровля, :1] [обветшалой: обветшалый, :1]
 [Вдруг: вдруг, :1] [соломой: солома, :1] [зашумит: зашуметь, :1],
 [То: то, :1], [как: как, :1] [путник: путник, :1] [запоздалый: запоздалый, :1],
 [К: к, :1] [нам: нам, :1] [в: в, :1] [окошко: окошко, :1] [застучит: застучать, :1].
[Наша: наша, :1] [ветхая: ветхий, :1] [лачужка: лачужка, :1]
 [И: и, :1] [печальна: печальный, :1] [и: и, :1] [темна: темна, :1].
 [Что: что, :1] [же: же, :1] [ты: ты, :1], [моя: моя, мыть, :1] [старушка: старушка, :1],
 [Приумолкла: приумолк, :1] [у: у, :1] [окна: окно, :1]?
 [Или: или, :1] [бури: буря, бурить, :1] [завываньем: завыван, :2]
 [Ты: ты, :1], [мой: мой, мыть, :1] [друг: друг, :1], [утомлена: утомленный, :1],
 [Или: или, :1] [дремлешь: дремлешь, :1] [под: под, :1] [жужжаньем: жужжанье, :1]
 [Своего: своего, :1] [веретена: веретена, веретено, :1]?
[Выпьем: выпьем, :1], [добрая: добрый, :1] [подружка: подружка, :1]
 [Бедной: бедный, :1] [юности: юность, :1] [моей: моей, :1],
 [Выпьем: выпьем, :1] [с: с, :1] [горя: горя, горе, :1]; [где: где, :1] [же: же, :1] [кружка: кружка, кружок, :1]?
 [Сердцу: сердце, :1] [будет: быть, :1] [веселей: веселее, веселеть, :1].
 [Спой: спой, :1] [мне: мне, :1] [песню: песня, :1], [как: как, :1] [синица: синица, :1]
 [Тихо: тихий, :1] [за: за, :1] [морем: море, :1] [жила: жила, жить, :1];
 [Спой: спой, :1] [мне: мне, :1] [песню: песня, :1], [как: как, :1] [девица: девица, :1]
 [За: за, :1] [водой: вода, :1] [поутру: поутру, :1] [шла: шла, :1].
[Буря: буря, бурить, :1] [мглою: мгла, :1] [небо: небо, :1] [кроет: крыть, :1],
 [Вихри: вихрь, :1] [снежные: снежный, :1] [крутя: крутить, :1];
 [То: то, :1], [как: как, :1] [зверь: зверь, :1], [она: она, :1] [завоет: завыть, :1],
 [То: то, :1] [заплачет: заплакать, :1], [как: как, :1] [дитя: дитя, :1].
 [Выпьем: выпьем, :1], [добрая: добрый, :1] [подружка: подружка, :1]
 [Бедной: бедный, :1] [юности: юность, :1] [моей: моей, :1],
 [Выпьем: выпьем, :1] [с: с, :1] [горя: горя, горе, :1]; [где: где, :1] [же: же, :1] [кружка: кружка, кружок, :1]?
 [Сердцу: сердце, :1] [будет: быть, :1] [веселей: веселее, веселеть, :1].