我试图找到文件夹中多个文件中单词的频率,如果在文件中找到,我需要将单词的计数增加1。 例如:如果在文件1中读取必须将“井”的计数增加1而不是2,则“一切都很好” 如果在文件2中读取“她不好”,则“井”的计数将变为2
我需要增加计数器而不包括重复项,但我的程序没有考虑到这一点,所以请帮助!!
import os
import re
import sys
sys.stdout=open('f1.txt','w')
from collections import Counter
from glob import glob
def removegarbage(text):
text=re.sub(r'\W+',' ',text)
text=text.lower()
sorted(text)
return text
def removeduplicates(l):
return list(set(l))
folderpath='d:/articles-words'
counter=Counter()
filepaths = glob(os.path.join(folderpath,'*.txt'))
num_files = len(filepaths)
# Add all words to counter
for filepath in filepaths:
with open(filepath,'r') as filehandle:
lines = filehandle.read()
words = removegarbage(lines).split()
cwords=removeduplicates(words)
counter.update(cwords)
# Display most common
for word, count in counter.most_common():
# Break out if the frequency is less than 0.1 * the number of files
if count < 0.1*num_files:
break
print('{} {}'.format(word,count))
我已经尝试过排序并删除重复的技术,但它仍然不起作用!
答案 0 :(得分:0)
如果我理解你的问题,基本上你想知道每个单词,它在所有文件中出现的次数(无论同一个单词在同一个文件中是否多次出现)。 为了做到这一点,我做了以下模式,模拟了许多文件的列表(我只是关心过程,而不是文件本身,所以你可能必须设法更改实际列表的“文件”你想要处理。
d = {}
i = 0
for f in files:
i += 1
for line in f:
words = line.split()
for word in words:
if word not in d:
d[word] = {}
d[word][i] = 1
d2 = {}
for word,occurences in d.iteritems():
d2[word] = sum( d[word].values() )
结果将为您提供以下内容: {'结束':1,'那':1,'是':1,'好':2,'她':1,'不':1,“所有”:1}
答案 1 :(得分:0)
我会采用一种截然不同的方式,但其关键在于使用一套。
frequency = Counter()
for line in open("file", "r"):
for word in set(line):
frequency[word] += 1
我不确定是否最好使用.readline()
或诸如此类的东西;我通常使用for循环,因为它们非常简单。
编辑:我看到你做错了什么。您使用.read()
,(对其执行removegarbage()
)然后.split()
结果阅读文件的全部内容。那会给你一个单一的列表,摧毁新行:
>>> "Hello world!\nFoo bar!".split()
['Hello', 'world!', 'Foo', 'bar!']