之前我问过这个问题并得到负面反馈,因为我没有提供代码。我整天都在努力尝试,现在我陷入困境。
此代码已由Stackoverflow“Tyler Rincker”中的用户提取< - 非常感谢他!
这是代码:
strip <- function(x, digit.remove = TRUE, apostrophe.remove = FALSE){
strp <- function(x, digit.remove, apostrophe.remove){
x2 <- Trim(tolower(gsub(".*?($|'|[^[:punct:]]).*?", "\\1", as.character(x))))
x2 <- if(apostrophe.remove) gsub("'", "", x2) else x2
ifelse(digit.remove==TRUE, gsub("[[:digit:]]", "", x2), x2)
}
unlist(lapply(x, function(x) Trim(strp(x =x, digit.remove = digit.remove,
apostrophe.remove = apostrophe.remove)) ))
corpus2 <- "In Westerman's disruptive article, Quantitative research as
an interpretive enterprise: The mostly
unacknowledged role of interpretation in research efforts."
corpus2 <- gsub("\\s+", " ", gsub("\n|\t", " ", corpus2))
corpus2.wrds <- as.vector(unlist(strsplit(strip(corpus2), " ")))
corpus2.Freq <- data.frame(table(corpus2.wrds))
corpus2.Freq$corpus2.wrds <- as.character(corpus2.Freq$corpus2.wrds)
corpus2.Freq <- corpus2.Freq[order(-corpus2.Freq$Freq), ]
rownames(corpus2.Freq) <- 1:nrow(corpus2.Freq)
key.terms <- c("research as")
我的问题是我想在语料库中搜索bigrams或trigram(2或3个单词)。
当我执行这行代码时:
corpus2.Freq[corpus2.Freq$corpus2.wrds %in%key.terms, ]
我得到的结果应显示频率为“1”。
[1] corpus2.wrds Freq
<0 rows> (or 0-length row.names)
但是,如果关键词只有一个字:
key.terms <- c("research")
corpus2.Freq[corpus2.Freq$corpus2.wrds %in%key.terms, ]
代码工作正常,我得到以下结果:
corpus2.wrds Freq
research 2
非常感谢!并希望有人可以提供帮助。
答案 0 :(得分:1)
你找不到任何双胞胎,因为你还没有创造它们。您使用仅创建unigrams的函数strsplit(strip(corpus2), " ")
。
我还建议您使用tm
包中提供的预处理功能,而不是您自己的strip()
功能。
你可以为unigrams尝试这样的事情:
library(tm)
# create corpora
corp = VCorpus(VectorSource(corpus2))
# this should replace your strip() function
ctrl = list(tokenize = function(x) unlist(strsplit(as.character(x), "[[:space:]]+")),
removePunctuation = TRUE,
removeNubers = TRUE,
tolower = TRUE)
tdm = TermDocumentMatrix(corp, control = ctrl)
inspect(tdm)
inspect(tdm[c("research"),])
或者类似的unigrams和bigrams代码:
ctrl2 = list(tokenize = function(x) unlist(lapply(ngrams(words(x), 1:2), paste, collapse = " "), use.names = FALSE),
removePunctuation = TRUE,
removeNubers = TRUE,
tolower = TRUE)
tdm_bigrams = TermDocumentMatrix(corp, control = ctrl2)
inspect(tdm_bigrams)
inspect(tdm_bigrams[c("research"),])
inspect(tdm_bigrams[c("research as"),])