2014-02-14 47 views
7

我剛剛注意到,在更新到tm v。0.5-10之後,不再支持函數Dictionary()。這是一個錯誤嗎?還是被棄用?我想用另一個函數來創建一個字典嗎?tm包中不再支持字典()。如何修改代碼?

因爲我現在有很多代碼需要修改,那麼在沒有工程設計的情況下繼續進行的最好方法是什麼?

從新聞文件
+2

從包新聞:「使用一個字符向量;使用Terms()從文檔術語或術語文檔矩陣中提取術語」http://cran.r-project.org/web/packages/tm /新聞。html – Ben

+0

@Ben Terms()沒有完全複製Dictionary()'UseMethod中的錯誤(「Terms」): 沒有適用於'Terms'的適用方法應用於類「character」的對象' – CptNemo

回答

9

正如IShouldBuyABoat所說,你沒有給我們任何關於你如何使用Dictionary的線索,所以我們不能給你任何具體的答案(更新你的問題,更多細節)。

在任何情況下,回答你的「如何更新我的代碼」問題可能是「只是刪除Dictionary,它應該是精」,因爲你可以在這裏看到:

library(tm) 
data(crude) 

找出Dictionary在早期版本的tm包所做的:一個毫無意義的功能

methods(Dictionary) 
getAnywhere(Dictionary.DocumentTermMatrix) 
# function(x) structure(Terms(x), class = c("Dictionary", "character")) 
getAnywhere(Dictionary.character) 
# function (x) structure(x, class = c("Dictionary", "character")) 

類,無論如何,似乎非常明智的將其刪除。但是如何更新依賴於它的代碼?

您可能使用Dictionary這樣的:

myDictionary <- Dictionary(c("some", "tokens", "that", "I", "am", "interested", "in")) 
inspect(DocumentTermMatrix(crude, list(dictionary = myDictionary))) 

現在,這項功能不再可用,你應該這樣做,而不是使用一個特徵向量:'

myTerms <- c("some", "tokens", "that", "I", "am", "interested", "in") 
inspect(DocumentTermMatrix(crude, list(dictionary = myTerms))) 

輸出對於這兩個示例是相同的,第一個是使用tm版本0.5-9和第二個版本0.5-10

該指令在使用Terms的消息是,如果你想獲得的所有詞語的文件項矩陣,像這樣

Terms(DocumentTermMatrix(crude)) 

如果這些方法都可以幫助你,那麼你就需要提供更多的細節你想要什麼去做。

1

更完整的提取物:

\subsection{DEPRECATED & DEFUNCT}{ 
    \itemize{ 
     \item Following functions have been removed: 
     \itemize{ 
     \item \code{Dictionary()} (use a character vector instead; use 
      \code{Terms()} to extract terms from a document-term or term-document 
      matrix), 

所以。是的,它被棄用和刪除。正如Ben所建議的,作者打算使用Terms()。爲什麼你得到這個錯誤只是一個空閒的猜測問題,因爲你沒有提供一個數據對象並且代碼會拋出錯誤。一個猜測是你提供的對象不是TDM或DTM。

2

如果您使用Dictionary作爲@Ben建議,我認爲您可以創建一個名爲Dictionary的虛擬函數,它只是返回您傳遞給它的字符向量。

Dictionary <- function(x) { 
    if(is.character(x)) { 
     return (x) 
    } 
    stop('x is not a character vector') 
} 

但是,長期來說,捲起袖子和重構代碼可能會更好。