hunspell: добавить слово в словарь из командной строки

hunspell: добавить слово в словарь из командной строки

Отстраница руководства hunspell:

...
    When in the -a mode, hunspell will also accept lines  of  single
    words  prefixed  with  any of '*', '&', '@', '+', '-', '~', '#',
    '!', '%', '`', or '^'.  A line starting with '*' tells  hunspell
    to  insert the word into the user's dictionary (similar to the I
    command).
...

Я попробовал что-то вроде: echo "* my_word" | hunspell -aно этого слова нет в моем словаре, так как анализ файла-образца снова показывает, что это слово написано с ошибкой.

Как это работает, как добавить пользовательское слово?
Или с помощью Aspell, или любой "обычной" программы, которая пишет в совместимые словари, читаемые Hunspell/Aspell?

решение1

Я думаю, что вместо (similar to the I command)этого должно быть (similar to the A command):

A

Accept the word for the rest of this hunspell session. 

Давайте manеще раз проверим страницу:

The -a option is intended to be used from other programs through a pipe.
In this mode, hunspell prints a one-line version identification message,
and then begins reading lines of input.

Итак, когда в -a mode, hunspellсеанс завершается после прочтения и обработки последней строки ввода. Более того,

When in the -a mode, hunspell will also accept lines of single words prefixed
with any of '*', '&', '@', '+', '-', '~', '#', '!', '%', ''', or '^'. A line
starting with '*' tells hunspell to insert the word into the user's dictionary
(similar to the I command)[........] A line prefixed with '#' will cause the
personal dictionary to be saved.

Добавление префикса к строке с одним словом *(обратите внимание, что между словом и префиксом не должно быть пробела) добавит это слово в словарь пользователя, но только для текущего hunspellсеанса, поскольку, согласно manстранице, только строка с префиксом #приведет к сохранению личного словаря (файла на диске, то есть). Поэтому запуск

echo "*goosfraba" | hunspell -a

не делает абсолютно ничего. hunspellдобавляетгуфрабав словарь для этого сеанса, затем выходит (нет других строк для обработки). Вам нужно добавить вторую строку с префиксом , #чтобы сохранить недавно добавленные слова:

echo -e "*goosfraba\n#" | hunspell -a

Давайте посмотрим:

::проверка орфографиигуфраба:

echo -e "goosfraba" | hunspell -a
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)
& goosfraba 1 0: goofball

& = Wordотсутствует в словаре, есть одно близкое совпадение:дурачок.

::добавление goosfraba в словарь, а затем проверка орфографии во время того же hunspellсеанса (две строки):

echo -e "*goosfraba\ngoosfraba" | hunspell -a
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)
*

* = Wordесть в словаре.

::проверка орфографиигуфрабаснова (новый hunspellсеанс):

echo -e "goosfraba" | hunspell -a
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)
& goosfraba 1 0: goofball

& = Опять же, wordего нет в словаре (ничего не было сохранено во время предыдущего сеанса)

::добавление goosfraba в словарь и сохранение в течение того же hunspellсеанса (две строки):

echo -e "*goosfraba\n#" | hunspell -a
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)

::проверка орфографиигуфрабаснова (новый hunspellсеанс):

echo "goosfraba" | hunspell -a
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)
*

* = Wordесть в словаре.

решение2

Я обнаружил, что самое простое решение — использовать Aspell и создать в домашней папке пользовательский файл с именем.aspell.lang.pws, с таким содержимым:

personal_ws-1.1 en 0
my_word

для языка "en", что, кстати, кажется отличным способом поделиться "переносным словарем"

Связанный контент