2016-12-20 1 views
2

I ont une trame de données avec le texteSupprimer les lignes contenant des phrases identiques ou mot-permuté d'une trame de données en R

TERM 
good morning 
hello 
morning good 
you're welcome 
hello 
hi 

Je voudrais filtrer tous les doublons et tous avec les mêmes mots, mais dans un ordre différent . Alors que je reçois:

TERM 
good morning 
hello 
you're welcome 
hi 

Je sais comment obtenir la distance de deux mots avec stringdist.

stringdist(stringOriginal,stringCompare,method=qgram) 

Mais comme j'ai des trames de données très longues, je ne veux pas parcourir toutes les entrées.

Comment puis-je filtrer les termes similaires?

Thx Joerg

+0

Vous pouvez concevoir une méthode de force brute avec 'strsplit' et les fonctions définies' union 'et' intersect' ou 'setdiff'. – lmo

+0

Il serait utile de modifier la question pour inclure un petit exemple du type de trame de données que vous démarrez, avec la sortie désirée. –

+1

En utilisant 'stringdist' vous pouvez faire:' library (stringdist); sdm <- stringdistmatrix (DF $ TERM, DF $ TERM, méthode = "qgram", useNames = "chaînes"); sdm [! duplicated (sdm),] ' –

Répondre

2

Break it up en mots, trier les mots dans chaque enregistrement et de garder les lignes pour lesquelles les mots ne sont pas triés doublons. Aucun paquet n'est utilisé.

subset(DF, !duplicated(lapply(strsplit(TERM, " "), sort))) 

donnant:

  TERM 
1 good morning 
2   hello 
4 you're welcome 
6    hi 

Note: L'entrée sous forme reproductible est:

Lines <- "TERM 
good morning 
hello 
morning good 
you're welcome 
hello 
hi" 
DF <- read.csv(text = Lines, as.is = TRUE, strip.white = TRUE)