|
#!/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])
|
'''
|