0

我正在尝试使用qdap::check_spelling()7M 非常短的句子(例如 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 文档的真实数据集上运行它。该脚本运行了几个小时,然后在终端中发送一条“已终止”消息。

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

4

0 回答 0