python基于词向量的古诗生成器

from gensim.models import Word2Vec # 词向量

from random import choice

from os.path import exists

import warnings

warnings.filterwarnings('ignore') # 不打印警告

class CONF:

path = '古诗词.txt'

window = 16 # 滑窗大小

min_count = 60 # 过滤低频字

size = 125 # 词向量维度

topn = 14 # 生成诗词的开放度

model_path = 'word2vec'

class Model:

def __init__(self, window, topn, model):

self.window = window

self.topn = topn

self.model = model # 词向量模型

self.chr_dict = model.wv.index2word # 字典

"""模型初始化"""

@classmethod

def initialize(cls, config):

if exists(config.model_path):

# 模型读取

model = Word2Vec.load(config.model_path)

else:

# 语料读取

with open(config.path, encoding='utf-8') as f:

ls_of_ls_of_c = [list(line.strip()) for line in f]

# 模型训练和保存

model = Word2Vec(ls_of_ls_of_c, config.size,

window=config.window, min_count=config.min_count)

model.save(config.model_path)

return cls(config.window, config.topn, model)

"""古诗词生成"""

def poem_generator(self, title, form):

filter = lambda lst: [t[0] for t in lst if t[0] not in [',', '。']]

# 标题补全

if len(title) < 4:

if not title:

title += choice(self.chr_dict)

for _ in range(4 - len(title)):

similar_chr = self.model.similar_by_word(title[-1], self.topn // 2)

similar_chr = filter(similar_chr)

char = choice([c for c in similar_chr if c not in title])

title += char

# 文本生成

poem = list(title)

for i in range(form[0]):

for _ in range(form[1]):

predict_chr = self.model.predict_output_word(

poem[-self.window:], max(self.topn, len(poem) + 1))

predict_chr = filter(predict_chr)

char = choice([c for c in predict_chr if c not in poem[len(title):]])

poem.append(char)

poem.append(',' if i % 2 == 0 else '。')

length = form[0] * (form[1] + 1)

return '《%s》' % ''.join(poem[:-length]) + '\n' + ''.join(poem[-length:])

def main(config=CONF):

form = {'五言绝句': (4, 5), '七言绝句': (4, 7), '对联': (2, 9)}

m = Model.initialize(config)

while True:

title = input('输入标题:').strip()

try:

poem = m.poem_generator(title, form['五言绝句'])

print('\033[031m%s\033[0m' % poem) # red

poem = m.poem_generator(title, form['七言绝句'])

print('\033[033m%s\033[0m' % poem) # yellow

poem = m.poem_generator(title, form['对联'])

print('\033[036m%s\033[0m' % poem) # purple

print()

except:

pass

if __name__ == '__main__':

main()

PS:源码、word2vec和古诗词.txt文件将在Github上提供下载。

2018年5月1日

标签:poem,title,python,self,生成器,chr,古诗,model,config

来源: https://blog.csdn.net/weixin_43907422/article/details/89738097

python编写程序输出诗句_python基于词向量的古诗生成器相关推荐

  1. python编写程序输出诗句_Python一日一练02----诗词生成器

    要求 编写一段程序,可以自动生成小诗. 格式如下 源码 import random import sys articles = ["the", "a", &qu ...

  2. python编写程序输出诗句_Python学习笔记(一)-- print语句

    print语句可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print 'hello, world' 注意: 1.当我们在Python交 ...

  3. python编写程序输出诗句_Python文本处理简介:44行代码编写一个简单的隐藏诗生成器,python,入门,藏头诗...

    想必最近大家家庭群里最近都会看到这么一张图: 一惊,这什么玩意儿???后来一搜会发现里面不同的诗句来自于不同的古诗,嘛,这不是很好玩的一件事情吗?这次我们使用Github的唐诗宋词dataset:ht ...

  4. python基于词向量的古诗生成器

    python基于词向量的古诗生成器 from gensim.models import Word2Vec # 词向量 from random import choice from os.path im ...

  5. python编写程序输出诗句_闲来无事能干嘛 用Python来玩诗歌接龙

    闲来无事能干嘛 用Python来玩诗歌接龙 作为一个懂Python爬虫的运维狗,闲来无事的时候总要找点乐子(睡觉不香么),哈哈,就是这么的敬业(其实是无聊).今天网盾科技给大家讲讲怎么用Python爬 ...

  6. python编写程序输出诗句_RPA交流——使用 python 写出诗一样的代码 (一)

    原标题:RPA交流--使用 python 写出诗一样的代码 (一) 下载RPA请访问:www.i-search.com.cn 学习RPA请访问:https://support.i-search.com ...

  7. python编写程序输出诗句_编程小白是这样用python把唐诗玩坏的

    最近对编程比较感兴趣,于是请教程序猿朋友们,最后都推荐我学习Python.翻看教程几天后,碰巧遇到有朋友在玩唐诗乱搭的游戏,于是我就写了一段python程序(对于能否叫程序我一直很怀疑),挑了了很多的 ...

  8. python编写程序接收字符串_Python字符串操作

    a = 'Hello' b = 'Python' 一.字符串运算符 1.字符串连接(+) '字符串1' + '字符串2' >>>print(a + b) HelloPython 2. ...

  9. 怎么用python编写程序计算标准差_python 标准差计算的实现(std)

    numpy.std() 求标准差的时候默认是除以 n 的,即是有偏的,np.std无偏样本标准差方式为加入参数 ddof = 1: pandas.std() 默认是除以n-1 的,即是无偏的,如果想和 ...

  10. python编写程序输出斐波那契数列的前20项_C语言 写程序,输出斐波那契数列的前20项,每行输出4个数...

    展开全部 方法一for循环 publicclassFeiBoMethod{ 定义三个变量方法 publicstaticvoidmain(String[]args){ inta=1,b=1,c=0: S ...

最新文章

  1. TensorFlow人工智能引擎入门教程之十 最强网络 RSNN深度残差网络 平均准确率96-99%
  2. 计算机网络 物理层链路层
  3. OVS DPDK vhost-user详解(十一)
  4. iOS之深入解析App启动dyld加载流程的底层原理
  5. php 正则表达式验证金额,php 正则表达式验证数字
  6. html字符实体标签语法,HTML字符实体与文本格式化标签
  7. 转 docker 部署 kafka
  8. echarts画中国地图!
  9. Python学习 资料[转]
  10. java7 新特性官方介绍_java7 新特性 总结版
  11. ws2812 c语言程序,STC15单片机驱动WS2812B七彩LED(汇编混合编程)
  12. WPS简历模板的图标怎么修改_简历无话可说怎么办?复试、调剂简历模板分享!...
  13. meta分析 2. 固定效应和随机效应
  14. 全国计算机二级重难点,计算机二级office重难点.doc
  15. 伊利诺伊香槟大学计算机专业排名,伊利诺伊大学香槟分校专业排名一览及最强专业推荐(QS世界大学排名)...
  16. xbox360 IX1.60 引导盘制作
  17. Elasticsearch 7.10 之 Indexing pressure
  18. 常用荧光染料的激发和发射波长
  19. 每日新闻:今日头条正式发布小程序;甲骨文云服务营收未达预期
  20. GITHUB实用有趣工具推荐

热门文章

  1. 新仙剑奇侠传完美攻略
  2. 问:舵机可以作为智能小车的驱动轮吗
  3. 41、财务总账科目余额表,三栏式总账,三栏式明细账 查询条件科目增加多选查询
  4. C# chart实时曲线
  5. 将论文奇数页与偶数页页眉添加不同的下划线
  6. eclipse的复活
  7. 实操:将C盘用户配置文件移动到非系统盘(windows10系统)
  8. win10怎么更改c盘用户计算机名,详解win10系统更改c盘用户名文件夹名称的设置技巧...
  9. 蜡笔小新模拟器汉化版_蜡笔小新历险记PC电脑版-蜡笔小新历险记电脑版下载v1.12.20 官方最新版-西西软件下载...
  10. 丽江,清晨的小巷在哭泣