繁体   English   中英

在 R 中将关键术语(语料库)搜索到另一个

[英]Searching key terms (Corpus) into another in R

我之前问过这个问题,得到了负面反馈,因为我没有提供代码。 我花了一整天的时间尝试和尝试,现在我陷入了一个问题。

此代码已由 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)

但是,如果 keyterm 只有 1 个单词:

key.terms <- c("research")
    corpus2.Freq[corpus2.Freq$corpus2.wrds %in%key.terms, ]

代码工作正常,我得到以下结果:

corpus2.wrds Freq
research    2

非常感谢! 希望有人可以提供帮助。

你找不到任何二元组,因为你还没有创建它们。 您使用函数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"),])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM