jieba和word2vec初体验
背景
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)