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)
这似乎很有效,但是确实很慢(我的意思是 really )。如果我要在约1万个文档的完整数据集上运行它,并使用search_list可能包含约5000个字词,需要几天的时间才能完成。 有没有更好的方法来解决这个问题并使之更快?
非常感谢!
Edit1:也许值得一提的是search_list
中的术语也可以由多个单词组成。相应地编辑了示例。
Edit2:感谢您指向另一个线程,之前没有找到那个线程。对于那个很抱歉。如下所述,我仍然很好奇听到其他非正则表达式解决方案只是为了了解它们。但是,实际问题已通过其他线程解决。 =)
答案 0 :(得分:0)
这是一种可能性:
import re
document_list = ['I like apples', 'I like bananas', 'I like apples and bananas and pineapples']
search_list = ['apples', 'bananas']
search_re = re.compile(r'\b(' + '|'.join(search_list) + r')\b')
replacement = r'<placeholder>'
document_replaced = [search_re.sub(replacement, doc) for doc in document_list]
print(*document_replaced, sep='\n)
输出:
I like <placeholder>
I like <placeholder>
I like <placeholder> and <placeholder> and pineapples