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