在R中形成没有停用词的双字母组

时间:2015-12-15 06:22:54

标签: r text-mining tm n-gram quanteda

我最近在使用R进行文本挖掘时遇到了一些问题。 目的是在新闻中找到有意义的关键词,例如" smart car"和"数据挖掘"。

如果我有一个字符串,请说如下:

"IBM have a great success in the computer industry for the past decades..."

删除停用词后(""," a",""""""" ),

"IBM great success computer industry past decades..."

结果,像#34;成功的计算机"或者"行业过去"会发生。

但我真正需要的是两个单词之间不存在关键词,例如"计算机行业"是我想要的一个明确的二元组的例子。

我的代码部分如下:

corpus <- tm_map(corpus, removeWords, stopwords("english"))
corpus <- tm_map(corpus, stripWhitespace) 
corpus <- tm_map(corpus, stemDocument)
NgramTokenizer = function(x) {unlist(lapply(ngrams(words(x), 2), paste, collapse = " "), use.names = FALSE)}
dtm <- TermDocumentMatrix(corpus, control = list(tokenize = NgramTokenizer))

是否有任何方法可以避免使用像#34;成功的计算机&#34;当TF计数?

1 个答案:

答案 0 :(得分:3)

注意:编辑2017-10-12以反映新的quanteda语法。

您可以在 quanteda 中执行此操作,这可以在ngrams形成后删除停用词。

txt <- "IBM have a great success in the computer industry for the past decades..."

library("quanteda")
myDfm <- tokens(txt) %>%
    tokens_remove("\\p{P}", valuetype = "regex", padding = TRUE) %>%
    tokens_remove(stopwords("english"), padding  = TRUE) %>%
    tokens_ngrams(n = 2) %>%
    dfm()

featnames(myDfm)
# [1] "great_success"     "computer_industry" "past_decades" 

它的作用:

  1. 表单令牌。
  2. 使用正则表达式删除标点符号,但留下删除这些标点符号的空格。这样可以确保您不会使用从不与之相邻的标记形成ngrams,因为它们是由标点符号分隔的。
  3. 删除停用词,同时将垫子留在原位。
  4. 形成双字母。
  5. 构造文档特征矩阵。
  6. 要计算这些双字母,您可以直接检查dfm,也可以使用topfeatures()

    myDfm
    # Document-feature matrix of: 1 document, 3 features.
    # 1 x 3 sparse Matrix of class "dfmSparse"
    #        features
    # docs    great_success computer_industry past_decades
    #   text1             1                 1            1
    
    topfeatures(myDfm)
    #    great_success computer_industry      past_decades 
    #                1                 1                 1