我有 2 组数据。
第一个用作字典的有两列keyword
和id
180000 行。下面是一些示例数据。
另外请注意,有些关键字小到 2 个字符,大到 700 个字符,并且没有固定的关键字长度。虽然 id 具有固定的 3 位数字模式,数字前后都有一个井号。
keyword id
salesman #123#
painter #486#
senior painter #215#
第二个文件有一列,corpus
它有 2200 万条记录,每条记录的长度在 10 到 1000 之间变化。下面是可以视为输入的示例数据。
corpus
I am working as a salesman. salesmanship is not my forte, however i have become a good at it
I have been a painter since i was 19
are you the salesman?
输出
corpus
I am working as a #123#. salesmanship is not my forte, however i have become a good at it
I have been a #486# since i was 19
are you the #123#?
请注意,我想替换完整的单词而不是重叠的单词。所以在第一句salesman
被替换为#123#
where assalesmanship
没有被替换为#123#ship
. 这需要我'\b'
在keyword
. 这就是正则表达式对于搜索功能很重要的原因
所以这是对数百万行的搜索和替换操作,并且有正则表达式。我读过 Python 中的 Mass 字符串替换? 并 在 Python 3 中加速数百万个正则表达式替换,但是我需要几天的时间来完成这个查找和替换,因为这是一项每周任务,所以我负担不起。我希望能够更快地做到这一点。下面是我的代码
Id = df_dict.Id.tolist()
#convert to list with regex
keyword = [r'\b'+ x + r'\b' for x in df_dict.keyword]
#light on memory to clean file
del df_dict
#replace
df_corpus["corpus_text"].replace(keyword, Id, regex=False,inplace=True)