2012-01-27 39 views
5

初學R和文本挖掘。目前使用tm包。R文本挖掘 - 一個接一個合併段落無句混合起來

我想將兩個不同文檔的文本一起添加到語料庫中。 當我使用像

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軟件包中合併文檔的簡單方法是什麼?先謝謝你!


附加信息


當我使用
一個< - C(corpus.doc [[1]],corpus.doc [[2]],遞歸= TRUE)

我得到一個成爲一個語料庫與兩個文件,所以這些文件中的每個文本仍然沒有合併。我希望

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" 

它不斷回事...

+0

爲什麼不使用文本編輯器將一個文檔的文本複製並粘貼到另一個文檔中?如果您的示例中的兩個文檔是「PlainTextDocument」和「TextDocument」,那麼在文本編輯器中編輯它們應該沒有問題。然後使用該新文檔作爲tm包的輸入。不是一個純粹的R解決方案,但如果你只有少量的文件,則很快。 – Ben 2012-01-27 20:40:31

+0

是的......我知道:)只有7000多個這樣的文件(他們是語音文件),我想根據他們是否由同一位發言者來組合文本。 – appletree 2012-01-27 21:29:13

回答

2

在pkg幫助:TM說,有一個c.Corpus函數,其默認設置爲「遞歸'爲FALSE,但如果設置爲TRUE可能會導致「智能」合併。如果你覺得copus.doc是語料庫類對象的列表,你可以嘗試:

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

...但它是不明確的,你真的有「法典」級的對象。

str(corpus.doc) # see above 

所以在很長的列表中的第一個元素是一個語料庫歸類對象,而是一個PlaintextDocument。

+0

這創建了兩個文本文檔的另一個語料庫。我想要的是語料庫中的單個文檔。 – appletree 2012-01-27 19:07:47

+0

對不起,無法以有意義的方式迴應,因爲我沒有足夠的聲望,我猜。我編輯了我原來的問題來回答你的問題。 – appletree 2012-01-27 19:31:14

+0

我的意思是,我不能在評論中使用代碼部分,我是這個板上的初學者,功能有限。 – appletree 2012-01-27 19:39:06

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.paste <- paste(a,b,c, collapse=' ') # this is what you want 

,使得所得abc.paste對象爲單行。然後,當你使用

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

語料庫的結果將是A corpus with 1 text document然後你就可以用在tm包功能分析。

應該直接將它擴展爲一個函數,以有效連接7000多個純文本文檔,然後從生成的數據對象中創建一個語料庫。這能讓你更接近你想要做的事嗎?