使用qdap :: check_spelling需要很长时间,我可以提高效率

时间:2017-07-19 02:22:46

标签: r text-mining qdap

我试图在7M非常短的句子上使用qdap::check_spelling()(例如1到4个单词的句子)。

我正在通过ssh / linux运行脚本,经过大约6个小时的运行后,我收到一条“被杀”的消息,我认为这意味着我耗费了大量的内存?我使用的是64GB服务器。

我的目标是返回一个数据框以写入带有以下字段的csv:

Unique list of misspelt words | The frequency of the misspelt word | an example of the misspelt word for context

按频率降序排序,找到最常见的拼写错误字。一旦我产生了这个,我们就有了一个支持团队,他们将在最频繁的拼写错误中工作并尽可能多地纠正错误。他们要求拼错单词的一些背景,即在较大的句子中看到它们。所以,我试图使用拉错误字的第一个实例并添加到第三列。

示例:

library(tidyverse)
library(qdap)
# example data
exampledata <- data.frame(
  id = 1:5,
  text = c("cats dogs dgs cts oranges",
           "orngs orngs cats dgs",
           "bannanas, dogs",
           "cats cts dgs bnnanas",
           "ornges fruit")
)

# check for unique misspelt words using qdap
all.misspelts <- check_spelling(exampledata$text) %>% data.frame %>% select(row:not.found)
unique.misspelts <- unique(all.misspelts$not.found)

# for each misspelt word, get the first instance of it appearing for context/example of word in a sentence
contexts.misspellts.index <- lapply(unique.misspelts, function(x) {
  filter(all.misspelts, grepl(paste0("\\b",x,"\\b"), not.found))[1, "row"]
}) %>% unlist

# join it all together in a data farem to write to a csv
contexts.misspelts.vector <- exampledata[contexts.misspellts.index, "text"]
freq.misspelts <- table(all.misspelts$not.found) %>% data.frame() %>% mutate(Var1 = as.character(Var1))
misspelts.done <- data.frame(unique.misspelts, contexts.misspelts.vector, stringsAsFactors = F) %>%
  left_join(freq.misspelts, by = c("unique.misspelts" = "Var1")) %>% arrange(desc(Freq))
write.csv(x = misspelts.done, file="~/csvs/misspelts.example_data_done.csv", row.names=F, quote=F)

这就是它的样子:

> misspelts.done
  unique.misspelts contexts.misspelts.vector Freq
1              dgs cats dogs dgs cts oranges    3
2              cts cats dogs dgs cts oranges    2
3            orngs      orngs orngs cats dgs    2
4         bannanas            bannanas, dogs    1
5          bnnanas      cats cts dgs bnnanas    1
6           ornges              ornges fruit    1

这正是我想要的!但我正在努力在我的文本中的7m文档的真实数据集上运行它。该脚本运行几个小时,然后在终端中发送“已杀死”消息。

我可以将其分解并以块的形式循环遍历数据。但在我这样做之前,有没有更好的方法来实现我的目标?

0 个答案:

没有答案