Стеммер — это алгоритм или программа для определения основы заданного исходного слова:
кружка: кружка (сущ., ж.), кружок (сущ., м.) моя: мыть (гл.), мой (мест.)
Такие алгоритмы применяются в пои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].