2016-05-12 63 views
2

您好:我使用tm軟件包進行一些文本分析,並且我需要用向量中的配對替換項更換。所以模式/替換字典看起來像這樣。使用mapply來替換矢量中的模式替換tm中的矢量

#pattern -replacement dictionary 
df<-data.frame(replace=c('crude', 'oil', 'price'), with=c('xcrude', 'xoil', 'xprice')) 
#load tm 
library(tm) 
#load crude 
data('crude') 

我嘗試這樣做,收到錯誤

tm_map(crude, mapply, gsub, df$replace, df$with) 

Warning message: 
In mclapply(content(x), FUN, ...) : 
all scheduled cores encountered errors in user code 
+0

您是否必須使用'tm'來做到這一點? – Sotos

+0

基本上可以。我很確定我可以在它之外做到這一點,但我想知道如何在tm中做到這一點。 – spindoctor

回答

2

在此基礎上answer你可以使用stringi並繞到它content_transformer()保持胼結構:

corp <- tm_map(crude, content_transformer(
    function(x) { 
    stri_replace_all_fixed(x, df$replace, df$with, vectorize_all = FALSE) 
    }) 
) 

或者multigsubqdap

corp <- tm_map(crude, content_transformer(
    function(x) { 
    multigsub(df$replace, df$with, fixed = FALSE, x) 
    }) 
) 

其中給出:

> corp[[1]][1] 

「鑽石三葉草公司說,\今天neffective它由\ n1.50 DLRS每桶下調了 合同xpricesxcrude xoil \。該減少帶來其西德克薩斯州xprice \ n中間到 16.00 dlrs一桶,copany說。\ n「xprice今天減少是根據f阿靈\ n xoil產品xprices 和弱xcrude xoil市場,\」公司\ nspokeswoman說。\ n
鑽石是在一條線上美國的最新xoil公司,\ nhave 切其合同,或張貼,xprices在過去兩年 天\ nciting弱xoil市場。\ n路透社」

您可以再申請其他tm對所得語料庫的功能:

> DocumentTermMatrix(corp) 
#<<DocumentTermMatrix (documents: 20, terms: 1269)>> 
#Non-/sparse entries: 2262/23118 
#Sparsity   : 91% 
#Maximal term length: 17 
#Weighting   : term frequency (tf) 
+1

如果要替換的術語字典實際上是正則表達式,那麼我會使用: stri_replace_all_regex – spindoctor

+0

@spindoctor當然,這應該工作得很好。 –

+1

所以,這只是部分工作。當你檢查返回的結構時,它是一個列表,而不是一個語料庫。 #檢查結構 STR(公司) STR(原油) #檢查類本是同 類(公司) 類(原油) 我認爲這是顯著因爲現在基本功能類似於DocumentTermMatrix現在不再工作> #DTM DocumentTermMatrix(corp) DocumentTermMatrix(粗) – spindoctor