2013-02-13 101 views
2

我從數據框創建Copus。我將它作爲VectorSource傳遞,因爲只有一列我想用作文本源。這可以發現,但是我需要文集中的文檔ID來匹配數據框中的文檔ID。文檔ID存儲在原始數據框的獨立列中。如何手動設置文檔中的文檔ID?

df <- as.data.frame(t(rbind(c(1,3,5,7,8,10), 
         c("text", "lots of text", "too much text", "where will it end",   "give peas a chance","help")))) 
colnames(df) <- c("ids","textColumn") 
library("tm") 
library("lsa") 
corpus <- Corpus(VectorSource(df[["textColumn"]])) 

運行此代碼將創建一個語料庫,但是文檔ID從1-6運行。有沒有辦法用文檔ID 1,3,5,7,8,10創建語料庫?

回答

2

那麼,一個簡單但不分配你的ID,以您的文檔非常優雅的方式,後來可能是以下幾點:

for (i in 1:length(corpus)) { 
    attr(corpus[[i]], "ID") <- df$ids[i] 
} 
+0

它的工作原理!我會稍微等一下,看看是否有人能夠想出更優雅的東西,也許在實際的語料庫創建過程中分配它們。但是,如果他們不能,我會很樂意接受這一點,如果不是你單獨回答的速度;) – user1098798 2013-02-13 11:31:16

+0

@ user1098798謝謝!我稍微修改了我的答案,因爲顯然你可以直接重用原始數據中的ID ... – juba 2013-02-13 11:43:13

0

這裏是一個qdap辦法解決這個問題,可以處理它沒有循環:

使用權qdap version >= 1.1.0從一開始到數據幀轉換爲Corpus和ID標記將被自動添加。

with(df, as.Corpus(textColumn, ids)) 

## <<VCorpus>> 
## Metadata: corpus specific: 0, document level (indexed): 3 
## Content: documents: 6 


## Look around a bit 
meta(with(df, as.Corpus(textColumn, ids)), tag="id") 
inspect(with(df, as.Corpus(textColumn, ids))) 
+0

'df2tm_corpus'已棄用;你可以編輯你的答案,並用'as.Corpus'代替嗎? – coip 2015-06-11 21:05:27

+0

這不起作用!,我總是有他的結果空值 – bicepjai 2015-07-26 22:37:05

2

我知道它可能晚了@ user1098798,但是有一種方法可以在創建語料庫時直接指定id。您需要加載數據DataframeSource()並添加映射到列:

corpus = VCorpus(DataframeSource(df), readerControl = list(reader = readTabular(mapping = list(content = "textColumn", id = "ids"))))