Simple vérification de l'orthographe algorithme

J'ai été chargé de la création d'un simple correcteur orthographique pour une mission, mais ont donné à peu près aucune directive, donc je me demandais si quelqu'un pouvait m'aider. Je ne suis pas après quelqu'un pour faire la mission pour moi, mais n'importe quelle direction ou de l'aide de l'algorithme serait génial! Si ce que je demande n'est pas dans le guildlines du site, puis je suis désolé et je vais chercher ailleurs. 🙂

Le projet se charge correctement orthographié minuscules mots et puis il faut faire des suggestions d'orthographe en fonction de deux critères:

  • Une lettre de différence (soit ajouté ou soustrait à obtenir la parole ainsi qu'un mot dans le dictionnaire). Par exemple une "pile" serait une suggestion pour "staick' et 'cool' serait une suggestion pour "coo".

  • Une lettre de substitution. Ainsi, par exemple, le "mauvais" serait une suggestion pour 'ca'.

Donc, juste pour m'assurer que j'ai bien expliquer.. je pourrais charger dans les mots [bonjour, au revoir, fantastique, bon, dieu] et puis les suggestions pour la (mal orthographiée) mot 'godd' [est bon, dieu].

Vitesse est mon compte principal, ici, alors que je pense que je sais un moyen d'obtenir ce travail, je ne suis vraiment pas trop sûr de savoir comment efficace elle sera. La façon dont je suis la pensée de le faire est de créer un map<string, vector<string>> puis pour chaque mot correctement orthographié qui est chargé, ajoutez l'correctement orthographié travail en tant que clé dans la carte et le remplir le vecteur à tous les "mauvais" permutations de ce mot.

Ensuite, quand je veux rechercher un mot, je vais regarder à travers tous les vecteurs dans la carte pour voir si ce mot est une déformation de l'un des mot correctement orthographié. Si elle l'est, je vais ajouter la clé, comme une suggestion orthographique.

Cela semble comme il l'aurait fait prendre des TAS de mémoire mais il y aurait sûrement des milliers de combinaisons possibles pour chaque mot? Il semble aussi que ce serait très très lent si mon premier dictionnaire de mots correctement écrits était grand?

Je pensais que je pourrais peut-être coupé du temps un peu en ne regardant dans les touches qui sont similaires à la parole, je suis à la recherche d'. Mais là encore, si elles sont similaires, d'une certaine façon, il est probable que la clé sera une suggestion en ce sens je n'ai pas besoin de toutes ces permutations!

Alors oui, je suis un peu perplexe sur la direction dans laquelle je devrais regarder dans. Je vous remercie de toute l'aide que je ne suis vraiment pas sûr de savoir comment estimer la vitesse des différentes façons de faire les choses (nous n'avons pas appris cela à tous dans la classe).

  • Il existe assez peu de traitement de la langue naturelle des outils open source et peut être utilisé comme une source d'inspiration sur les algorithmes sont en cours d'utilisation. Pour une C++ affectation à la recherche à un Java open Source, outil de e.g être un bon choix pour vous assurer que vous choisissez les algorithmes: voir languagetool.org pour un exemple.
InformationsquelleAutor Sam | 2011-10-18