第2.1题:Python统计日记最重要的词

题目来自:Python 练习册题目2.1: 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。


参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#coding: utf-8
import re, os
from collections import Counter

# 目标文件所在目录
PATH = 'D:'

def getCounter(source):
#输入一个英文的纯文本文件,统计其中的单词出现的个数
with open(source) as f:
data = f.read()
data = data.lower()#字母全部小写
datalist = re.split(r'[\s]+', data)#根据空白字符,将data进行划分
return Counter(datalist)


def run(PATH):
# 切换到目标文件所在目录
os.chdir(PATH)
# 遍历该目录下的txt文件
total_counter = Counter() # 生成Counter()对象
for i in os.listdir(os.getcwd()):
if os.path.splitext(i)[1] == '.txt':#分离扩展名
total_counter += getCounter(i)# 多个Counter()叠加
return total_counter.most_common()#Counter对象转化为list格式

if __name__ == '__main__':
dic = run(PATH)
for i in range(len(dic)):
print('%15s ----> %3s' % (dic[i][0],dic[i][1]))

出现的错误

编码问题

UnicodeDecodeError: ‘gbk’ codec can’t decode byte…
两种解决方法:

  • decode(‘utf-8’)重新编码一下
    1
    2
    3
    fp = open(filename,'rb')

    content = fp.read().decode('utf-8')
  • open方法指定参数encoding=’UTF-8’:
    1
    content= open('filename', mode='rb', encoding='UTF-8')
    但是得注意一下,原文到底是不是UTF-8编码。反正Python编码这里是个大坑,多加小心。

    文件名、目录名或卷标语法不正确

    Path里边的斜杠是 / 不是 \
    PATH = 'E:/Python/pydata-book-master/ch02'

    AttributeError: ‘list’ object has no attribute ‘…

    看看那个object到底是什么,print(type(name)) ,然后再查查其对应的函数。

第2.1题:Python统计日记最重要的词

https://iii.run/archives/6bd14960d59e.html

作者

mmmwhy

发布于

2017-02-17

更新于

2021-05-30

许可协议

评论