gpt4 book ai didi

python - 使用python regex计算文档中单词的频率

转载 作者:行者123 更新时间:2023-12-04 20:22:04 24 4
gpt4 key购买 nike

创建了一个读取文件的python模块,删除停用词并输出一个python字典,其中包含单词及其频率(它在文档中出现的次数)。

def run():
filelist = os.listdir(path)
regex = re.compile(r'.*<div class="body">(.*?)</div>.*', re.DOTALL | re.IGNORECASE)
reg1 = re.compile(r'<\/?[ap][^>]*>', re.DOTALL | re.IGNORECASE)
quotereg = re.compile(r'&quot;', re.DOTALL | re.IGNORECASE)
puncreg = re.compile(r'[^\w]', re.DOTALL | re.IGNORECASE)
f = open(stopwordfile, 'r')
stopwords = f.read().lower().split()
totalfreq = {}

filewords = {}
htmlfiles = []
for file in filelist:
if file[-5:] == '.html':
htmlfiles.append(file)

for file in htmlfiles:
f = open(path + file, 'r')
words = f.read().lower()
words = regex.findall(words)[0]
words = quotereg.sub(' ', words)
words = reg1.sub(' ', words)
words = puncreg.sub(' ', words)
words = words.strip().split()

for w in stopwords:
while w in words:
words.remove(w)

freq = {}
for w in words:
if w in freq:
totalfreq[w] = totalfreq[w] + 1
freq[w] = freq[w] + 1
else:
totalfreq[w] = 1
freq[w] = 1
filewords[file] = freq


print totalfreq
这将打印该文件中的所有“不间断”单词以及它们在文件中出现的频率:输出如下所示:

{{'saturday': 1, 'irish': 1, 'family': 1, 'give': 1, 'year': 2, 'weekend': 1, 'steve': 1, 'guests': 1, 'questions': 1, 'in': 2, 'effort': 1, 'partner': 1, 'extinction': 1, 'dress': 1, 'children': 4, 'utans': 1, '27': 1, 'raise': 1, 'closet': 1, 'haired': 2, 'make': 1, 'humphreys': 1, 'relatives': 1, 'zoo': 5, 'endangered': 1, 'sunday': 1, 'special': 1, 'answer': 1, 'public': 1, 'awareness': 1, 'planned': 1, 'activities': 1, 'rhiona': 1, 'orangutans': 4, 'plans': 1, 'leonie': 1, 'orang': 1, 'yesterday': 2, 'free': 2, 'hand': 1, 'wild': 1, 'independent': 1, 'part': 1, 'preparing': 1, 'revealed': 1, 'day': 1, 'man': 1, 'picture': 1, 'keane': 1, 'animals': 1, '14': 1, 'kevin': 1, '16': 1, '32': 1, 'age': 1, 'sibu': 1, 'dublin': 2, 'keepers': 1, 'face': 1, 'mujur': 1, 'red': 2, 'orangutan': 1, 'species': 1, 'entry': 1, 'efforts': 1, 'shows': 1, '11am': 1, 'influx': 1, '3pm': 1}

{'newest': 1, 'birth': 2, 'orang': 1, 'month': 1, 'steve': 1, 'questions': 1, 'utans': 1, 'children': 4, 'staff': 1, 'limelight': 1, '27': 1, 'based': 1, 'concerned': 1, 'sunday': 1, '3pm': 1, 'finally': 1, '4': 1, 'maeve': 1, 'awareness': 1, 'gave': 1, 'activities': 1, 'giraffe': 1, 'facebook': 1, 'preparing': 1, 'background': 1, 'nurturing': 1, 'day': 1, 'debut': 1, 'rothschild': 1, 'keepers': 1, 'email': 1, 'steps': 1, '11am': 1, 'page': 1, 'picture': 1, 'born': 1, 'result': 1, 'year': 2, 'saturday': 1, 'special': 1, 'closet': 1, 'haired': 2, 'section': 1, 'bennet': 2, 'mum': 3, 'mujur': 1, 'conditions': 1, 'public': 1, 'red': 2, 'shows': 1, 'orangutans': 4, 'free': 2, 'keeper': 1, 'november': 1, 'care': 1, 'sending': 1, 'great': 1, 'origins': 1, '32': 1, 'invited': 1, 'dublin': 2, 'planned': 1, 'orangutan': 1, 'efforts': 1, 'influx': 1, 'named': 1, 'family': 1, 'delighted': 1, 'weather': 1, 'guests': 1, 'extinction': 1, 'post': 1, 'impressed': 1, 'raise': 1, 'revealed': 1, 'remained': 1, 'humphreys': 1, 'confident': 1, 'calf': 3, 'entrance': 1, 'shane': 1, 'part': 1, 'helen': 1, 'attentive': 1, 'effort': 1, 'case': 1, 'made': 2, 'animals': 1, '14': 1, '16': 1, 'ms': 1, 'wild': 1, 'savanna': 1, 'irish': 1, 'give': 1, 'resident': 1, 'suggestions': 1, 'slip': 1, 'in': 2, 'partner': 1, 'dress': 1, 'species': 1, 'kevin': 1, 'rhiona': 1, 'make': 1, 'zoo': 3, 'endangered': 1, 'relatives': 1, 'answer': 1, 'poor': 1, 'independent': 1, 'plans': 1, 'leonie': 1, 'time': 1, 'yesterday': 1, 'hand': 1, 'hickey': 1, 'weekend': 1, 'man': 1, 'sibu': 1, 'age': 1, 'steady': 2, 'face': 1, 'confinement': 1, 'african': 2, 'entry': 1, 'keane': 1, 'clarke': 2, 'left': 1}


但是我需要将两个文件或大量文件中的两个总数相加,以计算所有文件中单词的总数,例如“zoo”。第一个文件动物园=5 第二个文件动物园=3 总计=8。
我似乎无法弄清楚如何计算多个文件的单词,而不是一次只计算一个。
有任何想法吗?!

最佳答案

'<\/?[ap][^>]*>' 中的反斜杠没用,因为 '/'不是特殊字符
'[^\w]''\W'顺便'[^\w]+'将比一个 '[^\w]' 更有效

re.DOTALL r'<\/?[ap][^>]*>' 没用因为这个 RE 中没有点

如果你这样做 words = f.read().lower()要降低字母,您不需要 re.IGNORECASE

用于替换的 RE 可以放在一个 RE 中:reg123 = re.compile(r'(</?[ap][^>]*>|&quot;|\W+)')
文件 不是文件名的好名称,它会覆盖现有内置函数的名称

替换代码行以获得 htm 文件 通过生成器表达式更好

我不明白为什么 words = regex.findall(words)[0] 中的“[0]”

您还可以将 RE 中用于替换的停用词的单词分组为 ' ' :

stopwords = '|'.join(f.read().lower().split())

被纳入 RE 以进行替代
filewords[file] = freq 的缩进不好

.

我建议您进行以下改进;我没有测试它,因为我不是要处理的文件。它当然不完美。要求不清楚的点。
def run():

from collection import difaultdict

with open(stopwordfile, 'r') as f:
stopwords = '|'.join(f.read().lower().split())

regex = re.compile(r'.*<div class="body">(.*?)</div>.*', re.DOTALL)
reg123 = re.compile(r'(</?[ap][^>]*>|&quot;|\W+|'+stopwords+')')

totalfreq = defaultdict(int)
filewords = {}

for filename in (fn for fn in os.listdir(path) if fn[-5:] == '.html'):
with open(path + filename, 'r') as f:
ch = regex.findall(f.read().lower())[0]
ch = reg123.sub(' ', ch)
words = ch.strip().split()

freq = defaultdict(int)
for w in words:
totalfreq[w] += 1
freq[w] += 1
filewords[filename] = freq

print totalfreq

我不太明白你的问题。请给出精度

关于python - 使用python regex计算文档中单词的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5405551/

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