tm中stemCompletion的最大合理大小?

时间:2013-06-07 15:50:12

标签: r tm

我有一个包含26个纯文本文件的语料库,每个文件在12到148kb之间,总共1.2Mb。我在Windows 7笔记本电脑上使用R。

我做了所有正常的清理工作(停用词,自定义停用词,小写,数字),并希望完成词干。我使用原始语料库作为字典,如示例中所示。我尝试了几个简单的向量,以确保它可以工作(大约5个术语),它确实很快。

exchanger <- function(x) stemCompletion(x, budget.orig)
budget <- tm_map(budget, exchanger)

从昨天下午4点起它一直在运作!在诊断中的R Studio中,请求日志显示具有不同请求编号的新请求。任务管理器使用一些内存显示它,但不是一个疯狂的数量。我不想阻止它,因为它几乎就在那里?关于如何检查进度的任何其他想法 - 不幸的是,这是一个不稳定的语料库?关于应该花多长时间的想法?我想过使用dtm名称向量作为字典,在最频繁(或高tf-idf)中切断,但我不愿意杀死这个过程。

这是一款常规的Windows 7笔记本电脑,还有很多其他东西在运行。

这个语料库对于stemCompletion来说太大了吗?如果没有转向Python,有没有更好的方法来完成stemCompletion或lemaltize副词 - 我的网络搜索没有产生任何答案。

2 个答案:

答案 0 :(得分:1)

如果没有可以重现问题的数据,我无法给出明确的答案,但我猜测瓶颈来自stemCompletion源代码中的以下几行:

possibleCompletions <- lapply(x, function(w) grep(sprintf("^%s", w), dictionary, value = TRUE))

在此之后,鉴于您保持完成启发式默认为“普遍”,这种情况会发生:

possibleCompletions <- lapply(possibleCompletions, function(x) sort(table(x), decreasing = TRUE))
structure(names(sapply(possibleCompletions, "[", 1)), names = x)

第一行循环浏览语料库中的每个单词,并根据您的词典检查它是否可能完成。我猜你的语料库里有很多次出现的词。这意味着函数被多次调用只是为了给出相同的响应。可能更快的版本(取决于重复的单词数量和重复次数)看起来像这样:

y <- unique(x)

possibleCompletions <- lapply(y, function(w) grep(sprintf("^%s", w), dictionary, value = TRUE))

possibleCompletions <- lapply(possibleCompletions, function(x) sort(table(x), decreasing = TRUE))

z <- structure(names(sapply(possibleCompletions, "[", 1)), names = y)

z[match(x, names(z))]

因此,它仅循环x的唯一值,而不是x的每个值。要创建此修订版本的代码,您需要从CRAN下载源代码并修改该函数(我在R文件夹的completion.R中找到它。)

或者您可能只想将Python用于此。

答案 1 :(得分:0)

Cristina,跟随Schaun我建议你只使用一个独特的词来应用干完成。我的意思是,你的PC很容易用你独特的单词完成你的所有语料库中的完成(所有重复)。

  1. 首先,从您的语料库中获取独特的单词。例如:

    唯一$ text&lt; - unique(预算)

  2. 他们,您可以从原始文本中获取唯一的字词

    unique_budget.orig&lt; - unique(budget.orig)

  3. 现在,您可以将干完成应用于您的单词

    unique $ completition&lt; - budget%&gt;%stemCompletion(dictionary = unique_budget.orig)

  4. 现在您有一个包含语料库中所有单词及其完成情况的对象。您只需要在语料库和对象之间应用唯一的联接。确保两个对象在没有completition的情况下具有相同的变量名称:这个gonne是关键。

  5. 这将减少您的PC必须执行的操作次数。