2017-04-18 49 views
1

我正在處理非結構化文本(Facebook)數據,並對其進行了預處理(例如,剝離標點符號,刪除停用詞,詞幹)。我需要在預處理過程中保留記錄(即Facebook郵政)ID。我有一個解決方案適用於數據的一個子集,但所有數據都失敗(N = 127K個帖子)。我試過分塊數據,但這也不起作用。我認爲這與我使用解決方法有關,並依賴於行名。例如,它似乎與第一個〜15K的帖子一起工作,但是當我繼續進行子集化時,它失敗了。我意識到我的代碼不夠優雅,所以很高興能夠學習更好的/完全不同的解決方案 - 我關心的是在我去V Corpus時再保存ID,然後再返回。我是tm包和readTabular函數的新手。 (注意:我在創建VCorpus之前先跑下去並刪除單詞,因爲我原先以爲這是問題的一部分)。使用tm函數時保留唯一標識符(例如,記錄標識符) - 不適用於批量數據?

工作代碼如下:

的樣本數據

fb = data.frame(RecordContent = c("I'm dating a celebrity! Skip to 2:02 if you, like me, don't care about the game.", 
           "Photo fails of this morning. Really Joe?", 
           "This piece has been almost two years in the making. Finally finished! I'm antsy for October to come around... >:)"), 
           FromRecordId = c(682245468452447, 737891849554475, 453178808037464), 
           stringsAsFactors = F) 

刪除標點&使小寫

fb$RC = tolower(gsub("[[:punct:]]", "", fb$RecordContent)) 
fb$RC2 = removeWords(fb$RC, stopwords("english")) 

第1步:創建專門的閱讀器功能,保留記錄ID

myReader = readTabular(mapping=list(content="RC2", id="FromRecordId")) 

第2步:製作我的語料庫。閱讀使用DataframeSource和定製閱讀器的功能,其中每個FB帖子是一個「文件」

corpus.test = VCorpus(DataframeSource(fb),  readerControl=list(reader=myReader)) 

步驟3中的數據:清潔和幹

corpus.test2 = corpus.test %>% 
tm_map(removeNumbers) %>% 
tm_map(stripWhitespace) %>% 
tm_map(stemDocument, language = "english") %>% 
as.VCorpus() 

步驟4:語料庫回字符向量。該行的名稱現在的ID

fb2 = data.frame(unlist(sapply(corpus.test2, `[`, "content")), stringsAsFactors = F) 

步驟5:對於合併爲後來合併新的ID變量名乏,並準備返回到原始數據集

fb2$ID = row.names(fb2) 
fb2$RC.ID = gsub(".content", "", fb2$ID) 
colnames(fb2)[1] = "RC.stem" 
fb3 = select(fb2, RC.ID, RC.stem) 
row.names(fb3) = NULL 

回答

0

我認爲IDS 默認情況下由tm模塊進行存儲和保留。你可以用

meta(corpus.test, "id")

$`682245468452447` 
[1] "682245468452447" 

$`737891849554475` 
[1] "737891849554475" 

$`453178808037464` 
[1] "453178808037464" 

獲取它們的所有(在量化的方式)我建議你閱讀的tm::meta()函數的文檔,但它不是非常好。

您還可以任意元數據(作爲鍵值對)添加到語料庫中的每個集合項目以及集合級別元數據。

+0

謝謝!很高興知道能夠添加metadata = cool;) –