Den Methapone Algorithm

En fonetisk algoritme som soundex bare optimalisert for den engelske languageA beskrivelse av metaphone algoritmen er tilgjengelig på denne siden også der er det doble metaphone algoritmen wich er også implementert på C og med en beskrivelse på aspell siteThere er allerede en metaphone implementering i Delphi du kan finne den på SourceForge at versjonen er langt bedre enn thisThe kode er under, jeg har oppnådd dette ved å oversette Metaphone.cc enhet htdigs søkemotor, det fungerer i C vel men oversettelsen jeg gjorde aint det bedre, hvorfor ? fordi jeg oversatte det meste ved hjelp av C tilnærming og ikke Delphi one.I ønsker også å oppmuntre til forskning på en bedre (raskere mindre kode oppsvulmet) tanslation av denne algoritmen, jobber jeg på en. . Hvis du tilfeldigvis har en bedre oversettelse post it NB: Denne algoritmen samt soundex er engelsk bare så ingen unicode støtte, eller støtte for N, A, E I og Annet tegnene -funksjonen
MetaPhone3 ( konst
Word: String
; KeyLength: Integer = 10): String
; -funksjonen
Same (x: Char): Boolean; begynner
Resultat: = x i product: [ 'F', 'J', 'L', 'M', 'N', 'R']; slutten
; -funksjonen
Vokal (x: Char): Boolean; begynner
Resultat: = x i product: [ 'A', 'E', 'I', 'O', 'U']; slutten
; -funksjonen
Varson (x: Char): Boolean; begynner
Resultat: = x i product: [ 'C', 'G', 'P', 'S', 'T']; slutten
; -funksjonen
Noghf (x: Char): Boolean; begynner
Resultat: = x i product: [ 'B', 'D', 'H']; slutten
; -funksjonen
FrontV (x: Char): Boolean; begynner
Resultat: = x i product: [ 'E', 'I', 'Y'] slutten
; Var
i: Integer; Tmp: String
; begynner
tmp: = Trim (store bokstaver (Word)); i: = 1; mens product: (i > 0) ikke begynne hvis
(TMP [i] i product: [ 'G', 'K', 'P']) og Selge (TMP [i + 1] = 'N') eller product: ((TMP [i] = 'A') og Selge (TMP [i + 1] = 'E')) eller product: ((TMP [i] = 'W') og Selge (TMP [i + 1] = 'R')) da
Slett (TMP, i, 1); hvis
(TMP [i] = 'W') og Selge (TMP [i + 1] = 'H') deretter
Slett (TMP, 2, 1 ); hvis
(TMP [i] = 'X') deretter
Tmp [i]: = 'S'; I: = pos ( '', TMP); hvis product: (i > 0) deretter
Tmp [i]: = # 0; slutten
; i: = 0; Tmp: = tmp + # 0; mens plakater (Lengde (resultater) < KeyLength) ikke begynne
inc (i); hvis
(TMP [i] = # 0) da
Break; hvis
(TMP [i] = Tmp [i-1]) og Selge (TMP [i] < > 'C') da
Fortsett; hvis
Same (TMP [i]) eller plakater (Vokal (TMP [i]) og Selge (TMP [i-1] = # 0)) deretter begynne
Resultat: = Resultat + Tmp [i]; Fortsette; slutten
; case
Tmp [i] av
'B': hvis product: ((i > = 2) og Selge (TMP [i-1] < > 'M')) eller product: (i = 1) da
Resultat: = Resultat + Tmp [i]; 'C': begynne hvis
FrontV (TMP [i + 1]) og Selge (TMP [i-1] < > 'S') da begynne
Resultat: = Resultat + 'S'; inc (i); end else if product: (Copy (TMP, i, 2) = 'CH') eller plakater (Copy (TMP, i, 3) = 'CIA') da begynne
Resultat: = Resultat + 'X'; hvis product: (Copy (TMP, i, 2) = 'CH') deretter
inc (i); hvis product: (Copy (TMP, i, 3) = 'CIA') deretter
inc (i, 2); end annet
Resultat: = Resultat + 'K'; slutten
; 'D': hvis product: (Copy (TMP, i, 2) = 'DG') og Selge FrontV (TMP [i + 3]) da begynne
inc (i, 3); Resultat: = Resultat + 'J'; end annet
Resultat: = Resultat + 'T'; 'G': hvis product: ((TMP [i + 1] < > 'G') eller
Vokal (TMP [i + 1])) og
((TMP [i + 1] < > 'N') eller product: ((TMP [i + 1] = # 0) og Selge (TMP [i + 2] < > 'E') eller
(TMP [i + 3] < > 'D')) og plakater ((TMP [i + 1] < > 'D') eller ikke anbefale FrontV (TMP [i + 1]))) da begynne hvis plakater (FrontV (TMP [i + 1])) og Selge (TMP [i + 2] < > 'G') da
Resultat: = Resultat + 'J' annet
Resultat: = Resultat + 'K'; end else if product: (Tmp [i + 1] = 'H') og ikke
noghf (TMP [i -3]) og Selge (TMP [i - 4] < > 'H') da
Resultat: = Resultat + 'F'; 'H' hvis ikke anbefale Varson (TMP [i-1]) og plakater ( ikke
Vokal (TMP [i-1]) eller
vokal (TMP [i + 1])) da
Resultat: = Resultat + 'H'; 'K': hvis
(TMP [i-1] < > 'C') da
Resultat: = Resultat + 'K'; 'P': hvis
(TMP [i + 1] = 'H') da
Resultat: = Resultat + 'F' annet
Resultat: = Resultat + tmp [i]; 'Q': Resultat: = Resultat + 'K'; 'S': hvis
(TMP [i + 1] = 'H') eller product: ((Kopier (TMP, i, 2) = 'SI') og
(TMP [i + 3] i product: [ 'O', 'A'])) da
Resultat: = Resultat + 'X' annet
Resultat : = Resultat + 'S'; 'T': hvis
(TMP [i + 1] = 'I') og Selge (TMP [i + 2] i product: [ 'O', ' A ']) da
Resultat: = Resultat +' X ' else if product: (Tmp [i + 1] =' H ') da
Resultat: = Resultat + '0' else if product: (Tmp [i + 1] < > 'C') eller
(TMP [i + 2] < > 'H') < b> da
Resultat: = Resultat + 'T'; 'V': Resultat: = Resultat + 'F'; 'W', 'Y': hvis
Vokal (TMP [i + 1]) da
Resultat: = Resultat + Tmp [i]; 'X': Resultat: = Resultat + 'KS'; 'Z': Resultat: = Resultat + 'S'; slutten
; slutten
; slutten
;