首页 > 解决方案 > 从 r 中的 df (size 29175) 中删除/替换/gsub df (size 6001) 中的所有单词匹配列表,不同大小的数据帧

问题描述

我一直在尝试删除 dfmedia(大小 29175)中与 dfvocab(大小 6001)中包含的任何单词匹配的任何单词。

dfmedia: each row is a sentence of words in chinese. 
我喜歡吃蘋果; 我愛吃饅頭; 我不喜歡菠菜; 我最討厭蘋果!;我很愛菠菜啊;哪個中國人敢不喜歡饅頭?;哎呀饅頭蘋果菠菜都是食物管人家喜歡否?

dfvocab: 蘋果,饅頭,菠菜

desired result: 我喜歡吃; 我愛吃; 我不喜歡; 我最討厭!;我很愛啊;哪個中國人敢不喜歡?;哎呀都是食物管人家喜歡否?

我认为中文或英文的结果不会有任何不同,因为它是一个简单的匹配和删除/替换,但我在这里包括中文以防万一,因为我的 og 数据是中文的。

我已经尝试过 gsub()、mapply() 并使用 stringr 将 dfmedia 和 dfvocab 绑定到一个数据帧/删除中。但是,由于 dfvocab 和 dfmedia 的大小不同,我不确定如何使用在线建议的方法来解决这个问题。

任何帮助将非常感激!!

标签: r

解决方案


这很简单gsub。只是paste0所有的词汇和正则表达式 OR 运算符并替换为""

> gsub(paste0(dfvocab, collapse="|"), "",  dfmedia)
[1] "我喜歡吃"                 " 我愛吃"                  " 我不喜歡"                " 我最討厭!"              "我很愛啊"                 "哪個中國人敢不喜歡?"    
[7] "哎呀都是食物管人家喜歡否"

(我不会说或读中文。)我想如果要删除这么大的词汇集,您可能需要将 6000 个词汇分解成块,我怀疑这会很慢。您可能想查看该tm软件包,因为文本挖掘可能是一项需要优化此类操作的任务。

这是构建可重现示例的方法:

> dfmedia <- scan(text="我喜歡吃蘋果; 我愛吃饅頭; 我不喜歡菠菜; 我最討厭蘋果!;我很愛菠菜啊;哪個中國人敢不喜歡饅頭?;哎呀饅頭蘋果菠菜都是食物管人家喜歡否", what="", sep=";")
Read 7 items
> 
> dfvocab <- scan(text="蘋果,饅頭,菠菜", what="", sep=",")
Read 3 items

推荐阅读