Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于字典替换文本中的字符串_R_Performance_Merge_Dataframe - Fatal编程技术网

R 基于字典替换文本中的字符串

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)) {

我是新手,需要建议。 我有一个数据框,其中有一个文本字段。我需要修复文本字段中拼写错误的单词。为了帮助解决这个问题,我有了第二个文件(字典),其中有两列——拼写错误的单词和替换它们的正确单词

你建议怎么做?我写了一个简单的“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)

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"