基于Word2Vec制作的诗词生成器

1、什么是Word2Vec?

  Word2vec 是 Word Embedding 方式之一,属于 NLP 领域。它是从大量文本预料中以无监督方式学习语义知识的模型,被广泛地应用于自然语言处理中。

  Word2Vec是将词转化为“可计算”“结构化”的向量的过程,是用来生成词向量的工具,而词向量与语言模型有着密切的关系。

2、基于Word2Vec的诗词生成器的结构

  |——GUI诗词生成器.py

  |——w_poem.py

  |——mo.txt

  |——诗词库.txt

GUI诗词生成器.py  :GUI界面,用来获取用户输入关键字和作者名,和获取w_poem.py生成的诗词并转换成标签显示在GUI界面

w_poem.py :两个函数,save_model函数用来保存训练数据,write_poem函数调用Word2Vec生成的训练数据,查找与用户输入的关键字相似度最高的词语,根据要求组装成诗词。

mo.txt :保存训练数据

诗词库.txt :原始数据

3、成品

还没有加别的规则和算法,所以得到的诗词并不优美。

4、代码

GUI诗词生成器.py

from tkinter import *
import w_poem # 创建窗口:实例化一个窗口对象。
class TKK:
def __init__(self):
self.root = Tk()
# 窗口大小
self.root.geometry("350x400+374+182")
# 窗口标题
self.root.title("馒头的诗词生成器")
# 添加关键字标签控件
label = Label(self.root, text=" 关键字 ", font=("宋体", 20))
label.place(x=20,y=0)
# 关键字输入框
self.entry1 = Entry(self.root, font=("宋体", 20), width=10 )
self.entry1.place(x=170,y=0)
#添加作者标签
label = Label(self.root, text=" 作者 ", font=("宋体", 20))
label.place(x=20,y=50)
# 作者输入框
self.entry2 = Entry(self.root, font=("宋体", 20), width=10)
self.entry2.place(x=170,y=50)
# 添加点击按钮
button = Button(self.root, text="诗词生成", width=32,font=("宋体", 16), command=self.getpoem) # command=textt
button.place(x=0,y=90)
# 单选按钮
self.radio = IntVar()
r1 = Radiobutton(self.root, text="五言诗", font=("宋体", 12), fg="orange", variable=self.radio, value=0)
r1.place(x=20,y=130)
r2 = Radiobutton(self.root, text="七言诗", font=("宋体", 12), fg="orange", variable=self.radio, value=1)
r2.place(x=100,y=130)
r3 = Radiobutton(self.root, text="对联", font=("宋体", 12), fg="orange", variable=self.radio, value=2)
r3.place(x=180,y=130)
r5 = Radiobutton(self.root, text="九九归一", font=("宋体", 12), fg="orange", variable=self.radio, value=3)
r5.place(x=250,y=130) # 显示窗口
self.root.mainloop() def getpoem(self):
list_radio = ["五言诗", "七言诗", "对联", "九九归一"]
types = (list_radio[self.radio.get()])
kw = self.entry1.get()
xx = [20 if types=="对联" else 80]
poem_name = self.entry2.get()
te = w_poem.witer_poem(kw ,types,poem_name)
text = Label(text=te,font=("宋体", 12),fg="blue")
text.place(x=xx, y=150) if __name__ == '__main__':
tkk = TKK
tkk() 

w_poem.py

from random import choice
from gensim.models import Word2Vec def save_model():
# 保存训练数据
with open("诗词库.txt", 'r', encoding='utf-8') as f:
words = [list(line.strip()) for line in f]
##window=16滑窗大小, min_count = 60过滤低频字
model = Word2Vec(sentences=words, min_count=60, vector_size=200, window=16,)
model.save("mo.txt") def witer_poem(kw, types, poem_name):
typp = {"五言诗": (4, 5), "七言诗": (4, 7), "九九归一": (9, 9), "对联": (2, 9)}
types = typp[types]
shici = list(kw)
# 调用训练数据
model = Word2Vec.load("mo.txt")
for row in range(types[0]):
for col in range(types[1]):
# 查找相似度最高的100个字-topn
pred = model.predict_output_word(context_words_list=shici, topn=100)
# 去除特殊符号
fu = [",", ".","?","‘","“","-","+","=","。","/",";",";",":","[","]",
"{","}","!","@","#","$","%","^","&","*","(",")","、","《","》"]
number = ["1","2","3","4","5","6","7","8","9","0"," ","!"]
rs = [w[0] for w in pred if w[0] not in shici + fu + number]
char = choice([c for c in rs if c not in kw])
shici.append(char)
# 添加标点符号
shici.append("," if row % 2 == 0 and types[0] % 2 == 0 else "。\n")
# 分段显示
sclen = types[0] * (types[1] + 1) # 计算诗词的长度,然后使用-sclen,来找到诗词标题的位置
# 如果是偶数句,则两句一行,否则一行一句
if types[0] % 2 == 0:
# 排版----->第一行题目 第二行作者 剩下的为诗词
last = "%s" % "".join(shici[:-sclen]) + "\n" + \
"作者:" + poem_name + "\n" + \
"".join(shici[-sclen:])
else:
last = "%s" % "".join(shici[:-sclen]) + "\n" + \
"作者:" + poem_name + "\n" + \
"".join(shici[-sclen:])
return last

基于Word2Vec的诗词生成器的更多相关文章

  1. Silverlight信息加密 - 通过Rfc2898DeriveBytes类使用基于HMACSHA1的伪随机数生成器实现PBKDF2

    原文: http://blog.csdn.net/xuyue1987/article/details/6706600 在上一篇文章当中,介绍到了通过Silverlight获取web.config中的值 ...

  2. 基于word2vec的文档向量模型的应用

    基于word2vec的文档向量模型的应用 word2vec的原理以及训练过程具体细节就不介绍了,推荐两篇文档:<word2vec parameter learning explained> ...

  3. 基于word2vec训练词向量(二)

    转自:http://www.tensorflownews.com/2018/04/19/word2vec2/ 一.基于Hierarchical Softmax的word2vec模型的缺点 上篇说了Hi ...

  4. 基于word2vec训练词向量(一)

    转自:https://blog.csdn.net/fendouaini/article/details/79905328 1.回顾DNN训练词向量 上次说到了通过DNN模型训练词获得词向量,这次来讲解 ...

  5. 结对作业--基于GUI的四则运算生成器

    组员:201421123015 陈麟凤 201421123019 张志杰 201421123020 黄海鸿 coding 地址 :https://coding.net/u/zhang1995/p/wo ...

  6. 结队编程-基于gui的四则运算生成器

    成员:卢少锐 201421123027.刘存201421033023 coding.net地址 1.需求分析:除了实现四则运算的功能外,还添加了计时器功能和语言选择功能 2.程序设计:这次作业是基于上 ...

  7. 文本情感分析(二):基于word2vec、glove和fasttext词向量的文本表示

    上一篇博客用词袋模型,包括词频矩阵.Tf-Idf矩阵.LSA和n-gram构造文本特征,做了Kaggle上的电影评论情感分类题. 这篇博客还是关于文本特征工程的,用词嵌入的方法来构造文本特征,也就是用 ...

  8. 基于PHP的颜色生成器

    <?php  function randomColor()  {      $str = '#';      for($i = 0 ; $i < 6 ; $i++)     {      ...

  9. [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型

    深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展.深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢? ...

  10. word2vec + transE 知识表示模型

    本文主要工作是将文本方法 (word2vec) 和知识库方法 (transE) 相融合作知识表示,即将外部知识库信息(三元组)加入word2vec语言模型,作为正则项指导词向量的学习,将得到的词向量用 ...

随机推荐

  1. 2022-09-24:以下go语言代码输出什么?A:1;B:3;C:13;D:7。 package main import ( “fmt“ “io/ioutil“ “net/

    2022-09-24:以下go语言代码输出什么?A:1:B:3:C:13:D:7. package main import ( "fmt" "io/ioutil" ...

  2. vue-admin-template包下载地址

    https://gitee.com/panjiachen/vue-admin-template/ https://github.com/PanJiaChen/vue-admin-template

  3. 2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 输入:arr = [2,3,4,7,11], k = 5。 输出:9

    2023-05-16:给你一个 严格升序排列 的正整数数组 arr 和一个整数 k . 请你找到这个数组里第 k 个缺失的正整数. 输入:arr = [2,3,4,7,11], k = 5. 输出:9 ...

  4. 2023-05-17:一个正整数如果能被 a 或 b 整除,那么它是神奇的。 给定三个整数 n , a , b ,返回第 n 个神奇的数字。 因为答案可能很大,所以返回答案 对 10^9 + 7 取模

    2023-05-17:一个正整数如果能被 a 或 b 整除,那么它是神奇的. 给定三个整数 n , a , b ,返回第 n 个神奇的数字. 因为答案可能很大,所以返回答案 对 10^9 + 7 取模 ...

  5. 自定义组件模拟v-model

    在项目中常常会遇到一个组件中引入好几个子组件的情况,而引入的子组件和子组件之间又需要有数据交互,如果使用父组件作为桥梁进行数据交互这个也是可以的,只是有些麻烦,so最理想的是子组件和子组件自己去交互, ...

  6. Linux 下 PostgreSQL 源码编译安装

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. PostgreSQL 是一个功能强大的开源对象关系数据库管理系统(ORDBMS),它从伯克利写 ...

  7. App性能测试之iTest

    本文主要介绍下App性能测试工具iTest_V4.7的使用. 功能简介 1.监控Andorid系统(支持手机,平板,电视,车机等智能终端设备)以及应用app的cpu.内存.流量.电池.帧率.页面耗时等 ...

  8. mybatis-plus是什么框架,使用起来简单吗?文末有彩蛋

    mybatis框架我们都熟悉了,是用来操作数据库的属于ORM框架.mybatis-plus是什么框架,看名称和手机似的,带有plus一定是加强版,其官网是:MyBatis-Plus (baomidou ...

  9. 发布:iNeuOS工业互联网操作系统 V5 Preview1 版本(自主可控)

    这半年来一直深耕包头,这个城市比较不错,但是推进项目的难度确实挺大的.与开发产品相比,后者更省心.但是光研发产品,没有项目依托,没办法产生价值.有些大学和研究院确实有好的产品,但是没有市场化能力,再好 ...

  10. CKS 考试题整理 (11)-沙箱运行容器gVisor

    Context 该 cluster使用 containerd作为CRI运行时.containerd的默认运行时处理程序是runc. containerd已准备好支持额外的运行时处理程序runsc (g ...