如何在换行符“\ n”后将语料库内容转换为向量

时间:2017-06-25 15:24:16

标签: r tm strsplit

当我尝试在纯文本上使用strsplit时,它具有所需的属性,即存储的值从一串字符转换为带有字符串的向量。例如,

txt = "The fox is Brown.\nThe Fox has a tail."
strsplit(txt, "\n")

对于实际问题,我在Windows 7的R 3.4.0中使用NLP软件包 tm (v0.7-1)。

当我创建我的语料库并尝试使用 tm 中的 content_transformer 功能时,它会破坏我的语料库而不是返回内容的向量。

require(tm) #version 0.7-1
txt = "The fox is Brown.\nThe Fox has a tail."
docs = Corpus(VectorSource(txt))
to_newline = content_transformer(function (x) unlist(strsplit(x, "\n")))
docs = tm_map(docs, to_newline)
str(docs)

上面代码中str(docs)的输出如下所示:

List of 2 
 $ 1:List of 2 
  ..$ content: chr "The fox is Brown." 
  ..$ meta   :List of 7
  .. ..$ author       : chr(0) 
  .. ..$ datetimestamp: POSIXlt[1:1], format: "2017-06-25 15:11:55"
  .. ..$ description  : chr(0) 
  .. ..$ heading      : chr(0) 
  .. ..$ id           : chr "1"
  .. ..$ language     : chr "en"
  .. ..$ origin       : chr(0) 
  .. ..- attr(*, "class")= chr "TextDocumentMeta"
  ..- attr(*, "class")= chr [1:2] "PlainTextDocument" "TextDocument"
 $ 2:List of 2
  ..$ content: chr "The Fox has a tail."
  ..$ meta   :List of 7
  .. ..$ author       : chr(0) 
  .. ..$ datetimestamp: POSIXlt[1:1], format: "2017-06-25 15:11:55"
  .. ..$ description  : chr(0) 
  .. ..$ heading      : chr(0) 
  .. ..$ id           : chr "2"
  .. ..$ language     : chr "en"
  .. ..$ origin       : chr(0) 
  .. ..- attr(*, "class")= chr "TextDocumentMeta"
  ..- attr(*, "class")= chr [1:2] "PlainTextDocument" "TextDocument"
 - attr(*, "class")= chr [1:2] "SimpleCorpus" "Corpus"

我希望它看起来如下$ content是一个字符向量:

List of 1 
 $ 1:List of 2 
  ..$ content: chr [1:2] "The fox is Brown." "The Fox has a tail." 
  ..$ meta   :List of 7
  .. ..$ author       : chr(0) 
  .. ..$ datetimestamp: POSIXlt[1:1], format: "2017-06-25 15:11:55"
  .. ..$ description  : chr(0) 
  .. ..$ heading      : chr(0) 
  .. ..$ id           : chr "1"
  .. ..$ language     : chr "en"
  .. ..$ origin       : chr(0) 
  .. ..- attr(*, "class")= chr "TextDocumentMeta"
  ..- attr(*, "class")= chr [1:2] "PlainTextDocument" "TextDocument"

1 个答案:

答案 0 :(得分:0)

这需要大量的反复试验。事实上,我正在使用DirSource来读取数据语料库,我需要做的就是将语料库中的函数序列读取转换为VCorpus(DirSource(directory_name), ...)

为了演示问题,请创建一个文本文件:

The fox is Brown.
The Fox has a tail.

将文件保存在工作目录中名为test的文件夹中,并将文件另存为test.txt

然后运行:

docs = VCorpus(DirSource("./test"))
str(docs)

注意content不是字符向量!!!