我想计算一些关键字(单字或多字)在文档中出现的频率.为此,我使用正则表达式.下面是我的实现:

def calculate_keyword_frequency(keyword_list, text):
    frequency = {}
    for keyword in keyword_list:
        frequency[keyword] = len(re.findall(keyword, text))
    return frequency

keyword_list = ["your work", "bodily injury"]
text = "your work needs to be finished. before you leave, your work should be done!"

result = calculate_keyword_frequency(keyword_list, text)

# Print the frequency for each keyword
for keyword, frequency in result.items():
    print(f"{keyword} = {frequency}")

这将使用re.findall()函数来查找文本中出现的所有关键字及其频率.

我对上述方法有两个问题:

1.)该逻辑将返回列表中出现的所有关键字的频率.但是,如果关键字存在于文本中,但以不同的方式,即your workyour, work而不是your work(额外字符),或者存在关键字但不是以列表中存在的匹配关键字的形式存在的任何其他情况,则逻辑将不检测该关键字.Basically the above logic is not robust enough.

2.)有没有其他方法或库可以用来计算关键字在列表中的频率?解决方法应该比上面的逻辑更可靠.

谢谢!

EDIT1::我知道我可以编写一个正则表达式模式来解决第一个问题.但这带来了另一个问题,keyword_list个关键词可以有数百个.为所有这些对象编写正则表达式模式是不可行的!

推荐答案

您可以将每个关键字中的空格替换为\W+的正则表达式模式,这样它将匹配一个或多个非单词字符,而不仅仅是一个空格:

import re

def calculate_keyword_frequency(keyword_list, text):
    frequency = {}
    for keyword in keyword_list:
        frequency[keyword] = len(re.findall(keyword, text))
    return frequency

keyword_list = ["your work", "bodily injury"]
patterns = {r'\W+'.join(k.split()): k for k in keyword_list}
text = "your  work needs to be finished. before you leave, your, work should be done!"

result = calculate_keyword_frequency(patterns, text)

# Print the frequency for each keyword
for keyword, frequency in result.items():
    print(f"{patterns[keyword]} = {frequency}")

这会产生以下结果:

your work = 2
bodily injury = 0

演示:https://replit.com/@blhsing/RepentantCheerfulShoutcast

Python-3.x相关问答推荐

根据其他数据框架的列顺序从数据框架中进行 Select

如何从枚举中获取某个值?

tkinter/python3.9 中的 Entry 子类和用户输入重复的问题

Django中自动设置/更新字段

Django在POST到外部URL时如何进行CSRF保护? 更新

公开数据中的卫星图像网页抓取优化

如何将日期时间索引写入日期类型的表?

在 groupby 之后,Pandas 在特定类别中获得最常见和最后的值

如何沿单列获取嵌套列表中的唯一值?

使用 GEKKO 使用代码解决最佳时间控制问题时出现 IndexError

如何知道Pandas 列中的每个后续值是否都大于前面的值? Python相关

以编程方式映射 uniprot ID 时如何解决 400 客户端错误?

如何融化具有自定义名称的Pandas

例外:使用 Pyinstaller 时找不到 PyQt5 插件目录,尽管 PyQt5 甚至没有被使用

如何使用pandas python获取数据框中每列的最大长度

pythondecorator中的变量范围

Python在OrderedDict中 Select 第i个元素

是否可以在每个路由的基础上限制 Flask POST 数据大小?

带有自定义标头的 urllib.urlretrieve

如何使用 python http.server 运行 CGI hello world