当前位置: 首页 > 知识库问答 >
问题:

字符串列表,替换其他列表中的所有单词[重复]

马丰
2023-03-14

这里是Python新手。

我有一个文档列表,还有另一个搜索词列表。我现在想迭代每个文档,并将任何搜索词的所有匹配项替换为类似的内容

大概是这样的:

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文档的完整数据集上运行这个,搜索列表可能包含约5k个术语,则需要几天才能完成。有没有更好的方法来解决这个问题并使其更快?

提前致谢!

Edit1:也许值得一提的是,search_list中的术语也可以由多个单词组成。相应地编辑了示例。

编辑2:谢谢你指出另一个主题,以前没有发现过。很抱歉。如下所述,我仍然很想听到其他非正则表达式的解决方案,只是为了了解它们。不过,实际问题已经通过另一个线程解决了。=)


共有1个答案

赫连卓
2023-03-14

这是一种可能性:

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
 类似资料:
  • 我有一个值为-f.e.:。 我想替换这个字符: ,,,,,,,与那些: <代码>>、<代码>>、<代码>l、<代码>o、<代码>s、<代码>z、<代码>c、<代码>n。 这里我的意思是,如果解析器将找到f.e.:char(在第一个列表中是第二个)应该替换为在第二个列表中处于相同位置/位置的char,在本例中是:。 char应替换为char。 char应替换为char。 在我的例子中,要替换的字符列

  • 我知道在python中有一种方法可以使用将单词或字符串转换为列表,但是有没有一种方法可以将其转换为列表,我有: 我试图使用将其更改回字符串,但它保留了语法,仅更改了数据类型。 我想知道是否有办法将列表,例如转换为:。

  • 问题内容: 有没有更短的方法可以编写以下代码? 注意,我不需要替换那些确切的值。我只是在寻找一种将5条以上的线变成少于5条线的方法 问题答案: 看起来是使用循环的好机会: 如果您不介意括号,则更快的方法是:

  • 我正在做一个有趣的小问题,是一个朋友寄给我的。这个问题要求我使用文本文件中的常用词填充数组,然后打印此列表中包含用户提供的某些字符的所有词。我能够填充我的数组没有问题,但是代码中实际比较两个列表的部分似乎不起作用。下面是我编写的用于比较这两个列表的函数。 代码运行得很好,我没有得到任何错误输出,但是一旦用户输入了他们的字母列表,就什么也没有发生。为了测试,我尝试了一些与我知道的单词列表中的单词相匹

  • 我有一个文本包含一些我想要标记的单词,要标记的单词包含在一个列表中。问题是其中一些单词是其他单词的子字符串,但我想从列表中标记最长的可识别字符串。 例如,如果我的文本是“foo和bar不同于foo bar。”我的列表包含“foo”、“bar”和“foo bar”,结果应该是“[tag]foo[/tag]和[tag]bar[/tag]不同于[tag]foo bar[/tag]。”

  • 我有一个包含员工姓名的字符串列表。