Конвертирование Hunspell словаря в бинарный формат morfologik-stemming

В данной статье я расскажу как под Ubuntu(14.04) конвертировать словарь в формате Hunspell(*.dic и *.aff) в словарь бинарного формата morfologik-stemming.

Создание списка слов в флективной форме

Прежде всего, необходимо установить пакеты с утилитами. Для этого надо в консоле выполнить следующие команды:

sudo apt-get install recode
sudo apt-get install hunspell
sudo apt-get install hunspell-tools

После чего создаём баш скрипт «create_inflected_list.sh»:

#!/bin/bash
echo "Begin"

CONTENT_DIR=$1
PREFIX=$2
TEMP_FILE_DIR=$3

ENCODING=$(awk '/SET/{VALUE=$2}END{print VALUE}' $CONTENT_DIR/$PREFIX.aff)

if [ "$ENCODING" != "" ]
then	
	cp $CONTENT_DIR/$PREFIX.aff $CONTENT_DIR/$PREFIX\_temp.aff
	cp $CONTENT_DIR/$PREFIX.dic $CONTENT_DIR/$PREFIX\_temp.dic
	recode $ENCODING..UTF-8  $CONTENT_DIR/$PREFIX\_temp.aff
	awk '{gsub("^SET.*$", "");print}' $CONTENT_DIR/$PREFIX\_temp.aff > $CONTENT_DIR/$PREFIX\_temp.aff	
	recode $ENCODING..UTF-8  $CONTENT_DIR/$PREFIX\_temp.dic
else
	cp $CONTENT_DIR/$PREFIX.aff $CONTENT_DIR/$PREFIX\_temp.aff
	cp $CONTENT_DIR/$PREFIX.dic $CONTENT_DIR/$PREFIX\_temp.dic
fi

echo "Create inflectional list"
# unmunch doesn't properly work for languages with compounds, thus we filter the result using hunspell
unmunch $CONTENT_DIR/$PREFIX\_temp.dic $CONTENT_DIR/$PREFIX\_temp.aff | hunspell -d $CONTENT_DIR/$PREFIX\_temp -G -l | sort -f | uniq > $TEMP_FILE_DIR/$PREFIX.inflected_list

rm $CONTENT_DIR/$PREFIX\_temp.aff
rm $CONTENT_DIR/$PREFIX\_temp.dic

echo "End"

данный скрипт преобразует Hunspell словарь в список слов в флективной форме и сохраняет их в отдельный файл.

После этого, запускаем баш скрипт со следующими параметрами:

./create_inflected_list.sh [путь к папке с Hunspell словарём] [имя словаря(без расширения)] [путь к папке куда будет сохранён файл со списком флективных форм]

Я запускал со следующими параметрами:

./create_inflected_list.sh /home/hronom/test ru_RU /home/hronom/test

Внимание!!! Файлы Hunspell словаря должны быть в кодировке UTF-8 без BOM. Или с указанием другой кодировки в файле аффиксов.

Конвертирование в бинарный формат morfologik-stemming

Сначала качаем исходники morfologik-stemming из репозитория:

https://github.com/morfologik/morfologik-stemming.git

Собираем используя maven при помощи команды:

mvn clean package

После того, как всё успешно собралось переходим в папку morfologik-stemming:

morfologik-stemming/morfologik-tools/target/

и запускаем оттуда morfologik-tools-1.10.0-SNAPSHOT-standalone.jar со следующими параметрами:

java -jar morfologik-tools-1.10.0-SNAPSHOT-standalone.jar fsa_build -i [путь к файлу с флективными формами слов] -o [путь к выходному файлу]

Я запускал со следующими параметрами:

java -jar morfologik-tools-1.10.0-SNAPSHOT-standalone.jar fsa_build -i /home/hronom/test/ru_RU.inflected_list -o /home/hronom/test/ru_RU.dict

Создание *.info файла

Это конфигурационный файл в котором описаны параметры, необходимые для работы с конвертированным словарём. Имя конфигурационного файла должно быть таким же, как и имя словаря к которому принадлежит этот файл.

Мой конфигурационный файл(ru_RU.info) выглядит следующим образом:

#
# Dictionary properties.
#

fsa.dict.separator=+
fsa.dict.encoding=UTF-8

Подробнее о параметрах можно почитать здесь: http://wiki.languagetool.org/hunspell-support#toc5

Заключение

После нехитрых операций мы имеем два файла с расширением «*.dict» и «*.info» которые можно использовать в morfologik-stemming.

morfologik-stemming: https://github.com/morfologik/morfologik-stemming

Исправления/пожелания/предложения к статье приветствуются, так, что пишите =)

Реклама

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s