Мой вариант использования следующий: по заданной строке распознать все допустимые слова, начиная с начала строки. Например:
blueberryqqq
должен вывести:
blue
blueberry
Для этого у меня есть структура словаря, которая использует trie<char>
. Например, если мой словарь состоит только из двух слов выше, он будет выглядеть так:
b->l->u->e->\0
->b->e->r->r->y->\0
Когда я исследую свою входную строку, процесс проверки орфографии может сказать мне, по мере того, как я перехожу от буквы к букве:
Обратите внимание, что это флаги и оба 1
а также 2
может быть правдой одновременно. При таком подходе я могу эффективно найти оба blue
а также blueberry
сразу и прекратить попытки сразу же, когда я доберусь до y
, Продолжая с примером, вот что происходит, когда я перехожу от буквы к букве:
b:1, l:1, u:1, e:1|2, b:1, e:1, r:1, r:1, y:2
Когда я вижу 1|2
Я знаю, что «синий» является допустимым словом, но я также знаю, что нужно идти дальше вниз по строке, потому что мой словарь говорит мне, что возможно больше слов. Как только я достигну y
, Я остановился. Весьма эффективно, поскольку я посещаю каждое письмо только один раз для всех допустимых слов и прекращаю проверку орфографии, как только словарь говорит мне, что нет смысла идти дальше. Отлично!
Моя проблема в том, что мой словарь состоит из / usr / share / dict / words и этот файл не содержит форму множественного числа «bluberry», которая является «черникой», и в общем случае не будет содержать все «производные» всех слов , Так что, если входная строка blueberriesqqq
Я получу только blue
как действительный.
Если бы я использовал библиотеку для проверки орфографии, такую как aspell
или же hunspell
, насколько я могу судить, Мне нужно было бы проверить все подстроки по отдельности! например b
, bl
, blu
и т.д. Довольно неэффективно! Не только это, но я не знаю, когда прекратить проверять. например Откуда я знаю, что нет слов, начинающихся с blueberriesqq
?
Итак, мой вопрос звучит так: есть ли библиотека для проверки орфографии, подходящая для моего варианта использования?
Обратите внимание, что предложения по правописанию не помогут. Переходя blueb
aspell не возвращает никаких орфографических предложений, которые начинаются с blueb
, Таким образом, я бы закончил свой поиск, хотя все еще есть возможность найти более подходящие слова.
Задача ещё не решена.