Le moyen le plus efficace de mettre en œuvre une recherche phonétique
Quel est le moyen le plus efficace pour mettre en œuvre une recherche phonétique en C++ et/ou Java? Par la recherche phonétique, je veux dire la substitution de voyelles ou de consonnes que son semblable. Ce serait particulièrement utile pour les noms, parce que parfois, les noms de personnes ont en quelque sorte étrange de l'orthographe.
Je pense qu'il pourrait être efficace pour substituer les voyelles et quelques consonnes. Il peut également être judicieux de l'inclure certains cas particuliers, comme le silence " E " à la fin ou F et PH. Serait-il préférable d'utiliser cstring ou de chaînes de caractères en C++? Serait-il préférable de conserver une copie dans la mémoire avec les valeurs substituées ou appeler une fonction à chaque fois, nous cherchons quelque chose?
source d'informationauteur ctype.h
Vous devez vous connecter pour publier un commentaire.
Soundex avec ses variantes est l'algorithme standard pour cela. Il utilise la phonétique règles pour transformer le nom en un code alphanumérique. Noms avec le même code sont regroupés.
Autant que la mise en œuvre de la recherche, je voudrais utiliser une structure de données de cartes de chaque code soundex pour la liste des noms de code. En fonction de la structure de données utilisée (une table de hachage ou d'un arbre), la recherche pourrait être fait dans le temps qui est constante sur logarithmique en le nombre de différents codes soundex.
Je ne suis pas sûr exactement ce que vous voulez dire par
cstring
(MicrosoftCString
?) mais la normestd::string
classe sera parfaitement bien pour ce problème et pourrait être mon préféré.Outre Soundex vous trouverez également le Metaphone ou Double Metaphone phonétique de l'algorithme, ce qui semble être une amélioration pour la prononciation de l'anglais et est un assez nouvel algorithme.
Pour la prononciation allemande j'utilise le "Kölner Phonetik".
Apache Commons Codec vous donne une très simple Java mise en œuvre de ces algorithmes de base (Soundex, Metaphone, ...)
http://commons.apache.org/codec/
Par exemple, voir la javadoc de la soundex:
http://commons.apache.org/codec/apidocs/org/apache/commons/codec/language/Soundex.html
Juste en tapant code suivant vous la la valeur phonétique de votre Chaîne:
Et alors vous pouvez simplement le faire pour les deux chaînes et de comparer les valeurs phonétiques.
Hava un oeil sur le post suivant si vous êtes à la comparaison de deux chaînes de caractères, parce que la equals() méthodes est juste noir et blanc, et peut-être que vous aimeriez savoir combien de % il est correspondant:
Comment comparer presque similaire Chaînes de caractères en Java? (Chaîne de mesure de distance)