Я такое делал через hunspell.
Писал extension-обертку для php - лежит
вот тут (пример сборки там - под Ubuntu 12).
Документация на саму библиотеку -
вот тут, плюс смотреть как оно обернуто (а оно обернуто прямолинейно) у меня
в Main.cpp.
Словари можно взять или
вот тут, или, например, из OpenOffice. Стандартные из debian/ubuntu тоже подойдут, обычно лежат в /usr/share/dictionaries.
Пример:
Код:
$ php -r 'var_dump( (new hunspell("en_GB.dic", "en_GB.aff"))->analyze("doing") );'
array(2) {
[0]=>
string(14) " st:doing ts:0"
[1]=>
string(33) " st:do ts:0 al:did al:didst is:Vg"
}
$ php -r 'var_dump( (new hunspell("en_GB.dic", "en_GB.aff"))->analyze("went") );'
array(2) {
[0]=>
string(12) " st:go ts:Vd"
[1]=>
string(19) " st:wend ts:0 is:Vd" // ну а что, тоже логично :)
}
UPD: Мне надо было обрабатывать дофига слов в реалтайме. Если у тебя немного - проще использовать hunspell command line через exec.