2009-03-13 3 views
1

Disons que j'ai plusieurs URL et je renvoie le nom de base de chaque URL, comme ça;Parse le texte et les similitudes de retour

http://www.test.com/the.code.r00 

retournerait

the.code.r00 

et j'ai plusieurs noms de base que j'extrait de plusieurs URL pour travailler sur

the.code.r00 
the.code.r01 
.. 
... 
the.code.r12 

et avec ceux que j'ai les noms de base suivants aussi d'autres URL

the.matrix.r00 
the.matrix.r01 
.. 
... 
the.matrix.r14 

Je voudrais savoir s'il y a un algorithme connu qui a été testé et éprouvé pour retourner

the.code.r 
the.matrix.r 

après avoir analysé les noms de base I énumérés ci-dessus.

Aussi, si à la place, il existe un outil * nix qui fait la même chose que ce qui serait super.

Note, le format n'est pas toujours comme ci-dessus, sinon j'aurais pu faire un simple substr. Les nombres ne sont pas toujours répertoriés à un emplacement spécifique dans la chaîne. Quelques autres exemples

the.code.part01.rar 
the.code.001 
.. 
.... 

je pourrais mettre en œuvre mon propre algorithme pour le faire, mais ce serait probablement une boîte de bugs sans quelques tests lourds donc je préfère utiliser un algorithme connu s'il y a un déjà défini ..

Répondre

3

Vous recherchez probablement une implémentation ancrée du longest common substring problem. Triez votre liste de chaînes et effectuez le LCS ancré sur les éléments adjacents. Insérez le LCS dans un hashmap à valeurs multiples avec le LCS comme clé et les deux chaînes comme valeurs. Une fois que vous avez cela, faites de même avec les chaînes LCS, jusqu'à ce que vous atteigniez un certain seuil.

+0

Bonne réponse, merci pour le lien! – Cerebrus

+0

hmm Je pense que cela pourrait aider. merci –

1

Examinez chaque paire de chaînes de votre liste et calculez la Levenshtein Distance (distance de modification de chaîne) entre elles. Cela vous donnera le nombre minimum de changements nécessaires pour changer la chaîne dans l'autre.

Maintenant obtenir à partir de la mise en œuvre de Levenshtein l'ensemble réel des changements entre les chaînes (en suivant backpointers dans le programme dynamique). Si cet ensemble de changements consiste seulement à substituer des nombres à d'autres nombres, alors vous avez trouvé un motif. Copiez l'une des chaînes, supprimez ces numéros, stockez-la dans votre jeu de modèles et continuez avec les autres paires de chaînes.

+0

c'est aussi utile. Merci –

Questions connexes