void EnchantSpellingAlternativesPrivate::setEnchantSpellingAlternatives( Token* token, MorphoSyntacticData* tokenData, FsaStringsPool& sp) { // try to find simple Uncapitalization MORPHOLOGINIT; // FIXME Conditions below could be process unit parameters const LimaString& tokenStr=token->stringForm(); if (token->status().getAlphaCapital() == T_CAPITAL || token->status().getAlphaCapital() == T_CAPITAL_1ST || token->status().getAlphaCapital() == T_CAPITAL_SMALL || token->status().isAlphaConcatAbbrev() || token->status().isAlphaHyphen() || token->status().isAlphaPossessive() || tokenStr.toUpper() == tokenStr) { return; } std::vector<std::string> suggestions = m_enchantDictionary->suggest(tokenStr.toUtf8().constData()); for (std::vector<std::string>::const_iterator it = suggestions.begin(); it != suggestions.end();it++) { LimaString correction = LimaString::fromUtf8((*it).c_str()); // FIXME Conditions below could be process unit parameters if ( correction.size() > 1 && correction != tokenStr ) { DictionaryEntry* entry = new DictionaryEntry(m_dictionary->getEntry(correction)); MorphoSyntacticDataHandler lingInfosHandler(*tokenData, SPELLING_ALTERNATIVE); if (!entry->isEmpty()) { LINFO << "EnchantSpellingAlternativesPrivate::setEnchantSpellingAlternatives correcting" << tokenStr << "into" << correction; // add orthographic alternative to Token; StringsPoolIndex idx=sp[correction]; token->addOrthographicAlternatives(idx); if (entry->hasLingInfos()) { entry->parseLingInfos(&lingInfosHandler); } } else { delete entry; } } } }
LList * AySpellChecker::suggest(const char * word) { if(!word || !spell_checker) return NULL; std::vector<std::string> suggestions; spell_checker->suggest(word, suggestions); LList * words = NULL; std::vector<std::string>::iterator aEnd = suggestions.end(); for (std::vector<std::string>::iterator aI = suggestions.begin(); aI != aEnd; ++aI) words = l_list_append(words, strdup(aI->c_str())); return words; }