保留R语料库

时间:2016-12-02 14:46:36

标签: r regex text-mining corpus

从发布的回答:通过@MrFlick

保留文件ID与R语料库

我试图略微修改一个很好的例子。

问题:如何修改 content_transformer功能以仅保留完全字词?您可以在检查输出中看到精彩被计为奇迹,比率被计为理由。我对gregexprregmatches没有很强的理解力。

创建数据框:

dd <- data.frame(
  id = 10:13,
  text = c("No wonderful, then, that ever",
           "So that in many cases such a ",
           "But there were still other and",
           "Not even at the rationale")
  , stringsAsFactors = F
)

现在,为了从data.frame中读取特殊属性,我们将使用readTabular函数制作我们自己的自定义data.frame reader

library(tm)
myReader <- readTabular(mapping = list(content = "text", id = "id"))

指定要用于内容的列和data.frame中的id。现在我们使用DataframeSource阅读它,但使用我们的自定义阅读器。

tm <- VCorpus(DataframeSource(dd), readerControl = list(reader = myReader))

现在,如果我们只想保留一组单词,我们就可以创建自己的content_transformer函数。一种方法是

  keepOnlyWords <- content_transformer(function(x, words) {
        regmatches(x, 
            gregexpr(paste0("\\b(",  paste(words, collapse = "|"), "\\b)"), x)
        , invert = T) <- " "
        x
    })

这将用空格替换单词列表中没有的所有内容。请注意,您可能希望在此之后运行stripWhitespace。因此,我们的转换看起来像

keep <- c("wonder", "then", "that", "the")

tm <- tm_map(tm, content_transformer(tolower))
tm <- tm_map(tm, keepOnlyWords, keep)
tm <- tm_map(tm, stripWhitespace)

检查dtm矩阵:

> inspect(dtm)
<<DocumentTermMatrix (documents: 4, terms: 4)>>
Non-/sparse entries: 7/9
Sparsity           : 56%
Maximal term length: 6
Weighting          : term frequency (tf)

    Terms
Docs ratio that the wonder
  10     0    1   1      1
  11     0    1   0      0
  12     0    0   1      0
  13     1    0   1      0

1 个答案:

答案 0 :(得分:1)

我和@alistaire的结果与tm相同,而keepOnlyWords内容变换器中的以下修改后的行首先由@BEMR定义:

gregexpr(paste0("\\b(",  paste(words, collapse = "|"), ")\\b"), x)

有一个错位的&#34;)&#34;在@BEMR首先指定的gregexpr中,即应该是&#34;)\\ b&#34;不是&#34; \\ b)&#34;

我认为上面的gregexpr等同于@alistaire指定的:

gregexpr(paste0("(\\b",  paste(words, collapse = "\\b|\\b"), "\\b)"), x)