我正在尝试使用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 文档的真实数据集上运行它。该脚本运行了几个小时,然后在终端中发送一条“已终止”消息。
我可以将其分解并以块的形式循环数据。但在我这样做之前,有没有更好的方法来实现我的目标?