2017-09-07 2 views
1

J'ai l'algorithme suivant préparé pour faire correspondre deux chaînes.exploration de texte avec r bibliothèque stringdist

library(stringdist) 

qgrams('perimetrico','perimetrico peri',q=2) 

    pe ri tr er im me o et ic co p 
V1 1 2 1 1 1 1 0 1 1 1 0 
V2 2 3 1 2 1 1 1 1 1 1 1 

En ce qui me concerne, c'est l'implémentation formelle pour compter le nombre d'occurrences.

stringdist('perimetrico','perimetrico peri', method='qgram', q=2) 

5 

Mais je ne suis pas à l'aise avec cette solution. C'est pourquoi je veux compter sur le premier résultat comme la manière suivante:

pe=1 
ri=1 
tr=1 
er=1 
im=1 
me=1 
o=0 
et=1 
ic=1 
co=1 
p=0 

Ainsi, le résultat final serait 9/11 = 82% match de

Répondre

2

Utilisation Appliquer (pour chaque ligne) à compter combien d'occurrences sont 0 et soustrayez ce nombre de 1.

library(stringdist) 
foo <- qgrams('perimetrico','perimetrico peri',q=2) 
apply(foo, 1, function(x) 1 - mean(x == 0)) 

     V1  V2 
0.8181818 1.0000000 

Ou vous pouvez arrondir (pour 0.82) et multiplier par 100 (pour 82 pour cent)

apply(a, 1, function(x) round(1 - mean(x == 0), 2) * 100) 

V1 V2 
82 100 
+1

Pourriez-vous utiliser 'moyenne (x> 0)' dans votre fonction? – CPak

+0

Excellente contribution !!! clap clap clap – lolo

+0

@CPak oui, cela fonctionnerait, mais je ne sais pas grand-chose sur les données OP. Que faire si '-1 'quelque part. – PoGibas