2016-12-20 5 views
2

Ich habe einen Datenrahmen mit Textentfernen Reihen identisch oder Wort permutierte Sätze aus einem Datenrahmen in R enthalten

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

Ich möchte alle Duplikate heraus filtern und alle mit den gleichen Worten, sondern in einer anderen Reihenfolge . So dass ich bekomme:

TERM 
good morning 
hello 
you're welcome 
hi 

Ich weiß, wie man den Abstand von zwei Wörtern mit stringdist bekommen.

stringdist(stringOriginal,stringCompare,method=qgram) 

Aber da ich sehr langen Datenrahmen ich nicht durch alle Einträge in einer Schleife mag.

Wie kann ich ähnliche Begriffe herausfiltern?

Thx Joerg

+0

Sie könnten eine Brute-Force-Methode mit 'strsplit' und den eingestellten Funktionen' Vereinigung ersinnen 'und' schneiden' oder 'setdiff'. – lmo

+0

Es wäre nützlich, die Frage so zu modifizieren, dass sie ein kleines Beispiel für die Art des Datenrahmens enthält, mit dem Sie beginnen, zusammen mit der gewünschten Ausgabe. –

+1

Mit 'stringdist' könnten Sie folgendes tun:' library (stringdist); sdm <- stringdistmatrix (DF $ TERM, DF $ TERM, Methode = "qgram", useNames = "Strings"); sdm [! dupliziert (sdm),] ' –

Antwort

2

Pause in Worte auf, sortieren Sie die Wörter in jedem Datensatz und halten Zeilen, für die die sortierten Wörter sind keine Duplikate. Keine Pakete werden verwendet.

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

geben:

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

Hinweis: Die Eingabe in reproduzierbarer Form ist:

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