用Python缤至,生活仍有詩(shī)和遠(yuǎn)方

分享一篇文章潮罪,原文位于:用Python

常聽說(shuō),現(xiàn)在的代碼嫉到,就和唐朝的詩(shī)一樣重要沃暗。

可對(duì)我們來(lái)說(shuō),寫幾行代碼沒什么何恶,但是孽锥,要讓我們真正地去寫一首唐詩(shī),那可就頭大了细层。惜辑。既然如此,為何不干脆用代碼寫一首唐詩(shī)疫赎?

準(zhǔn)備:

  • python3.6環(huán)境
  • 推薦使用anaconda管理python包盛撑,可以對(duì)于每個(gè)項(xiàng)目,創(chuàng)建環(huán)境虚缎,并在該環(huán)境下下載項(xiàng)目需要的包撵彻。
  • 推薦使用pycharm作為編譯器钓株。

GitHub代碼:

theodore3131/TangshiGenerator

具體步驟:

使用爬蟲爬取全唐詩(shī)实牡,總共抓取了71000首。

#使用urllib3的內(nèi)置函數(shù)構(gòu)建爬蟲的安全驗(yàn)證轴合,來(lái)應(yīng)對(duì)網(wǎng)站的反爬蟲機(jī)制
#python學(xué)習(xí)交流群:516107834
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á)式對(duì)爬取的數(shù)據(jù)進(jìn)行處理

p1 = r"[一-龥]{5,7}[创坞。|,]"  #[漢字]{重復(fù)5-7次}[中文句號(hào)|中文逗號(hào)]
pattern1 = re.compile(p1)        #編譯正則表達(dá)式
result = pattern1.findall(poemfile)   #搜索匹配的字符串受葛,得到匹配列表

對(duì)詩(shī)詞正文進(jìn)行分詞操作

#使用jieba中文分詞庫(kù)的textRank算法來(lái)找出各個(gè)詞性的高頻詞
for x in jieba.analyse.textrank(content, topK=600, allowPOS=('n', 'nr', 'ns', 'nt', 'nz', 'm')):

唐詩(shī)生成题涨,處理韻腳

#使用pinyin庫(kù)
pip install pinyin
verse = pinyin.get("天", format="strip")
#輸出:tian

對(duì)于韻腳,本來(lái)是想找出所有的韻腳并做成字典形式存儲(chǔ)起來(lái)总滩,但韻腳總共有20多個(gè)纲堵, 后來(lái)發(fā)現(xiàn)其實(shí)20多個(gè)韻腳都是以元音字母開始的,我們可以基于這個(gè)規(guī)則來(lái)判斷:

rhythm = ""
rhythmList = ["a", "e", "i", "o", "u"]
verse = pinyin.get(nounlist[i1][1], format="strip")
#韻腳在每個(gè)pinyin倒敘最后一個(gè)元音字母處截止
          for p in range(len(verse)-1, -1, -1):
              if verse[p] in rhythmList:
                  ind = p

      rhythm = verse[ind:len(verse)]

目前是最初級(jí)的五言律詩(shī)闰渔,且為名動(dòng)名句式

rhythm = ""
rhythmList = ["a", "e", "i", "o", "u"]
while num < 4:
#python學(xué)習(xí)交流群:516107834
#生成隨機(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")
#韻腳在每個(gè)pinyin倒敘最后一個(gè)元音字母處截止
          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ī)

其實(shí)思路很簡(jiǎn)單冈涧,既然我們有了語(yǔ)料庫(kù)茂附,那么,我們每次在排列組合詞的時(shí)候督弓,只需保證生成每句時(shí)营曼,第一個(gè)名詞的第一個(gè)字,是按序給定四字成語(yǔ)中的即可

for x in range(len(nounlist)):
      if nounlist[x][0] == str[num]:
          i = x

來(lái)看一下結(jié)果:

四言詩(shī):

所思浮云
關(guān)山車馬
高樓流水
閑人腸斷

五言律詩(shī):

西風(fēng)時(shí)細(xì)雨
山川釣建章
龍門看蕭索
幾年鄉(xiāng)斜陽(yáng)

藏頭詩(shī):

落花流水

落暉首南宮
花枝成公子
流水名朝廷
水聲勝白石

參考:

人類身份驗(yàn)

當(dāng)然愚隧,現(xiàn)在生成的唐詩(shī)還是比較低級(jí)的蒂阱,屬于基礎(chǔ)的古詩(shī)文詞語(yǔ)排列組合。 接下來(lái)考慮優(yōu)化模版,提取五言和七言常用句式作為模版录煤。 另外考慮使用機(jī)器學(xué)習(xí)的方法虱痕,寫RNN來(lái)讓計(jì)算機(jī)自動(dòng)生成充滿韻味的詩(shī)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辐赞,一起剝皮案震驚了整個(gè)濱河市部翘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌响委,老刑警劉巖新思,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異赘风,居然都是意外死亡夹囚,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門邀窃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)荸哟,“玉大人,你說(shuō)我怎么就攤上這事瞬捕“袄” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵肪虎,是天一觀的道長(zhǎng)劣砍。 經(jīng)常有香客問我,道長(zhǎng)扇救,這世上最難降的妖魔是什么刑枝? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮迅腔,結(jié)果婚禮上装畅,老公的妹妹穿的比我還像新娘。我一直安慰自己沧烈,他們只是感情好掠兄,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掺出,像睡著了一般徽千。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汤锨,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天双抽,我揣著相機(jī)與錄音,去河邊找鬼闲礼。 笑死牍汹,一個(gè)胖子當(dāng)著我的面吹牛铐维,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慎菲,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼嫁蛇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了露该?” 一聲冷哼從身側(cè)響起睬棚,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎解幼,沒想到半個(gè)月后抑党,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撵摆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年底靠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片特铝。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡暑中,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鲫剿,到底是詐尸還是另有隱情鳄逾,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布牵素,位于F島的核電站严衬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏笆呆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涉茧,春花似錦捷泞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至逆屡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間踱讨,已是汗流浹背魏蔗。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痹筛,地道東北人莺治。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓廓鞠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親谣旁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子床佳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 常聽說(shuō)砌们,現(xiàn)在的代碼,就和唐朝的詩(shī)一樣重要搁进。 可對(duì)我們來(lái)說(shuō)怨绣,寫幾行代碼沒什么,但是拷获,要讓我們真正地去寫一首唐詩(shī)篮撑,那可...
    妄心xyx閱讀 1,769評(píng)論 0 21
  • 【編者按:如果有興趣學(xué)習(xí)格律詩(shī),請(qǐng)通讀全文匆瓜,全文共計(jì)26800字赢笨,不含卷首編者按的內(nèi)容。特別提示:本文完全免費(fèi)驮吱,如...
    大俠霍元乙閱讀 8,560評(píng)論 84 131
  • 1.概述 ExpandableListView是可擴(kuò)展的二級(jí)下拉列表,繼承ListView 2.使用步驟 ① 布局...
    君裊閱讀 2,965評(píng)論 1 1
  • 初讀《知行合一王陽(yáng)明》茧妒,深受震撼,序言就梳理了陽(yáng)明心學(xué)的理論來(lái)源左冬,看到了儒學(xué)的發(fā)展史桐筏,儒學(xué)在大一統(tǒng)時(shí)代起著不可估量...
    cuyyan閱讀 312評(píng)論 0 0
  • 一筆難抒肺腑情,村中美景不需尋拇砰。徐風(fēng)拂面人猶醉梅忌,君立山巔喚曲魂。注:系藏頭詩(shī)除破。一村徐牧氮,詩(shī)人,網(wǎng)友瑰枫。
    艾思閱讀 197評(píng)論 0 6