python-3.x 计算文档中所有关键字(单字和多字)出现的频率

cvxl0en2  于 2023-05-30  发布在  Python
关注(0)|答案(1)|浏览(216)

我想计算一些关键字(单个词或多个词)在文档中出现的频率。我使用regex来实现这个目的。下面是我的实现:

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(额外字符),或者关键字存在但不以列表中存在的匹配关键字的形式存在的任何其他情况,则逻辑将不会检测到该关键字。基本上上述逻辑不够稳健。
2.)有没有其他方法或库可以用来计算列表中关键字的频率?解决方法应比上述逻辑更可靠。
谢谢你!

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

l5tcr1uw

l5tcr1uw1#

您可以使用\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

相关问题