代码目标:从京东评论中,挖掘:1.产品特征,2.用户对于该特征的情感
例:某电视产品的一条用户评论为:“东西质量挺好的,送货也快,一直支持京东。”
预期提取到的特征是:[质量,送货]
对应的情感是:{质量:挺好, 送货: 快}
从京东爬取的数据,存入到本地文件。
每个文件是一件商品下的所有评论,json格式(raw_comments文件夹中只放了两个文件做实例)
哈工大LTP的python封装pyltp,安装分为两步:
第一步,正常情况下,可以通过pip install pyltp安装,不过经常会报错,挺麻烦的,需要自行排查。
第二步,下载“模型文件”,这个文件很重要,有了它才能使用LTP(代码中会调用这些文件),使用说明&下载地址: http://pyltp.readthedocs.io/zh_CN/develop/api.html
pip install gensim
pip install scikit-learn
特征词提取的问题在于,由于评论很多,又都是口语化表达,同一意义的特征,可能在评论中会用不同词去描述。
比如:价格、价钱、价位, 其实说的都是同一个产品特征
结果中,我们需要把意思相近的词聚到一起,这就需要用到K-means聚类算法。
而K-means是针对向量而言的,这就需要把每个词向量化,并且同义词的向量应该距离相近。Word2vec正好可以满足这一需求。
利用LTP,对每句评论,进行分词和词性标注,提取出每句话的名词,作为备选特征。
利用Word2vec,获取每个特征词的对应向量(须提前训练,见4.2)
现在每个词以向量表示,词义相近的词,向量也相近,因此可以利用K-means把词向量做聚类,预期情况下,词义相近的向量会聚到一类。
聚类后,每类特征词中,选一个代词表整个类,具体选取规则可以调整。
情感词提取比较简单,在找到特征词后,只本文只在特征词相邻距离2以内的范围内,寻找形容词作为情感词
为了训练word2vec模型,首先需要把原始评论转换成英文语料的形式。 其实就是 分词+去标点 例如:“我爱互联网。”-> “我 爱 互联网”
有了上一步生成的corpus.txt,可以把它加载到word2vec中,以此得到训练之后的model文件,(其实就是每个词对应的向量都存在这个文件里了)