宋无涯出同
唐暗水才阳
楼粒甫关尽
头心雨上人
这五言绝句写的还可以吧,哈哈,献丑了
今天咱们的主题是教写诗,不过不是我们写,而是教计算机写,想写几首写几首,先来看一下效果
本次利用python来实现自动写诗,需要安装“jieba”库,直接‘pip install jieba’就可以啦
第一步. 下载训练文本
这一步大家都会,从网上下载古诗素材即可,我下载了一个文本文件,将其命名为“poem.txt”,其内容如图所示
第二步. 读取文本数据
poem=open("/home/fantasy/Downloads/poems.txt",'r+')
fr0=poem.read()
在Python终端键入“fr0”,效果如图则表示已经读入
第三步. 文本处理
由于文本中包含书名号和问号和换行符等不需要的字符,所以需要将它们删掉(替换为空)
首先去掉书名号和问号:
fr1=re.sub('《.*?》','',fr0)
fr2=re.sub('.*?(/?).*?','',fr1)
然后进行分词:
words=jieba.cut(fr2)
c=','.join(words)
cc=c.split(',')
接下来去掉其它我们不需要的特殊字符串:
word=[]
for i in cc:
if i=='?':
del i
elif i=='。':
del i
elif i==' ':
del i
elif i==',':
del i
elif i=='\n':
del i
elif i=='\u3000':
del i
else:
word.append(i)
到现在为止,文本文件变成了如下图所示的样子
第四步. 拆词成字
将所有的词拆开,提取出所有的汉字存入w列表中:
w=[]
for i in range(len(word)):
for j in word[i]:
w.append(j)
第五步. 开始写诗啦
定义一个写诗的函数,命名为“writepoem”:
def writepoem():
poe=[]
for lensen in range(4):
x=random.sample(w,5)
one=''.join(x)
poe.append(one)
poe=','.join(poe)
return poe
第六步. 调用写诗函数进行创作
def itemsnum():
N=input('想写几首呢,告诉我吧:')
for i in range(1,int(N)+1):
print('~~~~~~~第',i,'首~~~~~~~~')
print(writepoem())
print('~~~~~最后一首了呢~~~~~~')
以上便完成了机器写诗的全部步骤,现在我们来运行一下
运行程序,在IDLE调用itemsnum函数写3首诗:
是不是很有意思呢,嘿嘿。
不过目前的程序还比较笨,不会押韵,下次可以考虑把相同韵脚的字放在一起,把意象相同的词放在一起,从而使诗句更有韵味。
领取专属 10元无门槛券
私享最新 技术干货