R 基于字典替换文本中的字符串
我是新手,需要建议。 我有一个数据框,其中有一个文本字段。我需要修复文本字段中拼写错误的单词。为了帮助解决这个问题,我有了第二个文件(字典),其中有两列——拼写错误的单词和替换它们的正确单词 你建议怎么做?我写了一个简单的“for循环”,但性能是个问题。 该文件约有120K行,字典约有5k行,程序已运行数小时。文本最多可包含2000个字符 代码如下:R 基于字典替换文本中的字符串,r,performance,merge,dataframe,R,Performance,Merge,Dataframe,我是新手,需要建议。 我有一个数据框,其中有一个文本字段。我需要修复文本字段中拼写错误的单词。为了帮助解决这个问题,我有了第二个文件(字典),其中有两列——拼写错误的单词和替换它们的正确单词 你建议怎么做?我写了一个简单的“for循环”,但性能是个问题。 该文件约有120K行,字典约有5k行,程序已运行数小时。文本最多可包含2000个字符 代码如下: output<-source_file$MEMO_MANUAL_TXT for (i in 1:nrow(fix_file)) {
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)
output这里是一个示例,使用data.table左连接显示@joran注释。它非常快(在这里瞬间)
库(data.table)
n1我会尝试agrep
。但我不确定它的伸缩性有多好
例如
还可以查看pmatch
和charmatch
,尽管我觉得它们对您没有多大用处。merge
?如果合并太慢,可能是与数据表的联接?@joran不确定我是否理解。文本可能包含多个需要替换的单词。您是否建议将两个数据文件合并为一个文件会更快?我建议使用左连接,然后像在SQL中一样填充原始数据帧中缺少的值。这可以通过merge
或使用data.table
完成,但语法不同。data.table甚至可以使用滚动联接一次性完成。我对“性能是个问题”一点也不感到惊讶。R只是在某些方面不是合适的平台。@joran,我仍然不清楚如何使用您的建议。也许我没有正确地解释这个问题。原始表格有文本,如“客户抱怨今天的服务不好”。我需要的是找到。第二个表中的“客户”,将其替换为“客户”,然后将“投诉”替换为“投诉”。您是否建议基于文本字段中的每个单词创建联接?(可能是100或更多)文本字段将有多个单词(最多2000个字符)-我在理解如何应用您的建议时遇到困难。谢谢,这些都是有用的功能!我需要再考虑一下如何在这种情况下应用它们
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
> agrep("laysy", c("1 lazy", "1", "1 LAZY"), max = 2, value = TRUE)
[1] "1 lazy"