使用使用python的信息检索作业(的信息检索作业(1))
统计词频统计词频
任务:
统计文本文件中的单词出现次数统计文本文件中的单词出现次数
给定文本文件;需要查询的单词
给出查询结果;生成词典文件
查阅资料后考虑借助python的***nltk***库(需要额外安装)
最基础版:
import nltk
import os
current_path = os.path.abspath(__file__)
path = os.path.abspath(os.path.dirname(current_path) + os.path.sep + ".") # 确认文件路径
name = input('文件名为(不需扩展名):') + '.txt' # 获取用户输入
Q = input('查询单词为:')
with open(path + '\' + name, 'r') as f: # 打开文件
lst = [] while True: # 读取数据
line = f.readline()
if line == '':
break
else:
res = line.split()
for i in res:
if i[0].isalpha(): # 判断是否为英文单词(避免连字符号导致缺漏)
lst.append(i.lower()) # 将单词小写并存入列表
freq = nltk.FreqDist(lst) # 统计词频
with open('dict.index', 'w') as fp: # 创建INDEX文件
for key, val in freq.items(): # 将数据按格式写入
fp.write(str(key) + ' ' + str(val) + '')
if Q in freq.keys(): # 输出词频数据
print(Q + '的词频为:' + str(freq[Q]))
else:
print(Q + '的词频为:' + str(0) + ' ' + '无此单词')
缺点:没有提取词根,例如friends与friend重复
使用到的nltk类:
nltk.FreqDist()
统计列表中字符串的出现次数
接受一个列表
返回一个字典
可以使用循环输出内容
方法方法 作用作用
B() 返回词典的长度
tabulate() 生成频率分布的表格形式
hapaxes() 返回只出现过一次的词
most_common(num) 返回出现次数最频繁的几个词与其频度
plot(title,cumulative=False) 绘制频率分布图,若cumu为True,则是累积频率分布图
nltk只用来统计词频了,大材小用。。。
统计词频也可以直接创建字典循环获得
dic = {}
for item in lst:
dic[item] = dic.get(item, 0) + 1
作者:陆离少爷
评论0