gpt4 book ai didi

Python - 从字符串列表中快速计算文本中以以下开头的单词

转载 作者:行者123 更新时间:2023-12-02 02:30:13 24 4
gpt4 key购买 nike

我知道类似的问题已经被问过好几次了,但我的问题有点不同,我正在寻找一种在 Python 中高效的解决方案。

我有一组单词,其中一些以“*”结尾,另一些则不:

words = set(["apple", "cat*", "dog"])

我必须计算它们在文本中出现的总次数,考虑到星号后面可以出现任何内容(“cat*”表示所有以“cat”开头的单词)。搜索必须不区分大小写。考虑这个例子:

text = "My cat loves apples, but I never ate an apple. My dog loves them less than my CATS".

我希望最终得分为 4(= 猫* x 2 + 狗 + 苹果)。请注意,“cat*”已计算两次,也考虑了复数,而“apple”仅计算了一次,因为不考虑其复数(末尾没有星号)。

我必须对大量文档重复此操作,因此我需要一个快速的解决方案。我不知道正则表达式或flashtext是否可以达到快速解决方案。你能帮我吗?

编辑

我忘了提及我的一些单词包含标点符号,请参见此处,例如:

words = set(["apple", "cat*", "dog", ":)", "I've"])

这似乎在编译正则表达式时会产生额外的问题。您已经提供的代码是否有一些集成可以用于这两个附加单词?

最佳答案

您可以使用正则表达式来完成此操作,从一组单词中创建一个正则表达式,在单词周围放置单词边界,但将尾部单词边界保留在以 * 结尾的单词之外。编译正则表达式应该有助于提高性能:

import re

words = set(["apple", "cat*", "dog"])
text = "My cat loves apples, but I never ate an apple. My dog loves them less than my CATS"

regex = re.compile('|'.join([r'\b' + w[:-1] if w.endswith('*') else r'\b' + w + r'\b' for w in words]), re.I)
matches = regex.findall(text)
print(len(matches))

输出:

4

关于Python - 从字符串列表中快速计算文本中以以下开头的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65140090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com