2016-12-20 1 views
2

У меня есть фрейм данных с текстомУдалите строки, содержащие одинаковые или слова-переставляются предложения из кадра данных в R

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

Я хотел бы, чтобы отфильтровать все дубликаты и все с теми же словами, но в другом порядке , Так что я получаю:

TERM 
good morning 
hello 
you're welcome 
hi 

Я знаю, как получить расстояние до двух слов с помощью stringdist.

stringdist(stringOriginal,stringCompare,method=qgram) 

Но поскольку у меня очень длинные кадры данных, я не хочу перебирать все записи.

Как отфильтровать похожие термины?

Thx Йорг

+0

Вы мог бы разработать грубые методы силы 'strsplit' и набор функции' союза 'и' intersect' или 'setdiff'. – lmo

+0

Было бы полезно изменить вопрос, включив в него небольшой пример того типа кадра данных, с которого вы начинаете, вместе с желаемым выходом. –

+1

Используя 'stringdist', вы можете сделать:' library (stringdist); sdm <- stringdistmatrix (DF $ TERM, DF $ TERM, method = "qgram", useNames = "strings"); SDM [! дублируется (SDM),] ' –

ответ

2

разбить его на слова, отсортировать слова в каждой записи и сохранить строки, для которых отсортированные слова не являются дубликатами. Пакеты не используются.

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

дает:

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

Примечание: Вход в воспроизводимой форме является:

Lines <- "TERM 
good morning 
hello 
morning good 
you're welcome 
hello 
hi" 
DF <- read.csv(text = Lines, as.is = TRUE, strip.white = TRUE) 
Смежные вопросы