L'algorithme methapone


phonétique algorithme tel que soundex seulement optimisé pour la langue anglaise
Une description de l'algorithme metaphone est disponible à cette page, il y a aussi le double metaphone algorithme qui est également mis en œuvre sur C et avec une description à ASpell site
Il y a déjà un metaphone de mise en œuvre de delphi, vous pouvez le trouver sur SourceForge cette version est bien meilleure que ce


Le code est ci-dessous, J'ai obtenu par la traduction de la Metaphone.cc l'unité de la htDig moteur de recherche, il travaille dans C bien mais la traduction que j'ai faite n'est pas la meilleure, Pourquoi? parce que j'ai traduit le plus souvent en utilisant le C de l'approche et de ne pas le Delphi.
je tiens également à encourager la recherche sur le mieux (plus rapide, moins de code de ballonnement) traduit cet algorithme, je suis en train de travailler sur une seule. Si vous avez une meilleure traduction à la poste.
NOTE: Cet algorithme ainsi que soundex sont uniquement en anglais donc pas de support de l'unicode, ou l'appui -, á, é, í et miscelaneous caractères
fonction MetaPhone3(const Mot:String KeyLength: Integer = 10): String
& nbsp & nbsp fonction Même(x: Char): Boolean
& nbsp & nbsp begin
& ! & ! & ! & nbsp
Résultat := x de ['F',J,L,'M','N', ' R ' ]
& nbsp & nbsp fin
& nbsp & nbsp fonction Voyelle(x: Char): Boolean
& nbsp & nbsp begin
& ! & ! & ! & nbsp
Résultat := x de ['A','E','I','O','U']
& nbsp & nbsp fin
& nbsp & nbsp fonction Varson(x: Char): Boolean
& nbsp & nbsp begin
& ! & ! & ! & nbsp
Result := x de [ ' C ' ,'G','P','S','T']
& nbsp & nbsp fin
& nbsp & nbsp fonction Noghf(x: Char): Boolean
& nbsp & nbsp begin
& ! & ! & ! & nbsp
Result := x de ['B', 'D', 'H']
& nbsp & nbsp fin
& nbsp & nbsp fonction FrontV(x: Char): Boolean
& nbsp & nbsp begin
& ! & ! & ! & nbsp
Result := x de ['E', 'I', 'Y']
& nbsp & nbsp fin
var
& nbsp & nbsp
i: Integer
& nbsp & nbsp Tmp:String
begin
& nbsp & nbsp
Tmp := Trim(Majuscules(Mot))
& nbsp & nbsp j' := 1
& nbsp & nbsp while i > 0)
& nbsp & nbsp commencer
& ! & ! & ! & nbsp si
(Tmp[i] de ['G', ' K ' , 'P']) et (Tmp[i 1] = 'N')
& ! & ! & ! & ! & ! & nbsp ou ((Tmp[i] = 'A') et (Tmp[i 1] = 'E'))
& ! & ! & ! & ! & ! & nbsp ou ((Tmp[i] = ' W ' ) et (Tmp[i 1] = ' R ' )) Supprimer(Tmp, i, 1)
& ! & ! & ! & nbsp si (Tmp[i] = ' W ' ) et (Tmp[i 1] = 'H') puis
& ! & ! & ! & ! & ! & nbsp
Supprimer(Tmp, 2, 1)
& ! & ! & ! & nbsp si (Tmp[i] = 'X') Tmp[i] := 'S'
& ! & ! & ! & ! i := pos(' ', Tmp)
& ! & ! & ! & nbsp si i > 0) Tmp[i] := #0
& nbsp & nbsp fin
& nbsp & nbsp i := 0
& nbsp & nbsp Tmp := Tmp #0
& nbsp & nbsp while (Length () < KeyLength)
& nbsp & nbsp commencer
& ! & ! & ! & nbsp
inc(i)
& ! & ! & ! & nbsp si (Tmp[i] =#0) Break
& ! & ! & ! & nbsp si (Tmp[i] = Tmp[i-1]) et (Tmp[i] <> ' C ' ) puis
& ! & ! & ! & ! & ! & nbsp

& ! & ! & ! & nbsp si Même(Tmp[i]) ou (Voyelle(Tmp[i]) et (Tmp[i-1] = #0)) puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp
Result := Result Tmp[i]
& ! & ! & ! & ! & ! & nbsp Continuer
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp cas Tmp[i] de
& ! & ! & ! & ! & ! & nbsp
'B': si ((i>=2) et (Tmp[i-1] <> 'M')) ou i = 1) Result := Result Tmp[i]
& ! & ! & ! & ! & ! & nbsp ' C ' :
& ! & ! & ! & ! & ! & nbsp begin
& ! & ! & ! & ! & ! & ! & ! & nbsp si
FrontV(Tmp[i 1]) et (Tmp[i-1] <> 'S') puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Résultat := Résultat 'S'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp inc(i)

& ! & ! & ! & ! & ! & ! & ! & nbsp else if (Copier(Tmp, i, 2) = 'CH') ou (Copier (Tmp, i ,3) = 'CIA') puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Résultat := Résultat 'X'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (Copier(Tmp, i, 2) = 'CH') inc(i)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (Copier(Tmp, i, 3) = 'CIA')inc(i, 2)
& ! & ! & ! & ! & ! & ! & ! & nbsp autre Résultat := Résultat ' K '
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp 'D': si (Copier(Tmp, i, 2) = 'DG') et FrontV(Tmp[i 3]) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
inc(i,3)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Résultat := Résultat J
& ! & ! & ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Résultat := Résultat 'T'
& ! & ! & ! & ! & ! & nbsp 'G': si ((Tmp[i 1] <> 'G') ou Voyelle(Tmp[i 1])) et
& ! & ! & ! & ! & ! & ! & ! & nbsp
((Tmp[i 1]<>'N') ou ((Tmp[i 1] = #0) et (Tmp[i 2]<>'E')
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp ou (Tmp[i 3] <>'D')) et ((Tmp[i 1] <> 'D') ou pas FrontV(Tmp[i 1]))) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & nbsp & nbsp & nbsp si
(FrontV(Tmp[i 1])) et (Tmp[i 2] <> 'G') puis
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Résultat := Résultat 'J'
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp
else
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Résultat := Résultat ' K '
& ! & ! & ! & ! & ! & ! & ! & nbsp else if (Tmp[i 1] = 'H') et pas noghf(Tmp[i -3]) et (Tmp[i -4] <> 'H') puis
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Result := Result 'F'

& ! & ! & ! & ! & ! & nbsp 'H': sinon Varson(Tmp[i-1]) et (pas Voyelle(Tmp[i-1]) ou Voyelle(Tmp[i 1])) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp
Result := Result 'H'
& ! & ! & ! & ! & ! & nbsp ' K ' : si (Tmp[i-1] <> ' C ' ) Résultat := Résultat ' K '
& ! & ! & ! & ! & ! & nbsp 'P': si (Tmp[i 1] = 'H') puis
& ! & ! & ! & ! & ! & ! & ! & nbsp
Result := Result 'F'
& ! & ! & ! & ! & ! & ! & ! & nbsp
else Result := Result Tmp[i]
& ! & ! & ! & ! & ! & nbsp 'Q': Result := Result ' K '
& ! & ! & ! & ! & ! & nbsp 'S': si (Tmp[i 1] = 'H') ou ((Copier(Tmp, i, 2) = 'SI')
& ! & ! & ! & ! & ! & ! & ! & nbsp et (Tmp[i 3] de ['O','A'])) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp
Result := Result 'X'
& ! & ! & ! & ! & ! & ! & ! & nbsp
else
& ! & ! & ! & ! & ! & ! & ! & nbsp
Résultat := Résultat 'S'
& ! & ! & ! & ! & ! & nbsp 'T': si (Tmp[i 1] = 'I') et (Tmp[i 2] de ['O','A']) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp
Result := Result 'X'
& ! & ! & ! & ! & ! & ! & ! & nbsp
else if (Tmp[i 1] = 'H') Result := Result '0' else
& ! & ! & ! & ! & ! & ! & ! & nbsp si
(Tmp[i 1] <> ' C ' ) ou (Tmp[i 2] <> 'H') Résultat := Résultat 'T'
& ! & ! & ! & ! & ! & nbsp 'V': Résultat := Résultat 'F'
& ! & ! & ! & ! & ! & nbsp ' W ' ,'Y': si Voyelle(Tmp[i 1]) Result := Result Tmp[i]
& ! & ! & ! & ! & ! & nbsp 'X': Résultat := Résultat 'KS'
& ! & ! & ! & ! & ! & nbsp 'Z': Résultat := Résultat 'S'
& ! & ! & ! & nbsp fin
& nbsp & nbsp fin
fin









L'algorithme methapone


L'algorithme methapone : Plusieurs milliers de conseils pour vous faciliter la vie.


phonetique algorithme tel que soundex seulement optimise pour la langue anglaise
Une description de l'algorithme metaphone est disponible a cette page, il y a aussi le double metaphone algorithme qui est egalement mis en œuvre sur C et avec une description a ASpell site
Il y a deja un metaphone de mise en œuvre de delphi, vous pouvez le trouver sur SourceForge cette version est bien meilleure que ce


Le code est ci-dessous, J'ai obtenu par la traduction de la Metaphone.cc l'unite de la htDig moteur de recherche, il travaille dans C bien mais la traduction que j'ai faite n'est pas la meilleure, Pourquoi? parce que j'ai traduit le plus souvent en utilisant le C de l'approche et de ne pas le Delphi.
je tiens egalement a encourager la recherche sur le mieux (plus rapide, moins de code de ballonnement) traduit cet algorithme, je suis en train de travailler sur une seule. Si vous avez une meilleure traduction a la poste.
NOTE: Cet algorithme ainsi que soundex sont uniquement en anglais donc pas de support de l'unicode, ou l'appui -, a, e, i et miscelaneous caracteres
fonction MetaPhone3(const Mot:String KeyLength: Integer = 10): String
& nbsp & nbsp fonction Meme(x: Char): Boolean
& nbsp & nbsp begin
& ! & ! & ! & nbsp
Resultat := x de ['F',J,L,'M','N', ' R ' ]
& nbsp & nbsp fin
& nbsp & nbsp fonction Voyelle(x: Char): Boolean
& nbsp & nbsp begin
& ! & ! & ! & nbsp
Resultat := x de ['A','E','I','O','U']
& nbsp & nbsp fin
& nbsp & nbsp fonction Varson(x: Char): Boolean
& nbsp & nbsp begin
& ! & ! & ! & nbsp
Result := x de [ ' C ' ,'G','P','S','T']
& nbsp & nbsp fin
& nbsp & nbsp fonction Noghf(x: Char): Boolean
& nbsp & nbsp begin
& ! & ! & ! & nbsp
Result := x de ['B', 'D', 'H']
& nbsp & nbsp fin
& nbsp & nbsp fonction FrontV(x: Char): Boolean
& nbsp & nbsp begin
& ! & ! & ! & nbsp
Result := x de ['E', 'I', 'Y']
& nbsp & nbsp fin
var
& nbsp & nbsp
i: Integer
& nbsp & nbsp Tmp:String
begin
& nbsp & nbsp
Tmp := Trim(Majuscules(Mot))
& nbsp & nbsp j' := 1
& nbsp & nbsp while i > 0)
& nbsp & nbsp commencer
& ! & ! & ! & nbsp si
(Tmp[i] de ['G', ' K ' , 'P']) et (Tmp[i 1] = 'N')
& ! & ! & ! & ! & ! & nbsp ou ((Tmp[i] = 'A') et (Tmp[i 1] = 'E'))
& ! & ! & ! & ! & ! & nbsp ou ((Tmp[i] = ' W ' ) et (Tmp[i 1] = ' R ' )) Supprimer(Tmp, i, 1)
& ! & ! & ! & nbsp si (Tmp[i] = ' W ' ) et (Tmp[i 1] = 'H') puis
& ! & ! & ! & ! & ! & nbsp
Supprimer(Tmp, 2, 1)
& ! & ! & ! & nbsp si (Tmp[i] = 'X') Tmp[i] := 'S'
& ! & ! & ! & ! i := pos(' ', Tmp)
& ! & ! & ! & nbsp si i > 0) Tmp[i] := #0
& nbsp & nbsp fin
& nbsp & nbsp i := 0
& nbsp & nbsp Tmp := Tmp #0
& nbsp & nbsp while (Length () < KeyLength)
& nbsp & nbsp commencer
& ! & ! & ! & nbsp
inc(i)
& ! & ! & ! & nbsp si (Tmp[i] =#0) Break
& ! & ! & ! & nbsp si (Tmp[i] = Tmp[i-1]) et (Tmp[i] <> ' C ' ) puis
& ! & ! & ! & ! & ! & nbsp

& ! & ! & ! & nbsp si Meme(Tmp[i]) ou (Voyelle(Tmp[i]) et (Tmp[i-1] = #0)) puis
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp
Result := Result Tmp[i]
& ! & ! & ! & ! & ! & nbsp Continuer
& ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp cas Tmp[i] de
& ! & ! & ! & ! & ! & nbsp
'B': si ((i>=2) et (Tmp[i-1] <> 'M')) ou i = 1) Result := Result Tmp[i]
& ! & ! & ! & ! & ! & nbsp ' C ' :
& ! & ! & ! & ! & ! & nbsp begin
& ! & ! & ! & ! & ! & ! & ! & nbsp si
FrontV(Tmp[i 1]) et (Tmp[i-1] <> 'S') puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Resultat := Resultat 'S'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp inc(i)

& ! & ! & ! & ! & ! & ! & ! & nbsp else if (Copier(Tmp, i, 2) = 'CH') ou (Copier (Tmp, i ,3) = 'CIA') puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Resultat := Resultat 'X'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (Copier(Tmp, i, 2) = 'CH') inc(i)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si (Copier(Tmp, i, 3) = 'CIA')inc(i, 2)
& ! & ! & ! & ! & ! & ! & ! & nbsp autre Resultat := Resultat ' K '
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp 'D': si (Copier(Tmp, i, 2) = 'DG') et FrontV(Tmp[i 3]) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
inc(i,3)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Resultat := Resultat J
& ! & ! & ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Resultat := Resultat 'T'
& ! & ! & ! & ! & ! & nbsp 'G': si ((Tmp[i 1] <> 'G') ou Voyelle(Tmp[i 1])) et
& ! & ! & ! & ! & ! & ! & ! & nbsp
((Tmp[i 1]<>'N') ou ((Tmp[i 1] = #0) et (Tmp[i 2]<>'E')
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp ou (Tmp[i 3] <>'D')) et ((Tmp[i 1] <> 'D') ou pas FrontV(Tmp[i 1]))) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & nbsp & nbsp & nbsp si
(FrontV(Tmp[i 1])) et (Tmp[i 2] <> 'G') puis
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Resultat := Resultat 'J'
& ! & ! & ! & ! & ! & ! & ! & ! & nbsp
else
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Resultat := Resultat ' K '
& ! & ! & ! & ! & ! & ! & ! & nbsp else if (Tmp[i 1] = 'H') et pas noghf(Tmp[i -3]) et (Tmp[i -4] <> 'H') puis
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp
Result := Result 'F'

& ! & ! & ! & ! & ! & nbsp 'H': sinon Varson(Tmp[i-1]) et (pas Voyelle(Tmp[i-1]) ou Voyelle(Tmp[i 1])) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp
Result := Result 'H'
& ! & ! & ! & ! & ! & nbsp ' K ' : si (Tmp[i-1] <> ' C ' ) Resultat := Resultat ' K '
& ! & ! & ! & ! & ! & nbsp 'P': si (Tmp[i 1] = 'H') puis
& ! & ! & ! & ! & ! & ! & ! & nbsp
Result := Result 'F'
& ! & ! & ! & ! & ! & ! & ! & nbsp
else Result := Result Tmp[i]
& ! & ! & ! & ! & ! & nbsp 'Q': Result := Result ' K '
& ! & ! & ! & ! & ! & nbsp 'S': si (Tmp[i 1] = 'H') ou ((Copier(Tmp, i, 2) = 'SI')
& ! & ! & ! & ! & ! & ! & ! & nbsp et (Tmp[i 3] de ['O','A'])) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp
Result := Result 'X'
& ! & ! & ! & ! & ! & ! & ! & nbsp
else
& ! & ! & ! & ! & ! & ! & ! & nbsp
Resultat := Resultat 'S'
& ! & ! & ! & ! & ! & nbsp 'T': si (Tmp[i 1] = 'I') et (Tmp[i 2] de ['O','A']) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp
Result := Result 'X'
& ! & ! & ! & ! & ! & ! & ! & nbsp
else if (Tmp[i 1] = 'H') Result := Result '0' else
& ! & ! & ! & ! & ! & ! & ! & nbsp si
(Tmp[i 1] <> ' C ' ) ou (Tmp[i 2] <> 'H') Resultat := Resultat 'T'
& ! & ! & ! & ! & ! & nbsp 'V': Resultat := Resultat 'F'
& ! & ! & ! & ! & ! & nbsp ' W ' ,'Y': si Voyelle(Tmp[i 1]) Result := Result Tmp[i]
& ! & ! & ! & ! & ! & nbsp 'X': Resultat := Resultat 'KS'
& ! & ! & ! & ! & ! & nbsp 'Z': Resultat := Resultat 'S'
& ! & ! & ! & nbsp fin
& nbsp & nbsp fin
fin


L'algorithme methapone

L'algorithme methapone : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation