任务描述
根据附件文件对酒店评价数据进行分析,本题使用jieba库中的lcut函数对数据进行分词。
import jieba
test_str = '武汉理工大学是一所世人仰慕的大学'`
result = jieba.lcut(test_str) # 参数是字符串,结果是将字符串切分为词的列表 `
print(result) # ['武汉理工大学', '是', '一所', '世人', '仰慕', '的', '大学']
文件数据每行包括评论属性和评论内容两个数据,其中评论属性中’1‘代表好评,’0‘代表差评。
要求实现以下功能:
文件编码格式为GBK,读取函数示例如下:
with open('comment.csv', 'r', encoding='GBK') as f:
ls=[i.strip().split(',',maxsplit=1) for i in f.readlines()[1:]]
输入n
如果n为’总评‘,分别输出该文件评论总数,好评条数,差评条数,输出格式参照示例一。
如果n为’平均‘,输出该文件中所有评论内容的平均长度(不需要排除字母,标点符号和数字),输出四舍五入后的整数,输出格式参照示例二。
如果n为’好评‘,对文件中所有好评进行词频分析,并输出词频出现最多的前15个词以及出现次数,输出格式参照示例三
如果n为’差评‘,对文件中所有差评进行词频分析,并输出词频出现最多的前15个词以及出现次数,输出格式参照示例四
注:3,4两项功能中统计的词语,要求长度不小于2,不是数字组成,并且不是排除词.
排除词 ex=['不错','比较','可以','感觉','没有', '我们','就是','还是','非常','但是', '不过','有点','一个','一般','下次', '携程','不是','晚上','而且','他们', '什么','不好','时候','知道','这样', '这个','还有','总体','位置','客人', '因为','如果','这里','很多','选择', '居然','不能','实在','不会','这家', '结果','发现','竟然','已经','自己', '问题','不要','地方','只有','第二天', '酒店','房间','虽然']
如果n非以上输入,输出’无数据‘,格式参照示例五 输入输出示例 示例只是输出格式示例,其中数据均与题目无关!
答案如下:
import jieba
import logging
jieba.setLogLevel(logging.INFO) # 提升jieba日志级别,关闭jieba debug日志输出
def output_tf(start,end):
counts={}
k=start
while k < end:
word_ls=jieba.lcut(ls[k][1])
for word in word_ls:
if len(word)<2 or word in ex or word.isdigit():
continue
else:
counts[word]=counts.get(word,0)+1
k+=1
items=list(counts.items())
items.sort(key=lambda x: x[1],reverse=True)
for i in range(15):
word,count=items[i]
print(f'{word}: {count}')
with open('step1/comment.csv', 'r', encoding='GBK') as f:
ls=[i.strip().split(',',maxsplit=1) for i in f.readlines()[1:]]
ex=['不错','比较','可以','感觉','没有', '我们','就是','还是','非常','但是', '不过','有点','一个','一般','下次', '携程','不是','晚上','而且','他们', '什么','不好','时候','知道','这样', '这个','还有','总体','位置','客人', '因为','如果','这里','很多','选择', '居然','不能','实在','不会','这家', '结果','发现','竟然','已经','自己', '问题','不要','地方','只有','第二天', '酒店','房间','虽然']
cmd=input()
good=0
total=len(ls)
sums=0
if cmd in ['总评','平均','好评','差评']:
for i in ls:
if i[0]=='1':
good+=1
if cmd=='总评':
print('总评论:',total)
print('好评:',good)
print('差评:',total-good)
elif cmd=='平均':
for i in ls:
sums+=len(i[1])
print(sums // total)
elif cmd=='好评':
output_tf(0,good)
elif cmd=='差评':
output_tf(good,total)
else:
print('无数据')