【发布时间】:2018-11-09 16:57:21
【问题描述】:
这里是 Python 新手。
我有一个文档列表和另一个搜索词列表。我现在想遍历每个文档,并将所有出现的任何搜索词替换为 <placeholder> 之类的内容。但是,它应该只匹配完整的单词,所以text.replace 可能不起作用?
所以,是这样的:
document_list = ['I like apples', 'I like bananas', 'I like apples and bananas and pineapples', 'I like oranges, but not blood oranges.']
search_list = ['apples', 'bananas', 'blood oranges']
Out: ['I like <placeholder>', 'I like <placeholder>', 'I like <placeholder> and <placeholder> and pineapples', 'I like oranges, but not <placeholder>.']
现在,我有类似的东西
for document in document_list:
for term in search_list:
document = re.sub(r'\b{}\b'.format(term),'<placeholder>',document)
这似乎可行,但确实(我的意思是真的)很慢。如果我要在大约 10k 文档的完整数据集上运行它,并且 search_list 可能有大约 5k 术语,需要几天时间才能完成。 有没有更好的方法来解决这个问题并使其更快?
提前非常感谢!
Edit1:也许值得一提的是search_list中的术语也可以由多个单词组成。相应地编辑了示例。
Edit2:感谢您指向另一个线程,以前没有找到那个。对于那个很抱歉。如下所述,我仍然很想听听其他非正则表达式的解决方案,只是为了了解它们。不过,实际问题已通过另一个线程解决。 =)
【问题讨论】:
-
您愿意接受非正则表达式解决方案吗?
-
当然,我愿意接受任何最有效的方法。正则表达式只是我想到的第一件事(也是唯一一件)。