la distance de levenshtein pour calculer le nombre d'apparition dans u - Perl - Programmation
Marsh Posté le 09-03-2014 à 23:52:36
Si c'est un test strict (cad tu cherches EXACTEMENT) tu n'as nullement besoin de levenshtein.
N'ayant pas l'algo il va être dur de répondre, cela dit voici une piste possible:
Sachant la langue dans laquelle sont chaque fichier, il est possible de savoir statistiquement le nombre d'apparition moyen de la lettre 'e', 'a', 'v' et ainsi de suite, si ton algo n'a pas d'erreur mais donne des résultats erronés, ce peut être une piste pour affiner tes résultats!
Marsh Posté le 10-03-2014 à 14:25:21
Je vois pas ce que la distance de levenshtein vient faire ici (mais il y a des modules perl pour cela, dont Text::Levenshtein).
> je voudrais utiliser la distance de levenshtein pour vérifier l’existence de chaque élément de B dans chaque ligne de A
Tu lis B et crées un hash dont les clés sont les mots lus, et les valeurs 0.
Puis tu lis A et pour chaque mot de A, si le hash, avec pour clé le mot (de A) est défini, tu incrémentes sa valeur.
En sortie de tout ça, tu boucles sur le hash, et les éléments de ce hash pour lesquels les valeurs sont a 0 auront pour clé les mots de B qui n'ont pas d'occurrence dans A.
A+,
Marsh Posté le 11-03-2014 à 10:56:23
merci pour vos réponses
comme je suis débutante en perl j'ai voulu utiliser un module tout prés qui est Text::Levenshtein.
je vais essayer d'appliquer ce que Gilou me conseille.
Marsh Posté le 11-03-2014 à 22:23:03
La solution que je t'indique est standard.
Un exemple pédagogique de son principe:
Code : |
et une version dans les deux sens
Code :
|
A+,
Marsh Posté le 21-03-2014 à 03:16:03
votre code marche très bien pour une seule ligne, mais la encore j'arrive pas à l'appliquer pour tous le fichier
voici comment est mon fichier A: voiture
argent
grande
avoir
et le fichier B: comment faire pour avoir un grande maison
ma voiture et la voiture de mon voisin sont de même marque
pourquoi vous sortez par ce froid
la sortie désirée est de la forme suivante: 0 2 0
0 0 0
1 0 0
1 0 0
merci de bien vouloir m'aider
Marsh Posté le 21-03-2014 à 12:52:44
Ben oui, je vous ai donné le principe avec deux listes de mots, a vous de transformer cela lorsque l'on a une liste de mots et une liste de lignes, soit une liste de listes de mots.
Il suffit de faire cela avec des structures de données un peu plus adaptées.
Je n'allais pas non plus faire intégralement votre exercice.
Un indice:
Lire A -> liste de mots
Lire une ligne de B -> liste de mots
-- appliquer la méthode indiquée
-- stocker le résultat comme ligne d'un matrice 2D
recommencer avec la ligne suivante de B
et au final, prendre la transposée der la matrice 2D au moyen du module Array::Transpose
En perl, une matrice 2D, c'est une une référence à liste de listes.
Par exemple le tableau de valeurs
0 2 0
1 0 0
se représente en perl comme
matrice = [ [0, 2, 0],
[1, 0, 0]
];
A+,
Marsh Posté le 09-03-2014 à 20:42:44
Bonjour
J'ai un fichier sur plusieurs lignes et colonnes (fichier A) et un autre sur une seule colonne(fichier B).
je voudrais utiliser la distance de levenshtein pour vérifier l’existence de chaque élément de B dans chaque ligne de A et compter le nombre de zéros (pour chaque ligne)
.
Mon code pour le moment me donne des résultats erronés. Si quelqu'un a une idée sur comment m'y prendre.
Merci d'avance