【问题标题】:Replace strings in text based on dictionary根据字典替换文本中的字符串
【发布时间】:2013-12-13 22:02:37
【问题描述】:

我是 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)

【问题讨论】:

  • merge?如果合并太慢,也许加入data.table
  • @joran 不确定我是否理解。文本可能包含多个需要替换的单词。您是否建议将两个数据文件合并为一个文件会更快?
  • 我建议使用左连接,然后像在 SQL 中那样填充原始数据框中的缺失值。这是通过merge 或也使用data.table 完成的,但语法不同。 data.table 甚至可以使用滚动连接一次性完成。
  • 我对“性能是一个问题”并不感到惊讶。 R 只是不适合某些事情的平台。
  • @joran,我仍然不清楚如何使用您的建议。也许我没有正确解释这个问题。原始表格有文字,例如“客户抱怨今天服务不好”。我需要的是找到。第二个表中的“costomer”并将其替换为“customer”,然后将“complainied”替换为“complained”。您是否建议根据文本字段中的每个单词创建连接? (那里可能有 100 个或更多)

标签: r performance merge dataframe


【解决方案1】:

我会尝试agrep。不过我不确定它的扩展性如何。

例如。

> agrep("laysy", c("1 lazy", "1", "1 LAZY"), max = 2, value = TRUE)
[1] "1 lazy"

也可以查看pmatchcharmatch,虽然我觉得它们对你没有那么有用。

【讨论】:

  • 谢谢,这些功能很有用!我需要多考虑一下如何在这种情况下应用它们
【解决方案2】:

这里是一个示例,使用 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

【讨论】:

  • 文本字段将包含多个单词(最多 2000 个字符)-我无法理解如何针对这种情况应用您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 2015-10-30
  • 1970-01-01
  • 2013-11-18
相关资源
最近更新 更多