我是R的新手,需要建议。 我有一个包含1个文本字段的数据框。我需要修复该文本字段中拼写错误的单词。为了解决这个问题,我有第二个文件(字典),包含2列 - 拼写错误的单词和正确的单词来替换它们。
你会怎么推荐呢?我写了一个简单的“for循环”,但性能是一个问题。 该文件有~120K行,字典有~5k行,程序已经运行了几个小时。文本最多可包含2000个字符。
以下是代码:
output<-source_file$MEMO_MANUAL_TXT
for (i in 1:nrow(fix_file)) { #dictionary file
target<-paste0(" ", fix_file$change_to_target[i], " ")
replace<-paste0(" ", fix_file$target[i], " ")
output<-gsub(target, replace, output, fixed = TRUE)
答案 0 :(得分:1)
这是一个示例,使用data.table左连接显示@joran注释。它非常快(在这里瞬间)。
library(data.table)
n1 <- 120e3
n2 <- 1e3
set.seed(1)
## create vocab
tt <- outer(letters,letters,paste0)
vocab <- as.vector(outer(tt,tt,paste0))
## create the dictionary
dict <- data.table(miss=sample(vocab,n2,rep=F),
good=sample(letters,n2,rep=T),key='miss')
## the text table
orig <- data.table(miss=sample(vocab,n1,rep=TRUE),key='miss')
orig[dict]
orig[dict]
miss good
1: aakq v
2: adac t
3: adxj r
4: aeye t
5: afji g
---
1027: zvia d
1028: zygp p
1029: zyjm x
1030: zzak t
1031: zzvs q
答案 1 :(得分:1)
我会尝试agrep
。我不确定它的扩展程度如何。
EG。
> agrep("laysy", c("1 lazy", "1", "1 LAZY"), max = 2, value = TRUE)
[1] "1 lazy"
同时查看pmatch
和charmatch
,但我觉得它们对您没用。