Програмування перевірки правопису: hunspell. Частина 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 lt; lt; "* .dic";
dir.setSorting (QDir :: Name);
QFileInfoList fil = dir.entryInfoList (filters);
for (int i = 0 i fromUnicode (word) -
speller-gt; add (es.data ()) -

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

У загальному випадку досить лише першого параметра -word - знову ж в кодуванні словника. Повертається нуль, якщо слово «погане», і не нуль, якщо «хороше»:



if (speller-gt; spell ( "foobar"))
-//
else
-//

У необов`язковий параметр int * info функція може вивести додаткові відомості про перевіряється слові, а в char ** root - корінь слова. Отримати список «припущень» для помилкового слова можна функцією suggest:



int suggest (char *** slst, const char * word) -


Давайте трохи відвернемося від теми і знайдемо підприємство, якому можна буде продати ваш готовий програмний продукт, який використовує передову систему правопису! Для цього просто зайдіть на spr.az (https://spr.az/) і виберіть навмання будь-яку організацію, чия діяльність так чи інакше пов`язана з використанням високих програмних технологій!

Програмування перевірки правопису: Hunspell. частина II

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

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

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

висновок

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

ІНШЕ

Буряк лікує не гірше ліків! фото

Буряк лікує не гірше ліків!

Відео: ОВОЧ, ЯКИЙ ЛІКУЄ ВСЕ! Неймовірно - АЛЕ - ФАКТ!Буряк лікує не гірше ліків! Оздоровлюючий рецепт з буряка. 1,5…

Формули в word фото

Формули в word

Відео: Введення формули в word Сьогодні ми детально вивчимо, яким чином можна вставити формулу в документ, а також які…

Неясності з phonon фото

Неясності з phonon

Від труднощів збірки перейдемо до неясним місцях у використанні Phonon. Phonon підтримує ті мультимедійні формати, які…

Бесіди про qt: qsettings і xml фото

Бесіди про qt: qsettings і xml

Клас QSettings служить Qt-програмістам вірою і правдою, коли потрібно зберегти або завантажити будь-які налаштування…

» » Програмування перевірки правопису: hunspell. Частина ii