如何通过是否包含来自另一个列表的字符串来过滤一个列表
How to filter one list by whether or not it contains a string from another
我有一个短语列表,以及在这些短语中找到的最常用术语的列表。我想过滤原始列表,只保留包含我的第二个列表中的一个术语的字符串。
这是我目前的情况:
#Set data source, format for use, check consistency
MyData <- c('Create company email', 'email for business', 'free trial', 'corporate pricing', 'email cost')
#Create corpus from csv
corpus <- Corpus(VectorSource(MyData$Keyword))
#Clean corpus
cleanset1 <- tm_map(corpus, tolower)
cleanset2 <- tm_map(cleanset1, removeNumbers)
cleanset3 <- tm_map(cleanset2, removeWords, stopwords('english'))
cleanset4 <- tm_map(cleanset3, removePunctuation)
#Convert to Term Document Matrix
tdm <- TermDocumentMatrix(cleanset4)
#Find Freq
freqterms<-as.list(findFreqTerms(tdm,20))
此时我有一个最常用术语列表(使用 tm 包)和我的原始列表。从原始列表中删除不包含 freqterms 列表中任一术语的任何值的最佳方法是什么?
会不会像
filtered <-MyData[!(MyData %in% freqterms)]
工作?
如果我对您的数据结构的理解正确,那么 freqterms 是一个列表,其中每个元素只是一个术语。如果是这样,将频率项转换为向量可能会更容易。
freqterms <- unlist(freqterms)
您可能需要使用 grep 来查找数据中的常用词,因为 %in%
只有在两个元素相同时才有效。
您首先需要将频率术语格式化为正确的正则表达式。
freqterms.regex <- paste0("(", paste0(freqterms, collapse="|"), ")")
这会将您的常用字词设置为 "(term1|term2|term3|...)"
的格式。然后,您可以将其与 grepl 一起用作模式,以仅保留 MyData 中具有匹配项的条目。
matches <- MyData[grepl(MyData, pattern=freqterms.regex)]
根据您的 MyData 和 freqterms 的外观,您可能需要使正则表达式更加严格。
我有一个短语列表,以及在这些短语中找到的最常用术语的列表。我想过滤原始列表,只保留包含我的第二个列表中的一个术语的字符串。
这是我目前的情况:
#Set data source, format for use, check consistency
MyData <- c('Create company email', 'email for business', 'free trial', 'corporate pricing', 'email cost')
#Create corpus from csv
corpus <- Corpus(VectorSource(MyData$Keyword))
#Clean corpus
cleanset1 <- tm_map(corpus, tolower)
cleanset2 <- tm_map(cleanset1, removeNumbers)
cleanset3 <- tm_map(cleanset2, removeWords, stopwords('english'))
cleanset4 <- tm_map(cleanset3, removePunctuation)
#Convert to Term Document Matrix
tdm <- TermDocumentMatrix(cleanset4)
#Find Freq
freqterms<-as.list(findFreqTerms(tdm,20))
此时我有一个最常用术语列表(使用 tm 包)和我的原始列表。从原始列表中删除不包含 freqterms 列表中任一术语的任何值的最佳方法是什么?
会不会像
filtered <-MyData[!(MyData %in% freqterms)]
工作?
如果我对您的数据结构的理解正确,那么 freqterms 是一个列表,其中每个元素只是一个术语。如果是这样,将频率项转换为向量可能会更容易。
freqterms <- unlist(freqterms)
您可能需要使用 grep 来查找数据中的常用词,因为 %in%
只有在两个元素相同时才有效。
您首先需要将频率术语格式化为正确的正则表达式。
freqterms.regex <- paste0("(", paste0(freqterms, collapse="|"), ")")
这会将您的常用字词设置为 "(term1|term2|term3|...)"
的格式。然后,您可以将其与 grepl 一起用作模式,以仅保留 MyData 中具有匹配项的条目。
matches <- MyData[grepl(MyData, pattern=freqterms.regex)]
根据您的 MyData 和 freqterms 的外观,您可能需要使正则表达式更加严格。