OVH Cloud OVH Cloud

Text::Soundex

2 réponses
Avatar
Laurent Bendavid
Je cherche à faire ceci:

Avoir les mots d'un language :
@language=('include','include.backup','include.nas.backup','exclude','exclude.fs',....);

Je cherche à corriger automatiquement un fichier de configuration
utilisateur.

J'ai construit deux haschages:

%language, %soundex ou chaque clé contient, exemple:

$language{'include'}=soundex('include');

et

$soundex{soundex('include')}='include';

Avec un test du type
unless (exists $language{$keyword}) {
my $correct=$soundex{$keyword};
if ($correct) {
# Corrigé !!
} else {
#KO
}
}
Je teste la valeur dans le fichier de conf et j'aurais voulu corriger
automatiquement des erreurs du type 'iclude' ou 'icnlude' bref des
erreurs mineures.

Mais ma tactique ne marche pas.

Une autre idée ou je me sers mal de Text::Soundex.

Merci d'avance.

2 réponses

Avatar
Scetbon Cyril
Laurent Bendavid wrote:
Je cherche à faire ceci:

Avoir les mots d'un language :
@language=('include','include.backup','include.nas.backup','exclude','exclude.fs',....);


Je cherche à corriger automatiquement un fichier de configuration
utilisateur.

J'ai construit deux haschages:

%language, %soundex ou chaque clé contient, exemple:

$language{'include'}=soundex('include');

et

$soundex{soundex('include')}='include';

Avec un test du type
unless (exists $language{$keyword}) {
my $correct=$soundex{$keyword};
Je ne comprends pas trop ton test.

Si j'ai bien compris, $soundex est un hash ayant pour clés les soundex
(ex:I254) et pour valeur les chaînes connues (ex:include).
si t'essaies d'utiliser comme clé la chaine ça risque pas de
fonctionner. De plus, si elle n'existe pas dans $language elle risque
pas d'exister dans $soundex
if ($correct) {
# Corrigé !!
} else {
#KO
}
}
Je teste la valeur dans le fichier de conf et j'aurais voulu corriger
automatiquement des erreurs du type 'iclude' ou 'icnlude' bref des
erreurs mineures.
ce qu'il faudrait c'est écrire une sorte de quotation des différences et

en fonction de cela en déduire une chaine.

ex:

include -> I524
iclude -> I243
icnlude -> I254

mais bon ça a l'air un peu compliqué :-(

Une autre limite est celle énoncée dans le man:

As it is mapping a large space (arbitrary length strings) onto a small
space (single letter plus 3 digits) -->> no inference can be made
about the similarity of two strings which end up with the same soundex
code.<<-- For example, both "Hilbert" and "Heilbronn" end up with a
soundex code of "H416".

A méditer.


Mais ma tactique ne marche pas.

Une autre idée ou je me sers mal de Text::Soundex.

Merci d'avance.



Avatar
Laurent Bendavid
J'ai trouvé mieux le module String::Approx avec la fonction 'amatch' qui
répond à mon problème.


Scetbon Cyril wrote:


Laurent Bendavid wrote:

Je cherche à faire ceci:

Avoir les mots d'un language :
@language=('include','include.backup','include.nas.backup','exclude','exclude.fs',....);


Je cherche à corriger automatiquement un fichier de configuration
utilisateur.

J'ai construit deux haschages:

%language, %soundex ou chaque clé contient, exemple:

$language{'include'}=soundex('include');

et

$soundex{soundex('include')}='include';

Avec un test du type
unless (exists $language{$keyword}) {
my $correct=$soundex{$keyword};


Je ne comprends pas trop ton test.
Si j'ai bien compris, $soundex est un hash ayant pour clés les soundex
(ex:I254) et pour valeur les chaînes connues (ex:include).
si t'essaies d'utiliser comme clé la chaine ça risque pas de
fonctionner. De plus, si elle n'existe pas dans $language elle risque
pas d'exister dans $soundex

if ($correct) {
# Corrigé !!
} else {
#KO
}
}
Je teste la valeur dans le fichier de conf et j'aurais voulu corriger
automatiquement des erreurs du type 'iclude' ou 'icnlude' bref des
erreurs mineures.


ce qu'il faudrait c'est écrire une sorte de quotation des différences et
en fonction de cela en déduire une chaine.

ex:

include -> I524
iclude -> I243
icnlude -> I254

mais bon ça a l'air un peu compliqué :-(

Une autre limite est celle énoncée dans le man:

As it is mapping a large space (arbitrary length strings) onto a small
space (single letter plus 3 digits) -->> no inference can be made
about the similarity of two strings which end up with the same soundex
code.<<-- For example, both "Hilbert" and "Heilbronn" end up with a
soundex code of "H416".

A méditer.


Mais ma tactique ne marche pas.

Une autre idée ou je me sers mal de Text::Soundex.

Merci d'avance.