Est-ce que quelqu'un connaît-il d'un package R qui résout Le plus long problème de substration commun ? Je cherche quelque chose de rapide qui pourrait travailler sur des vecteurs. P>
4 Réponses :
Consultez le "rlibstree" package sur omégahat github p>
Ceci utilise http://www.icir.org/christian/libstree/ . p>
Pouvez-vous poster des exemples de code du résultat de la comparaison de 'Hello World' code> et 'Hella Old' code>? Produit-t-il 'enfer' code> ou 'enfer vieux' code>?
Le premier lien est cassé
Je ne sais pas r, mais j'avais l'habitude de mettre en œuvre l'algorithme de Hirschberg qui est rapide et ne consommant pas trop d'espace. P>
Comme je me souviens que c'est seulement 2 ou 3 appelé de courtes fonctions courtes. P>
Voici un lien: http://wordaligned.org/articles/longest-commmon-subence P >
N'hésitez pas à la mettre en œuvre dans R, cela vaut l'effort puisqu'il s'agit d'un algorithme très intéressant. p>
Mais Vereb, c'est-à-dire l'algorithme de recherche courante le plus long? La recherche suivante est différente de la sous-chaîne, non? Comme demandé ici: Stackoverflow.com/q/28261825/1175496
Vous devez regarder la fonction LCS code> de Qualv code>. Il est mis en œuvre C, donc assez efficace. P>
Remarque: cette fonction trouvera la recherche courante la plus longue (dans le sens mathématique de la séquence), pas la sous-chaîne. Ainsi, par exemple Il ignorera les personnages au milieu des cordes pour trouver des matchs entre eux. Pour plus de détails, voir ici:
La question ici n'est pas totalement claire sur l'application envisagée de la solution au plus long problème de sous-chaîne commun. Une application commune que je rencontre correspond à des noms de différents ensembles de données. Le package en bref strong>, parallélisation strong>: une autre caractéristique intéressante de Exemple d'application forte>: p> stringdist CODE> a une fonction utile amorque () code> que je trouve approprié pour cette tâche. amorque ( ) code> prendra en entrée deux vecteurs, le premier est x code> le vecteur des chaînes que vous souhaitez trouver des correspondances (ceci peut aussi simplement être une seule chaîne), le second est Table Code>, qui est le vecteur des chaînes que vous souhaitez faire des comparaisons et choisir le match avec la plus longue sous-chaîne commune. amorch () code> retournera ensuite un vecteur dont la longueur est égale à celle de x code> - chaque élément de ce résultat sera un index dans la table code> qui contient le meilleure correspondance. p> Amatch () code> prend une méthode code> argument code>, que vous spécifiez être LCS code> si vous souhaitez correspondre sur la plus longue sous-chaîne commune. Il existe de nombreuses autres options pour différentes techniques de correspondance de chaînes (par exemple la distance par E. Levenshtein). Il existe également un argument obligatoire maxdiste code>. Si toutes les chaînes de Table code> sont plus grandes "distance" d'une chaîne donnée dans x code>, alors amorch () code> retournera na code> pour cet élément de sa sortie. "Distance" est défini différemment en fonction de l'algorithme de correspondance de chaîne que vous choisissez. Pour LCS, il (plus ou moins) signifie simplement combien il y a de caractères différents (non correspondants). Voir la documentation pour plus de détails. P> Amatch () code> est-ce qu'il mettra automatiquement la mise en place de l'opération pour vous, faisant des suppositions raisonnables sur ressources système à utiliser. Si vous souhaitez plus de contrôle sur ceci, vous pouvez basculer l'argument NTthread code>. P> Names1 = c(
"hello"
)
Names2 = c(
"hel123l5678o",
"hell"
)
Match_Idx = amatch(tolower(Names1), tolower(Names2), method = 'lcs', maxDist = Inf)
Matches = data.frame(Names1, Match = Names2[Match_Idx])
Matches
# 1 hello hell