Новость из категории: Информация

Программирование проверки правописания: Hunspell. Часть II

Содержание:
1. Часть I;
2. Часть II (Вы читаете данный раздел).
Программирование проверки правописания: Hunspell. Часть II

Для Qt можно написать примерно такую функцию, возвращающую список словарных модулей без расширений файла (в параметре dict_dir передается каталог, где лежат словари):
QStringList CHunspellChecker::get _ speller _ modules _ list ( J const QString &dict _ dir)
{
QDir dir (dict_dir);
QStringList filters; QStringList sl;
filters << "*.dic";
dir.setSorting (QDir::Name);
QFileInfoList fil = dir.entryInfoList (filters);
for (int i = 0; i fromUnicode (word);
speller->add (es.data());

Подобным образом надо перекодировать все строки, передаваемые в функции Hunspell. В GTK для перекодировки используйте функцию g_convert. Проверка слова на правильность в Hunspell осуществляется вызовом функции spell:
int spell (const char * word, int * info = NULL,
char ** root = NULL);

В общем случае достаточно только первого параметра -word - опять же в кодировке словаря. Возвращается ноль, если слово «плохое», и не ноль, если «хорошее»:
if (speller->spell ("foobar"))
;//
else
;//

В необязательный параметр int *info функция может вывести дополнительные сведения о проверяемом слове, а в char **root - корень слова. Получить список «предположений» для ошибочного слова можно функцией suggest:
int suggest (char ***slst, const char *word);


Давайте немного отвлечемся от темы и найдем предприятие, которому можно будет продать ваш готовый программный продукт, использующий передовую систему правописания! Для этого просто зайдите на www.spr.az (http://www.spr.az/) и выберите наугад любую организацию, чья деятельность так или иначе связана с использованием высоких программных технологий!

Программирование проверки правописания: Hunspell. Часть II

Здесь word - ошибочное слово, а slst - буфер для списка строк (Hunspell сам выделит им память). Возвращаемое значение - число элементов в списке slst. Проиллюстрирую вызов функции с привязкой к Qt. В примере мы наполняем «предположениями» список QStringList sl, чтобы потом использовать его еще где-то, например, построив на его основе контекстное меню:
QStringList sl;
QTextCodec *codec = QTextCodec: :codecForName (encoding);
QByteArray es = codec->fromUnicode (word);
char **slst;
int size = speller-> suggest (&slst, es.data());
for (int i = 0; i toUnicode (slst[i]));
speller->free _list (&slst, size);

Как видите, в конце мы вызываем функцию free_list, чтобы очистить память, выделенную Hunspell под список. Количество «предположений» жестко прописано в заголовочном файле Hunspell:
#define MAXSUGGESTION 15

Кстати, подобным образом ограничено и число пользовательских словарей - их может быть загружено не более двадцати.

Заключение

В статье я говорил только об одной стороне Hunspell - средствах проверки правописания. Но ведь Hunspell - это еще и набор функций по работе с языком: по морфологическому анализу, словообразованию и т. п. Например, можно получить для слова множественное число из единственного числа. Но всё это работает не по умолчанию со стандартными словарями, а посредством специально написанных для подобных целей аффиксных файлов. Подробности смотрите в файле hunspell(4) man - руководства Hunspell.

Рейтинг статьи

Оценка
2/5
голосов: 1
Ваша оценка статье по пятибальной шкале:
 
 
   

Поделиться

Похожие новости

Комментарии

^ Наверх