词频

词频,是一种用于情报检索与文本挖掘的常用加权技术,用以评估一个词对于一个文件或者一个语料库中的一个领域文件集的重复程度。词频统计为学术研究提供了新的方法和视野。

词频统计

字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。


在现实中,我们通常会背单词,而一些人常常会看一些应试的高频词汇,那么这些高频词汇是哪里来的呢?你知道么?高频词汇通常是通过词频统计的软件,将相应的英语等相关的考试的文章,放入词频统计的软件中,进行词频统计,通过连续几年的统计,得出来现在我们所使用的,市面上见到的高频词汇,如CET4,CET6等等。通过高频词汇,可以知道我们考试中常常考到哪些单词,短语。通过词频统计的软件可以知道有哪些是在考试中不常常见到的,哪些是常常见到,又常考的等等。相信大家会有这个经历吧!!!那么通过我的描述知道高频词汇是怎么来的了吧!所以词频统计还是蛮重要的!!!

词频统计在现实生活中不单单是我们所应用,随着信息化的飞速发展,各个部门以及相关政府也会进行相关的数据词频等相关的统计,词频数据已日益成为世界各国进行各项决策及从事各项活动的重要战略资源与可靠行动依据。词频不单单在英语中所应用在中国的知网,万方等知名网站都会应用到词频统计。通过词频统计政府可以研究相关热点走势等等。在数据统计热点常常被应用到"政府统计"、"电子政务"、"物联网"、"国家战略"、"隐私保护"等等。基于此,政府可以提出如何更好、更快地开发利用大数据资源,加速和提升我国经济社会发展速度及其质量的对策建议。所以,词频统计不单单可以应用到英语等应试的考试中,也可以应用到办公中来,将大量的词频作为数据,进行分析,从而得出结论。因此,关于词频统计的现实应用还是很多的。

下面来介绍运用python如何来统计词频

方法1:

'''
列表 ls 中存储了我国 39 所 985 高校所对应的学校类型,请以这个列表为数据变量,完善 Python 代码,统计输出各类型的数量。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
ls = ["综合", "理工", "综合", "综合", "综合", "综合", "综合", "综合", "综合", "综合",\
     "师范", "理工", "综合", "理工", "综合", "综合", "综合", "综合", "综合","理工",\
     "理工", "理工", "理工", "师范", "综合", "农林", "理工", "综合", "理工", "理工", \
     "理工", "综合", "理工", "综合", "综合", "理工", "农林", "民族", "军事"]
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪
输入格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
该题目没有输入‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬
输出格式‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
按 ls 中默认顺序输出‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬
综合:20
理工:13
师范:2
农林:2
民族:1
军事:1
'''
ls = ["综合", "理工", "综合", "综合", "综合", "综合", "综合", "综合", "综合", "综合",\
     "师范", "理工", "综合", "理工", "综合", "综合", "综合", "综合", "综合","理工",\
     "理工", "理工", "理工", "师范", "综合", "农林", "理工", "综合", "理工", "理工", \
     "理工", "综合", "理工", "综合", "综合", "理工", "农林", "民族", "军事"]
d = {}  # 创建一个空字典
for word in ls:
   # d.get(word,0) 代表字典d中如果取不到对应word,默认值为0,统计词频等同于下面注释部分
   
d[word] = d.get(word, 0) + 1
   
'''词频统计一般方法判断字典的key中是否存在这个词,之前不存在更新为1,存在在原基础上+1'''
   
# if word in d.keys():
   #     d[word] = d[word] + 1
   # else:
   #     d[word] = 1
print("统计的词频率为:")
for k, v in d.items():
   #print(k, v)
   
print(f'{k}:{v}')

image.png


方法2:python内置库Counter

from collections import Counter
count_dic = Counter(ls)
print(count_dic)
for k,v in count_dic.items():
   print(k,v)

image.png

学会了简单的词频统计,接下来咱们来做一个复杂点的小应用。

'''
高考结束后,查询分数时每个考生会有一个总分数和一个全省的排位名次,排位名次是考生选择大学很重要的依据,
那排位名次是怎么计算的呢?
例如一组成绩'小李': 97, '小赵': 82, '小张': 100, '小王': 97, '小明': 82, '小红': 60
小张100分排名第1,小李和小王都是97分并列排名第2,接下来的小赵82分就是排名第3依次类推。

你能设计一个程序根据分数就能得到某位同学的排名吗?
下面就以这组数据为例来计算一下他们的排名

'''
# 因为每个人对应一个分数,这里选择字典这个数据结构来存放每个人的姓名和对应的分数
adic = {'小李': 97, '小赵': 82, '小张': 100, '小王': 97, '小明': 82, '小红': 60}
# 对字典中每个人的分数进行一个从高到底的排序并存入一个新列表blist
blist = sorted(adic.items(), key=lambda x: x[1], reverse=True)
print(f'按分数从高到低排序后:{blist}')

# 统计各分数的个数(相当于统计词频)
score_dict = {}
for b in blist:
   score_dict[b[1]] = score_dict.get(b[1], 0) + 1
print(f'每个分数有多少人一样:{score_dict}')

rank = 1
result = []  # 保存最后结果
start = 0

'''
遍历分数排位字典 把每个分数的个数拿出来
到blist中取出相对应的人数加入对应的排位
'''
for score, count in score_dict.items():
   end = start + count       # 列表切片结束位置
   
for b in blist[start:end]:  # 取出对应个数的人
       
b = list(b)        # 把原来元组的数据结构变为列表有append方法追加排位数据
       
b.append(rank)
       # print(b)
       
result.append(b)
   start = end          # 更新下次blist列表切片的开始位置就是上次结束的位置
   
rank += count        # 下一个分数的排位就是上个分数的排位基础上加上上一个排位的人数
print(f'最后结果为:{result}')
for res in result:
   print(f'{res[0]}得分:{res[1]}分,排名是第{res[2]}名。')


image.png




0 评论 最近

没有评论!