Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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_Text Mining_Gsub_Large Data - Fatal编程技术网

R 我如何';高效';在大型文本语料库中,用另一个(成对)字符串向量替换字符串向量

R 我如何';高效';在大型文本语料库中,用另一个(成对)字符串向量替换字符串向量,r,text-mining,gsub,large-data,R,Text Mining,Gsub,Large Data,我有一个字符串向量(app.700.000 strings)中的大量文本。我试图替换语料库中的特定单词/短语。也就是说,我有一个40.000个短语的向量和一个相应的替换向量 我正在寻找一种有效的方法来解决这个问题 我可以做一个for循环,循环每个模式+替换。但它的伸缩性很差(3天左右!) 我还尝试了qdap::mgsub(),但它的扩展性似乎也很差 txt创建每个短语中所有单词的向量 txt1 = strsplit(txt, " ") words = unlist(txt1) 使用match(

我有一个字符串向量(app.700.000 strings)中的大量文本。我试图替换语料库中的特定单词/短语。也就是说,我有一个40.000个短语的向量和一个相应的替换向量

我正在寻找一种有效的方法来解决这个问题

我可以做一个for循环,循环每个模式+替换。但它的伸缩性很差(3天左右!)

我还尝试了qdap::mgsub(),但它的扩展性似乎也很差


txt创建每个短语中所有单词的向量

txt1 = strsplit(txt, " ")
words = unlist(txt1)
使用
match()

idx <- match(words, patterns)
words[!is.na(idx)] = replacements[idx[!is.na(idx)]]

如果模式可以有多个单词,我想这是行不通的…

在新旧值之间创建一个映射

map <- setNames(replacements, patterns)
找到所有匹配项并提取它们

ridx <- gregexpr(pattern, txt)
m <- regmatches(txt, ridx)

ridx如果您可以先标记文本,那么矢量化替换会快得多。如果a)可以使用多线程解决方案,b)使用固定表达式而不是正则表达式匹配,则速度也会更快

下面是如何在quanteda包中完成所有这些。最后一行将标记作为字符向量粘贴回单个“文档”中,如果这是您想要的

库(“quanteda”)
##软件包版本:1.4.3
##并行计算:使用12个线程中的2个。
##看https://quanteda.io 有关教程和示例。
## 
##附加程序包:“quanteda”
##以下对象已从“package:utils”屏蔽:
## 
##看法
quanteda_选项(线程数=4)

抱歉没有指定,模式通常有更多的单词。坦克。。。不过,我得到了一个错误,在
rridx中,我猜问题太大了;您可以尝试处理模式的子集,以了解该方法的可行性;如果它使用1000个模式“起作用”,并且比您当前的迭代方法更快,那么将解决方案应用于1000个模式的“块”中。我有一项紧急任务要完成。我在qatd_cpp_令牌_replace(x,type,ids_pat,ids_repl)中发现以下错误:【type=NULL;target=double】与请求的类型不兼容。
有关错误,请提交到。
pattern = paste0("(", paste0(patterns, collapse="|"), ")")
ridx <- gregexpr(pattern, txt)
m <- regmatches(txt, ridx)
regmatches(txt, ridx) <- relist(map[unlist(m)], m)