日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python程序写诗_用Python作诗,生活仍有诗和远方

發(fā)布時間:2023/12/1 python 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python程序写诗_用Python作诗,生活仍有诗和远方 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原標(biāo)題:用Python作詩,生活仍有詩和遠方

報 名

來源:TheodoreXu鏈接:

https://segmentfault.com/a/1190000013154329

常聽說,現(xiàn)在的代碼,就和唐朝的詩一樣重要。

可對我們來說,寫幾行代碼沒什么,但是,要讓我們真正地去寫一首唐詩,那可就頭大了。。既然如此,為何不干脆用代碼寫一首唐詩?

準(zhǔn)備:

python3.6環(huán)境

推薦使用anaconda管理python包,可以對于每個項目,創(chuàng)建環(huán)境,并在該環(huán)境下下載項目需要的包。

推薦使用pycharm作為編譯器。

GitHub代碼:

https://github.com/theodore3131/TangshiGenerator

具體步驟:

使用爬蟲爬取全唐詩,總共抓取了71000首。

#使用urllib3的內(nèi)置函數(shù)構(gòu)建爬蟲的安全驗證,來應(yīng)對網(wǎng)站的反爬蟲機制

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")

使用正則表達式對爬取的數(shù)據(jù)進行處理

p1 = r"[u4e00-u9fa5]{5,7}[u3002|uff0c]"#[漢字]{重復(fù)5-7次}[中文句號|中文逗號]

pattern1 = re.compile(p1) #編譯正則表達式

result = pattern1.findall(poemfile) #搜索匹配的字符串,得到匹配列表

對詩詞正文進行分詞操作

#使用jieba中文分詞庫的textRank算法來找出各個詞性的高頻詞

forx injieba.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)其實20多個韻腳都是以元音字母開始的,我們可以基于這個規(guī)則來判斷:

rhythm = ""

rhythmList = [ "a", "e", "i", "o", "u"]

verse = pinyin.get(nounlist[i1][ 1], format= "strip")

#韻腳在每個pinyin倒敘最后一個元音字母處截止

forp inrange(len(verse)- 1, - 1, - 1):

ifverse[p] inrhythmList:

ind = p

rhythm = verse[ind:len(verse)]

目前是最初級的五言律詩,且為名動名句式

rhythm = ""

rhythmList = [ "a", "e", "i", "o", "u"]

whilenum < 4:

#生成隨機數(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倒敘最后一個元音字母處截止

forp inrange(len(verse)- 1, - 1, - 1):

ifverse[p] inrhythmList:

ind = p

rhythm = verse[ind:len(verse)]

#確保2,4句的韻腳相同,保證押韻

if(num == 3):

ind1 = 0

verse1 = pinyin.get(nounlist[i1][ 1], format= "strip")

forp inrange(len(verse1)- 1, - 1, - 1):

ifverse1[p] inrhythmList:

ind1 = p

whileverse1[ind1: len(verse1)] != rhythm:

i1 = random.randint( 1, len(nounlist)- 1)

verse1 = pinyin.get(nounlist[i1][ 1], format= "strip")

forp inrange(len(verse1)- 1, - 1, - 1):

ifverse1[p] inrhythmList:

ind1 = p

#隨機排列組合

print(nounlist[i]+verblist[j][ 1]+nounlist[i1])

num += 1藏頭詩

其實思路很簡單,既然我們有了語料庫,那么,我們每次在排列組合詞的時候,只需保證生成每句時,第一個名詞的第一個字,是按序給定四字成語中的即可

forx inrange(len(nounlist)):

ifnounlist[x][ 0] == str[num]:

i = x

來看一下結(jié)果:

四言詩:

所思浮云

關(guān)山車馬

高樓流水

閑人腸斷

五言律詩:

西風(fēng)時細雨

山川釣建章

龍門看蕭索

幾年鄉(xiāng)斜陽

藏頭詩:

落花流水

落暉首南宮

花枝成公子

流水名朝廷

水聲勝白石

參考:

https://segmentfault.com/a/1190000004571958

當(dāng)然,現(xiàn)在生成的唐詩還是比較低級的,屬于基礎(chǔ)的古詩文詞語排列組合。

接下來考慮優(yōu)化模版,提取五言和七言常用句式作為模版。

另外考慮使用機器學(xué)習(xí)的方法,寫RNN來讓計算機自動生成充滿韻味的詩。

(完)

圖文來自網(wǎng)絡(luò)、如涉及版權(quán)問題,請聯(lián)系我們以便處理。文章內(nèi)容純屬作者個人觀點,不代表本網(wǎng)觀點。

責(zé)任編輯:

總結(jié)

以上是生活随笔為你收集整理的python程序写诗_用Python作诗,生活仍有诗和远方的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。