R文本挖掘 - 将段落一个接一个地组合在一起,而不会混淆句子

5
"R和文本挖掘方面的初学者。目前正在使用tm包。 我正在尝试将两个不同文档的文本合并到一个语料库中。 当我使用像这样的语句时"
 c(corpus.doc[[1]],corpus.doc[[2]]) 

"或者是粘贴语句"
  paste(corpus.doc[[1]],corpus.doc[[2]]) 

我得到每行文本组合的结果。
例如: 如果
> corpus.doc[[1]] 

He visits very often 
and 
sometimes more

> corpus.doc[[2]]) 

She also 
stays

这些陈述给我的感觉是:
He visits very often She also
and stays
sometimes more

如何防止这种情况发生,而是获得以下内容
He visits very often
and 
sometimes more
She also 
stays

还是有没有在R tm包中简单地合并文档的方法?谢谢!

附加信息


当我使用
a <- c( corpus.doc[[1]], corpus.doc[[2]], recursive=TRUE)

我得到a变成一个包含两个文档的语料库,所以每个文档的文本仍然没有合并。我希望它这样做

a[[1]] 

给我合并corpus.doc[[1]]和corpus.doc[[2]]的文本。
str(corpus.doc)

显示类似于这样的东西
 List of 4270
 $ CREC-2011-01-05-pt1-PgE1-2.htm   :Classes     'PlainTextDocument',   'TextDocument', 
      'character'  atomic [1:74] html head titlecongression record volume  issue  
 head  ...
 .. ..- attr(*, "Author")= chr(0) 
 .. ..- attr(*, "DateTimeStamp")= POSIXlt[1:1], format: "2009-01-17 15:45:25"
 .. ..- attr(*, "Description")= chr(0) 
 . . ..- attr(, "Heading")= chr(0) .. ..- attr(, "ID")= chr "CREC-2011-01-05-pt1-PgE1- 2.htm"

它继续进行着...

为什么不使用文本编辑器将一个文档的文本复制并粘贴到另一个文档中?如果您的示例中有两个文档分别为''PlainTextDocument' 和 'TextDocument',在文本编辑器中编辑它们应该没有问题。然后,将新文档用作tm软件包的输入。虽然这不是纯R方案,但如果您只有少量文档,则非常快捷。 - Ben
是的...我知道 :) 只是有超过7000个这些文件(它们是语音文件),我想根据说话者将文本合并在一起。 - appletree
2个回答

2

在pkg:tm中的帮助文档中提到了c.Corpus函数,其'recursive'默认设置为FALSE,但如果设置为TRUE,则可以实现“智能”合并。如果您认为copus.doc是一个corpus-class对象列表,您可以尝试以下操作:

c( corpus.doc[[1]], corpus.doc[[2]], recursive=TRUE)

...但是你真的有“语料库”类对象并不清楚。

str(corpus.doc)   # see above

因此,那个非常长的列表中的第一个元素不是一个Corpus-classed对象,而是一个PlaintextDocument。

这将创建另一个包含两个文本文档的语料库。我想要的是在语料库中只有一个单一的文档。 - appletree
抱歉,我猜测我的声望不够,无法以有意义的方式回答您。我编辑了原始问题以回答您的问题。 - appletree
我的意思是,我不能在评论中使用代码部分,我是一个功能有限的初学者。 - appletree
@appletree:您对此答案提出了建议性编辑,应该将其应用于问题而不是答案。 - Keith Thompson
它适用于这个问题。 - appletree

1
进一步来说,你可以在创建语料库之前先将你的纯文本文件在 R 中组合起来。例如,如果 1.txt2.txt3.txt 是纯文本文件,那么你可以像这样在 R 中读取它们。
a <- readLines(file("C:/Users/X/Desktop/1.txt"))
b <- readLines(file("C:/Users/X/Desktop/2.txt"))
c <- readLines(file("C:/Users/X/Desktop/3.txt"))

然后你可以将它们组合起来,类似于你上面的例子

abc <- c(a, b, c)

这将按顺序堆叠文档,并在单个数据对象中保留逐行格式,正如您所请求的那样。但是,如果您将其转换为语料库,则

abc.corpus <- Corpus(VectorSource(abc)) # not what you want

然后你会得到一个与行数相同的语料库,这听起来不像你想要的。相反,你需要像这样组合文本对象

abc.paste <- paste(a,b,c, collapse=' ') # this is what you want 

这样生成的abc.paste对象就是单行的。然后当您使用语料库时,

abc.corpus <- Corpus(VectorSource(abc.paste))

结果将是一个包含1个文本文档的语料库,您可以使用tm包中的函数进行分析。

将其扩展为一个函数应该很简单,以便高效地连接您的7000多个纯文本文档,然后从生成的数据对象中创建一个语料库。这是否让您更接近想要做的事情呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接