使用Word2Vec计算《庆余年》中人物的相似度

最近,电视剧《庆余年》正在热播,作为一个不喜欢学习但又闲着没事干的人,我肯定是要入坑的,实不相瞒,本人也是花了两天的时间才把这部电视剧给肝完了。
使用Word2Vec计算《庆余年》中人物的相似度_第1张图片
咦,好像跑题了~~。好了,不说废话了,进入正题。今天要做的是用Word2Vec来计算《庆余年》中人物的相似度。

文章目录

    • 准备工作
    • 读入文件
    • jieba分词并且过滤掉标点符号
    • 训练模型
    • 利用模型来预测结果
    • 完整代码
    • 最终结果

准备工作

  • 安装jieba和gensim(这个应该挺简单的)
  • 下载好小说版的庆余年,并将编码改为utf-8
    使用Word2Vec计算《庆余年》中人物的相似度_第2张图片

读入文件

在这里插入图片描述

jieba分词并且过滤掉标点符号

使用Word2Vec计算《庆余年》中人物的相似度_第3张图片

训练模型

在这里插入图片描述

利用模型来预测结果

使用Word2Vec计算《庆余年》中人物的相似度_第4张图片

完整代码

# !/usr/bin/env python
# —*— coding: utf-8 —*—
# @Time:    2020/1/2 11:19
# @Author:  Martin
# @File:    Celebrate_The_Year.py
# @Software:PyCharm

import jieba
from gensim.models import word2vec
from gensim.models import Word2Vec

# 读取文件
with open("../res/庆余年.txt", 'r', encoding='utf-8') as f1:
    text = f1.read()
# jieba分词
jieba_text = jieba.cut(text, cut_all=False)
# 过滤标点符号
string = ' '.join(jieba_text).replace(',', '').replace('。', '').replace('?', '').replace('!', '')\
    .replace('“', '').replace('”', '').replace(':', '').replace('……', '').replace('(', '').replace(')', '')\
    .replace('-', '').replace('《', '').replace('》', '').replace('、', '').replace('’', '').replace('‘', '')\
    .replace('—', '').replace('〓 ', '').replace('…', '')
# 保存文件
with open('../result/庆余年_jieba.txt', 'w', encoding='utf-8') as f2:
    f2.write(string)
# 训练模型
sentences = word2vec.Text8Corpus('../result/庆余年_jieba.txt')
model = Word2Vec(sentences, size=200)
# 保存模型
model.save('../result/庆余年.model')
model.wv.save_word2vec_format('../result/庆余年.model.bin', binary=True)
# 加载模型
model = Word2Vec.load('../result/庆余年.model')
# 预测结果
result1 = model.wv.similarity('范闲', '林婉儿')
print(u"范闲和林婉儿的相似度为:", result1, '\n')
result2 = model.wv.most_similar("范闲", topn=10)
print(u"和范闲最相关的词语有:\n")
for i in result2:
    print(i[0], i[1])
print("\n")
result3 = model.wv.most_similar("林婉儿", topn=10)
print(u"和林婉儿最相关的词语有:\n")
for i in result3:
    print(i[0], i[1])




最终结果

范闲和林婉儿的相似度为: 0.73956585


和范闲最相关的词语有:
他 0.8508376479148865
言冰云 0.7788755893707275
五竹 0.7784703373908997
明青达 0.767447829246521
洪竹 0.7527439594268799
夏栖飞 0.750701367855072
杨万里 0.7454533576965332
海棠 0.7417253851890564
婉儿 0.7405865788459778
林婉儿 0.7395658493041992


和林婉儿最相关的词语有:
婉儿 0.9197872877120972
范思辙 0.9149092435836792
杨万里 0.8807220458984375
明青达 0.8785335421562195
李弘成 0.8778080940246582
思思 0.8675318956375122
阐立 0.8583686351776123
大宝 0.8314799666404724
王妃 0.8262679576873779
叶灵儿 0.8260223865509033


使用Word2Vec计算《庆余年》中人物的相似度_第5张图片
使用Word2Vec计算《庆余年》中人物的相似度_第6张图片

你可能感兴趣的:(NLP)