• 尝试了jieba包来对评论进行分词
  • 再使用simgen包的word2vec函数获取词向量
  • 根据词向量和词的相似性,检索同义词
In [1]:
# 将评论从数据库读入
from sqlalchemy import create_engine
engine = create_engine('oracle://user:[email protected]_data')
import pandas as pd
df = pd.read_sql_query(str_sql, engine)
In [25]:
df.shape
Out[25]:
(16710481, 8)
In [7]:
df.head()
Out[7]:
cmmnt_date ordr_id end_user_id prod_name prod_id rate good_cntnt
0 2014-08-10 4.023944e+11 5817243 HSTYLE/韩都衣舍 米妮哈鲁2014夏装新款女童装韩版卡通图案百褶短裙ZD3033②玫红... 22888729 5 性价比高,小朋友喜欢
1 2014-07-09 2.451833e+08 12550004 HSTYLE/韩都衣舍 米妮哈鲁2014夏装新款女童装韩版卡通图案百褶短裙ZD3033②玫红... 22888729 5 衣服每件都好,服务更好,关注你们,下次再来!
2 2014-09-22 8.691191e+11 123415597 Maihu/麦狐 日本进口 inomata 塑料制冰格 制冰器 制冰模具 冰格 制冰盒带盖冰... 17588803 5 对商品非常满意
3 2014-10-21 1.269396e+12 139399779 韩衣兜 2014秋冬新款韩版女装时尚修身花朵拼接棒球服开衫短外套 X8833深蓝色L 33678751 5 宝贝收到,太喜欢了大小刚好很合身,做工精细没有瑕疵,以后有需要还会再来的!
4 2014-11-24 1.348798e+12 130075686 贝丝洁BEISIJIE 精致花边毛巾34*76 5845210蓝色34*76cm 17591645 5 不错,便宜
  • 使用结巴分词
In [ ]:
import jieba
def cutword(x):
    if isinstance(x, str): x = x.decode('utf8') # 解码为unicode 
    x = unicode(x) #将数字变字符
    seg = jieba.cut(x)
    return ' '.join(seg)
# cutword(string)
  • 处理中文时的注意项,需要将外部输入的中文字符解码为unicode
  • 再输出到外部文档时,需再从unicode编码
  • 参考文档:http://python.jobbole.com/80831/
In [ ]:
x = '中国' #外部输入
y = x.decode('utf8') #解码为unicode  在python内部处理
z = y.encode('utf8') #编码为str 再输出 
  • 将所有评论进行分词
In [12]:
df['seg_word'] = df.good_cntnt.map(cutword)
df.head()
Out[12]:
cmmnt_date ordr_id end_user_id prod_name prod_id rate good_cntnt seg_word
0 2014-08-10 4.023944e+11 5817243 HSTYLE/韩都衣舍 米妮哈鲁2014夏装新款女童装韩版卡通图案百褶短裙ZD3033②玫红... 22888729 5 性价比高,小朋友喜欢 性价比 高 , 小朋友 喜欢
1 2014-07-09 2.451833e+08 12550004 HSTYLE/韩都衣舍 米妮哈鲁2014夏装新款女童装韩版卡通图案百褶短裙ZD3033②玫红... 22888729 5 衣服每件都好,服务更好,关注你们,下次再来! 衣服 每件 都 好 , 服务 更好 , 关注 你们 , 下次 再 来 !
2 2014-09-22 8.691191e+11 123415597 Maihu/麦狐 日本进口 inomata 塑料制冰格 制冰器 制冰模具 冰格 制冰盒带盖冰... 17588803 5 对商品非常满意 对 商品 非常 满意
3 2014-10-21 1.269396e+12 139399779 韩衣兜 2014秋冬新款韩版女装时尚修身花朵拼接棒球服开衫短外套 X8833深蓝色L 33678751 5 宝贝收到,太喜欢了大小刚好很合身,做工精细没有瑕疵,以后有需要还会再来的! 宝贝 收到 , 太 喜欢 了 大小 刚好 很 合身 , 做工 精细 没有 瑕疵 , 以后 有...
4 2014-11-24 1.348798e+12 130075686 贝丝洁BEISIJIE 精致花边毛巾34*76 5845210蓝色34*76cm 17591645 5 不错,便宜 不错 , 便宜
  • 将分词后的评论变成列表
  • 使用gensim包中的word2vec进行训练,获得词向量
In [13]:
txt = df['seg_word'].values
txtlist = []
for x in txt:
    txtlist.append(x.split())

import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s',level=logging.INFO)

num_features = 300
min_word_count = 10
num_workers = 4
context = 10
downsampling = 1e-3

from gensim.models import word2vec
print "traing model..."
model = word2vec.Word2Vec(txtlist, workers = num_workers, size= num_features, min_count=min_word_count, window = context, sample = downsampling)
model.init_sims(replace=True)
model_name = 'allcomword2vec'
model.save(model_name)
traing model...
  • 尝试检索某个词的同义词
In [26]:
for word, word_simi in model.most_similar(u'丰满', topn=20):
    print word, word_simi
胸部 0.728694856167
增大 0.708100199699
肉肉 0.694790780544
变大 0.641858637333
坚挺 0.640198707581
下垂 0.606641292572
挺起来 0.606020510197
升杯 0.602514088154
胸型 0.595118582249
罩杯 0.593821108341
外扩 0.593108892441
松弛 0.578672170639
紧致 0.572979569435
紧实 0.571806252003
圣荷 0.568730592728
越变 0.562036752701
撑满 0.558072209358
挺拔 0.556601524353
肉感 0.556496024132
胸 0.552304565907