from glob import glob
pattern = "D:\\report\\shakeall\\*.txt"
filelist = glob(pattern)
def countwords(fp):
with open(fp) as fh:
return len(fh.read().split())
print "There are" ,sum(map(countwords, filelist)), "words in the files. " "From directory",pattern
import os
import re
import string
uniquewords = set([])
for root, dirs, files in os.walk("D:\\report\\shakeall"):
for name in files:
[uniquewords.add(x) for x in open(os.path.join(root,name)).read().split()]
wordlist = list(uniquewords)
此代码计算唯一字词和总字数的总数。然而,问题是,如果我写len(uniquewords),它会显示不合理的数字,因为它识别出例如'shake''shake!' “摇晃”,“摇晃?”作为不同的独特单词。 我试图通过制作列表并修改它来删除独特词的标点符号,一切都失败了。有人能帮助我吗?
答案 0 :(得分:1)
\w+
模式的正则表达式匹配单词并排除标点符号。collections.Counter
此代码的示例数据附加在最后:
import re
from collections import Counter
pattern = re.compile(r'\w+')
with open('data') as f:
text = f.read()
print Counter(pattern.findall(text))
给出:
Counter(
{'in': 4, 'the': 4, 'string': 3, 'matches': 3, 'are': 2,
'pattern': 2, '2': 2, 'and': 1, 'all': 1, 'finditer': 1,
'iterator': 1, 'over': 1, 'an': 1, 'instances': 1,
'scanned': 1, 'right': 1, 'RE': 1, 'another': 1, 'touch': 1,
'New': 1, 'to': 1, 'returned': 1, 'Return': 1, 'for': 1,
'0': 1, 're': 1, 'version': 1, 'Empty': 1, 'is': 1,
'match': 1, 'non': 1, 'unless': 1, 'overlapping': 1, 'they': 1, 'included': 1, 'The': 1, 'beginning': 1, 'MatchObject': 1,
'result': 1, 'of': 1, 'yielding': 1, 'flags': 1, 'found': 1,
'order': 1, 'left': 1})
数据:
re.finditer(pattern,string,flags = 0)返回一个迭代器让步 RE的所有非重叠匹配上的MatchObject实例 字符串中的模式。字符串从左向右扫描,并匹配 按找到的顺序返回。空匹配包含在 结果,除非他们触及另一场比赛的开始。新的 版本2.2。