摘要:常聽說,現(xiàn)在的代碼,就和唐朝的詩一樣重要。推薦使用作為編譯器。代碼具體步驟使用爬蟲爬取全唐詩,總共抓取了首。接下來考慮優(yōu)化模版,提取五言和七言常用句式作為模版。另外考慮使用機(jī)器學(xué)習(xí)的方法,寫來讓計算機(jī)自動生成充滿韻味的詩
常聽說,現(xiàn)在的代碼,就和唐朝的詩一樣重要。
可對我們來說,寫幾行代碼沒什么,但是,要讓我們真正地去寫一首唐詩,那可就頭大了。。既然如此,為何不干脆用代碼寫一首唐詩?
python3.6環(huán)境
推薦使用anaconda管理python包,可以對于每個項目,創(chuàng)建環(huán)境,并在該環(huán)境下下載項目需要的包。
推薦使用pycharm作為編譯器。
GitHub代碼:GitHub - theodore3131/TangshiGenerator
具體步驟:使用爬蟲爬取全唐詩,總共抓取了71000首。
#使用urllib3的內(nèi)置函數(shù)構(gòu)建爬蟲的安全驗證,來應(yīng)對網(wǎng)站的反爬蟲機(jī)制 http = urllib3.PoolManager( cert_reqs="CERT_REQUIRED", ca_certs=certifi.where()) #爬蟲的目標(biāo)網(wǎng)站 r = http.request("GET", url) #爬蟲獲取的html數(shù)據(jù) soup = BeautifulSoup(r.data, "html.parser") content = soup.find("div", class_="contson")
使用正則表達(dá)式對爬取的數(shù)據(jù)進(jìn)行處理
p1 = r"[u4e00-u9fa5]{5,7}[u3002|uff0c]" #[漢字]{重復(fù)5-7次}[中文句號|中文逗號] pattern1 = re.compile(p1) #編譯正則表達(dá)式 result = pattern1.findall(poemfile) #搜索匹配的字符串,得到匹配列表
對詩詞正文進(jìn)行分詞操作
#使用jieba中文分詞庫的textRank算法來找出各個詞性的高頻詞 for x in jieba.analyse.textrank(content, topK=600, allowPOS=("n", "nr", "ns", "nt", "nz", "m")):
唐詩生成
處理韻腳
使用pinyin庫
pip install pinyin
verse = pinyin.get("天", format="strip") #輸出:tian
對于韻腳,本來是想找出所有的韻腳并做成字典形式存儲起來,但韻腳總共有20多個,
后來發(fā)現(xiàn)其實(shí)20多個韻腳都是以元音字母開始的,我們可以基于這個規(guī)則來判斷:
rhythm = "" rhythmList = ["a", "e", "i", "o", "u"] verse = pinyin.get(nounlist[i1][1], format="strip") #韻腳在每個pinyin倒敘最后一個元音字母處截止 for p in range(len(verse)-1, -1, -1): if verse[p] in rhythmList: ind = p rhythm = verse[ind:len(verse)]
目前是最初級的五言律詩,且為名動名句式
rhythm = "" rhythmList = ["a", "e", "i", "o", "u"] while num < 4: #生成隨機(jī)數(shù) i = random.randint(1, len(nounlist)-1) i1 = random.randint(1, len(nounlist)-1) j = random.randint(1, len(verblist)-1) #記錄韻腳 ind = 0 ind1 = 0 if (num == 1): rhythm = "" verse = pinyin.get(nounlist[i1][1], format="strip") #韻腳在每個pinyin倒敘最后一個元音字母處截止 for p in range(len(verse)-1, -1, -1): if verse[p] in rhythmList: ind = p rhythm = verse[ind:len(verse)] #確保2,4句的韻腳相同,保證押韻 if (num == 3): ind1 = 0 verse1 = pinyin.get(nounlist[i1][1], format="strip") for p in range(len(verse1)-1, -1, -1): if verse1[p] in rhythmList: ind1 = p while verse1[ind1: len(verse1)] != rhythm: i1 = random.randint(1, len(nounlist)-1) verse1 = pinyin.get(nounlist[i1][1], format="strip") for p in range(len(verse1)-1, -1, -1): if verse1[p] in rhythmList: ind1 = p #隨機(jī)排列組合 print(nounlist[i]+verblist[j][1]+nounlist[i1]) num += 1藏頭詩
其實(shí)思路很簡單,既然我們有了語料庫,那么,我們每次在排列組合詞的時候,只需保證生成每句時,第一個名詞的第一個字,是按序給定四字成語中的即可
for x in range(len(nounlist)): if nounlist[x][0] == str[num]: i = x
來看一下結(jié)果:
四言詩:
所思浮云
關(guān)山車馬
高樓流水
閑人腸斷
五言律詩:
西風(fēng)時細(xì)雨
山川釣建章
龍門看蕭索
幾年鄉(xiāng)斜陽
藏頭詩:
落花流水
落暉首南宮
花枝成公子
流水名朝廷
水聲勝白石
參考:
https://segmentfault.com/a/11...
當(dāng)然,現(xiàn)在生成的唐詩還是比較低級的,屬于基礎(chǔ)的古詩文詞語排列組合。
接下來考慮優(yōu)化模版,提取五言和七言常用句式作為模版。
另外考慮使用機(jī)器學(xué)習(xí)的方法,寫RNN來讓計算機(jī)自動生成充滿韻味的詩
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41365.html
摘要:如果使用區(qū)塊鏈技術(shù)則可以降低使用版權(quán)的門檻。價值化,藝人利益得到保證高曉松在談到區(qū)塊鏈時,也贊成藝人發(fā)行來跳過娛樂公司。通過區(qū)塊鏈技術(shù)藝人可以更加貼合粉絲,創(chuàng)造出更高效的內(nèi)容推薦和特色化的消費(fèi)產(chǎn)品與服務(wù)體驗。 2019年1月3日,高曉松的《曉說》在朋友圈刷屏了。 這次高曉松沒有談風(fēng)花雪月、詩與遠(yuǎn)方,而是在其母校清華大學(xué)的教室里,跟學(xué)弟學(xué)妹們深入淺出地聊起了區(qū)塊鏈在文娛產(chǎn)業(yè)的革命。 在傳...
摘要:如果使用區(qū)塊鏈技術(shù)則可以降低使用版權(quán)的門檻。價值化,藝人利益得到保證高曉松在談到區(qū)塊鏈時,也贊成藝人發(fā)行來跳過娛樂公司。通過區(qū)塊鏈技術(shù)藝人可以更加貼合粉絲,創(chuàng)造出更高效的內(nèi)容推薦和特色化的消費(fèi)產(chǎn)品與服務(wù)體驗。 2019年1月3日,高曉松的《曉說》在朋友圈刷屏了。 這次高曉松沒有談風(fēng)花雪月、詩與遠(yuǎn)方,而是在其母校清華大學(xué)的教室里,跟學(xué)弟學(xué)妹們深入淺出地聊起了區(qū)塊鏈在文娛產(chǎn)業(yè)的革命。 在傳...
摘要:然而這次的文章,就像賀師俊所說的這篇文章是從程序員這個老年度總結(jié)前端掘金年對我來說,是重要的一年。博客導(dǎo)讀總結(jié)個人感悟掘金此文著筆之時,已經(jīng)在眼前了。今天,我就來整理一篇,我個人認(rèn)為的年對開發(fā)有年終總結(jié)掘金又到 2016 Top 10 Android Library - 掘金 過去的 2016 年,開源社區(qū)異常活躍,很多個人與公司爭相開源自己的項目,讓人眼花繚亂,然而有些項目只是曇花一...
摘要:萬云專注于將區(qū)塊鏈技術(shù)應(yīng)用于各個行業(yè),促進(jìn)區(qū)塊鏈在業(yè)務(wù)中的真正落地。共識算法是區(qū)塊鏈比較核心的技術(shù)之一,保證區(qū)塊一致性是其主要作用。 作者:萬云首席架構(gòu)師兼產(chǎn)品總監(jiān)李晨原文鏈接:http://mp.weixin.qq.com/s/snl...如需轉(zhuǎn)載請聯(lián)系萬云官方微信:萬云Wancloud 2018年開始,好像所有的人都在談?wù)搮^(qū)塊鏈,資本、精英、草根不斷進(jìn)場投身到區(qū)塊鏈的浪潮之中。在外...
摘要:半路出家的前端程序員應(yīng)該不在少數(shù),我也是其中之一。年,馮馮同事兼師兄看我寫太費(fèi)勁,跟我說對面樓在找,問我要不要學(xué),說出來可能有點(diǎn)丟人,但是在那之前,我真得不知道什么是,什么是。 半路出家的前端程序員應(yīng)該不在少數(shù),我也是其中之一。 為何會走向前端 非計算機(jī)專業(yè)的我,畢業(yè)之后,就職于一家電力行業(yè)公司,做過設(shè)備調(diào)試、部門助理、測試,也寫過一段時間的QT,那三年的時間,最難過的不是工作忙不忙,...
閱讀 2577·2021-09-26 10:13
閱讀 5984·2021-09-08 10:46
閱讀 692·2019-08-30 15:53
閱讀 2966·2019-08-29 16:13
閱讀 2761·2019-08-26 12:23
閱讀 3485·2019-08-26 11:24
閱讀 1093·2019-08-23 18:09
閱讀 1032·2019-08-23 17:08