wangzhibo
2023-07-25 2ccac51ebb1d41c4dd6d2e07f6eb34f75a03210c
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
 
#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import sys
import re
 
'''
统计文章中,汉字的字频
 
输入可以是任意文本;
输出所有的字的清单,和每个汉字出现的次数。
 
一般用于检查,清单是否全部是唯一的汉字,即最终输出的全部汉字的词频/出现次数都是1.
'''
 
 
base_txt_file = sys.argv[1]
 
with open(base_txt_file, 'r', encoding='utf-8-sig') as f:
    lines = f.readlines()
    contents = []           # 保存每条新闻的内容
    i = 0
    words = []              # 用来保存所有的汉字
    strs = ''               # 用于保存保留下的所有汉字
    # 将文本文件中的内容进行分割,制表符前面的内容当作标题,制表符后面的符号当做内容,将这两部分内容放到列表中
    for line in lines:                  # 我分析文本内容得知,每条新闻是按行存放的,所以使用python的读取行的函数就可以分离出每条新闻
        content = line
        contents.append(content)
        # 将文本内容只保留汉字部分,去除标点符号以及空格
        content = re.sub(r'\d', "", content)
        content = re.sub(r'\s', "", content)
        content = re.sub(
            pattern='[,,\-<>'《》・|~()>&\*-+"%{}=-、。.—!!??"::;;\/\.【】()\']', repl='', string=content)
        strs = strs + content
        # print(content)
        words.extend(list(content))
 
# 统计每一个汉字的出现次数,使用字典的形式进行统计
result = {}
for word in words:
    res = result.get(word, 0)
    if res == 0:
        result[word] = 1
    else:
        result[word] = result[word] + 1
print(len(words))
print(len(result))
result = sorted(result.items(),  key=lambda kv: (kv[1], kv[0]), reverse=True)
result = dict(result)
print(result)
'''
result = sorted(result.items(),  key=lambda kv: (kv[1], kv[0]), reverse=True)
result = dict(result)
print("使用字典的形式进行统计的词数结果:")
new_a = {}
for i, (k, v) in enumerate(result.items()):
    new_a[k] = v
    if i == 19:
        print(new_a)
        break
new_a.clear()
 
# 统计每一个汉字的出现次数,使用字符串的内置函数
# print(strs)
result2 = []
# print('使用字符串的内置函数统计的所有的汉字数为:', end="  ")
# print(len(strs))
for w in set(strs):
    num = strs.count(w)
    tem = [w, num]
    result2.append(tem)
result2 = sorted(result2, key=lambda x: x[1], reverse=True)
 
# 统计词频,使用上一步得到二维列表
fre = []
for item in result2:
    item[1] = item[1] / len(words)
    fre.append(item)
print('使用二维列表得到的字频结果:')
print(fre[:10])
 
# 统计词频累计,使用上一问得到二维列表
cum = []
sum = 0
for item in fre:
    sum = sum + item[1]
    item[1] = sum
    cum.append(item)
print('使用二维列表得到的累计字频结果:')
print(cum[:10])
'''