jieba和word2vec初体验

  |   0 评论   |   0 浏览

背景

jieba是一个分词工具,有三种模式,如下:

  • 精确模式:试图将语句最精确的切分,不存在冗余数据,适合做文本分析
  • 全模式:将语句中所有可能是词的词语都切分出来,速度很快,但是存在冗余
  • 数据搜索引擎模式:在精确模式的基础上,对长词再次进行切分

word2vec可以计算两个词之间的相似度,如下:

初体验

jieba安装

sudo apt-get install python3-jieba

jieba使用

# -*- coding: utf-8 -*-
import jieba

seg_str = "好好学习,天天向上。"

print("/".join(jieba.lcut(seg_str)))    # 精简模式,返回一个列表类型的结果
print("/".join(jieba.lcut(seg_str, cut_all=True)))      # 全模式,使用 'cut_all=True' 指定 
print("/".join(jieba.lcut_for_search(seg_str)))     # 搜索引擎模式

gensim安装

word2vec是gensim中的一个模块,这里先安装gensim。

sudo apt-get install cython3 python3-numpy python3-scipy python3-dev
sudo pip3 install gensim

或者

sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple gensim

word2vec使用

先分词,代码如下,来自python初步实现word2vec

import jieba
f1 =open("title.txt")
f2 =open("title_result.txt", 'a')
lines =f1.readlines()  # 读取全部内容
for line in lines:
    line.replace('\t', '').replace('\n', '').replace(' ','')
    seg_list = jieba.cut(line, cut_all=False)
    f2.write(" ".join(seg_list))

f1.close()

再计算 word2vec,代码如下,来自python初步实现word2vec

from gensim.models import word2vec
import logging


# 主程序
logging.basicConfig(format='%(asctime)s:%(levelname)s: %(message)s', level=logging.INFO)
sentences =word2vec.Text8Corpus(u"title_result.txt")  # 加载语料
model =word2vec.Word2Vec(sentences, size=200)  #训练skip-gram模型,默认window=5

print(model)
# 计算两个词的相似度/相关程度
#try:
#    y1 = model.similarity(u"国家", u"国务院")
#except KeyError:
#    y1 = 0
#print u"【国家】和【国务院】的相似度为:", y1
#print"-----\n"
#
# 计算某个词的相关词列表
#y2 = model.most_similar(u"控烟", topn=20)  # 20个最相关的
#print u"和【控烟】最相关的词有:\n"
#for item in y2:
#    print item[0], item[1]
#print"-----\n"

# 寻找对应关系
#print u"书-不错,质量-"
#y3 =model.most_similar([u'质量', u'不错'], [u'书'], topn=3)
#for item in y3:
#    print item[0], item[1]
#print"----\n"

# 寻找不合群的词
#y4 =model.doesnt_match(u"书 书籍 教材 很".split())
#print u"不合群的词:", y4
#print"-----\n"

# 保存模型,以便重用
model.save(u"title.model")
# 对应的加载方式
# model_2 =word2vec.Word2Vec.load("text8.model")

# 以一种c语言可以解析的形式存储词向量
#model.save_word2vec_format(u"title.model.bin", binary=True)
# 对应的加载方式
# model_3 =word2vec.Word2Vec.load_word2vec_format("text8.model.bin",binary=True)

参考