6

我有 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 或词根化副词干 - 我的网络搜索没有产生任何答案。

4

2 回答 2

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。

于 2013-06-08T20:49:35.013 回答
0

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

  1. 首先,从你的语料库中取出独特的词。例如:

    独特的$文本 <- 独特的(预算)

  2. 他们,你可以从你的原文中得到独特的词

    unique_budget.orig <- unique(budget.orig)

  3. 现在,您可以为您的独特词应用词干补全

    unique$completion <- 预算 %>% stemCompletion (dictionary= unique_budget.orig)

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

这将减少您的 PC 必须执行的操作数量。

于 2018-01-24T15:45:13.473 回答