上一篇数据分析1.1中通过LDA主题模型分析得到的结论中,只能大致得出客户对该手机反映的一些情况,完全不能深入的了解该手机的各个属性方面的问题,当然这也不是博主的最终目的,但是今天这篇博客能够更加深入的研究该手机的各个方面,并对属性值打分.
1.如何获取手机的属性值?
(1)第一步,首先采用jieba.analyse.extract_tags(s,allowPOS=(‘n’,‘vn’,‘v’,))筛选出评论文本中的名词,动名词,动词这些可能为手机属性的词.
(2)第二步,因为一般用户评论手机的好坏,都是在手机的某些属性方面,所以可以采用统计每个词的词频,设定合适的阈值,去除一些不相关的词语(噪音).
(3)第三步,将前两步筛选出的词作为候选属性词,选取候选属性词词频最高的几个词作为中心种子,然后采用互信息的方式进一步的对候选属性词进行筛选(这里说一下互信息的方式,就是说在某一句评论中,候选属性词与中心种子中的词互信息大,或者说,中心种子中的词在一句评论中出现的情况下,某一个候选属性词也出现的概率大,那么就说明该词极有可能是属性词)
(4)第四步,通过上面三步筛选后,得出来的结果中基本上大部分词都是所要的属性词了,但其中还是会含有少量的噪音,此时数据量比较少,可以手动去除噪音,或者是自己写一个常见词但不是属性词的文本文档,每次只需要去调用就好,就省去了手动去除环节,到此时所有属性词基本上都筛选出来了.
代码如下:(我是对所有好评评论进行该操作)
'''
通过jiaba.analyse.extract_tags(s,allowPOS=('vn','n','v',))进行第一步属性筛选,
然后统计词频,进行第二步筛选,筛选出词频大于5的词作为候选属性词
'''
good_inputfile = '评论文档地址.csv'
date1 = pda.read_csv(good_inputfile, encoding='utf-8',header=None)
mycut = lambda s:' '.join(jieba.analyse.extract_tags(s,allowPOS=('vn','n','v',)))
data = date1[1].apply(mycut)
m = {}
lis = []
for item in data:
# item = list(item)
item = item.split(' ')
for i in item:
if i not in m.keys():
m[i] = 1
else :
m[i] = m[i]+1 #统计词频
for i in range(0,len(m.values())):
if list(m.values())[i]>10: #筛选出词频大于5的词作为候选词
lis.append(list(m.keys())[i])
print(lis)
test = ['像素','拍照','电池','屏幕','音质','性价比','性能','外观'] #选取好评中心种子
'''
进行第三步筛选,采用互信息进行筛选,通过计算一二步筛选出的候选属性词与
中心种子的相关程度,进一步过滤掉噪声,这一步完成后基本将属性词筛选的差不多了,
其准确度也还行.
得出筛选的结果进行方法一或方法二进行抽取<属性词,形容词,副词>词对
'''
date2 = pda.read_table('不是属性词表.txt',header=None)
#print(list(date2[0]))
li