在tm包中不再支持Dictionary()。如何修改代码?

时间:2014-02-14 22:05:23

标签: r tm

我刚注意到,在更新到tm v.0.5-10之后,不再支持函数Dictionary()。这是一个错误吗?还是被弃用了?我想用另一个函数来创建字典吗?

由于我现在需要修改许多代码行,所以在没有设计所有内容的情况下,最好的方法是什么?

3 个答案:

答案 0 :(得分: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 :(得分:2)

如果您使用字典作为@Ben建议,我认为您可以创建一个名为Dictionary的虚拟函数,它只返回您传递给它的字符向量。

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

然而,从长远来看,卷起袖子并重构代码可能会更好。

答案 2 :(得分:1)

来自NEWS文件的更完整的摘录:

\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。