代码
import jieba # 引入结巴分词, pip install jieba 或 conda install jieba
import re # 引入正则表达式
from gensim.models import Word2Vec # 引入Word2Vec, pip install gensim
# 读取数据,分词处理
f = open("sanguo.txt", 'r', encoding='utf-8') # 读入文本
lines = []
for line in f: # 逐行遍历
temp = jieba.lcut(line) # 对每行进行分词,返回一个数组
words = []
for i in temp:
# 删除标点符号
i = re.sub("[\s+\.\!\/_,$%^*(+\"\'””《》]+|[+——!,。?、~@#¥%……&*():;‘]+", "", i)
if len(i) > 0:
words.append(i)
if len(words) > 0:
lines.append(words)
# print(lines[0:5]) # 预览前5行分词结果
f.close()
# 调用Word2Vec训练
# 参数:size: 词向量维度;window: 上下文的宽度,min_count为考虑计算的单词的最低词频阈值
# vector_size: 词向量维度;window: 上下文的宽度;min_count: 考虑计算的单词的最低词频阈值;
# epochs: 迭代次数;negative: 负采样;sg: 1为skip-gram,0为cbow
model = Word2Vec(lines, vector_size=20, window=2, min_count=3, epochs=7, negative=10, sg=1)
print("孔明的词向量:\n", model.wv.get_vector('孔明')) # 获取词向量,词向量即为词的特征向量,可以用于计算词与词之间的相似度
print("\n和孔明相关性最高的前20个词语:", model.wv.most_similar('孔明', topn=20)) # 获取和孔明相关性最高的前20个词语
# ## 类比关系实验
print('\n类别关系实验')
# 曹操-魏=?-蜀
# positive表示正相关的词,negative表示负相关的词。
# 这里即找与曹操和蜀相似的词,但是不与魏相似的词。
words = model.wv.most_similar(positive=['曹操', '蜀'], negative=['魏']) # 通过类比关系找到与曹操和蜀相似的词
print(words)
运行结果
孔明的词向量:
[-0.2190024 -0.05664985 0.11195563 -0.19027355 0.07659388 -0.39191592
-0.01084622 1.2319072 0.39345586 0.198595 -0.37765422 -0.31499797
0.20020036 -0.78427845 1.0684338 1.0753947 0.32175803 0.14074786
-1.1028086 -0.614546 ]
和孔明相关性最高的前20个词语: [('玄德', 0.9219791889190674), ('先主', 0.9047455191612244), ('周瑜', 0.9041911363601685), ('关公', 0.8818580508232117), ('使人', 0.8791554570198059), ('成都', 0.8787489533424377), ('陆逊', 0.876988410949707), ('维', 0.8749616742134094), ('孙权', 0.8731309771537781), ('魏主', 0.8648725748062134), ('后主', 0.864404022693634), ('懿', 0.8634287118911743), ('孔明入', 0.860363781452179), ('袁术', 0.8577635884284973), ('门吏', 0.8577001094818115), ('司马昭', 0.8573384881019592), ('土人', 0.853476881980896), ('使命', 0.8490279316902161), ('使者', 0.8473643064498901), ('刘璋', 0.8450944423675537)]
类别关系实验
[('袁绍', 0.7159259915351868), ('东吴', 0.65583735704422), ('吕布', 0.641105055809021), ('五路', 0.6314082741737366), ('城中', 0.6300197243690491), ('刘表', 0.629277765750885), ('司马懿', 0.6256495714187622), ('马超', 0.6225470304489136), ('刘玄德', 0.6152568459510803), ('司马懿引', 0.6148400902748108)]
参考:https://www.bilibili.com/video/BV1vS4y1N7mo?vd_source=54b56620958b21f9701740cacea1216b
sanguo.txt 文件:链接:https://pan.baidu.com/s/1OH0qak2dleZJt5G44Sy9hg 密码:8p4d
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏