常聽說,現在的**,就和唐朝的詩一樣重要。
可對我們來說,寫幾行**沒什麼,但是,要讓我們真正地去寫一首唐詩,那可就頭大了。。既然如此,為何不乾脆用**寫一首唐詩?
準備:github**:
theodore3131/tangshigenerator
具體步驟:
使用爬蟲爬取全唐詩,總共抓取了71000首。
#使用urllib3的內建函式構建爬蟲的安全驗證,來應對**的反爬蟲機制使用正規表示式對爬取的資料進行處理#爬蟲的目標**
#爬蟲獲取的html資料
soup = beautifulsoup(r.data, 'html.parser')
content = soup.find('div', class_="contson")
p1 = r"[一-龥][。|,]" #[漢字][中文句號|中文逗號]對詩詞正文進行分詞操作pattern1 = re.compile(p1) #編譯正規表示式
result = pattern1.findall(poemfile) #搜尋匹配的字串,得到匹配列表
#使用jieba中文分詞庫的textrank演算法來找出各個詞性的高頻詞唐詩生成,處理韻腳for x in jieba.analyse.textrank(content, topk=600, allowpos=('n', 'nr', 'ns', 'nt', 'nz', 'm')):
#使用pinyin庫對於韻腳,本來是想找出所有的韻腳並做成字典形式儲存起來,但韻腳總共有20多個, 後來發現其實20多個韻腳都是以母音字母開始的,我們可以基於這個規則來判斷:pip install pinyin
verse = pinyin.get("天", format="strip")
#輸出:tian
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:
#生成隨機數
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
#隨機排列組合
print(nounlist[i]+verblist[j][1]+nounlist[i1])
num += 1
其實思路很簡單,既然我們有了語料庫,那麼,我們每次在排列組合詞的時候,只需保證生成每句時,第乙個名詞的第乙個字,是按序給定四字成語中的即可
for x in range(len(nounlist)):來看一下結果:if nounlist[x][0] == str[num]:
i = x
四言詩:
所思浮雲五言律詩:關山車馬
高樓流水
閒人腸斷
西風時細雨藏頭詩:山川釣建章
龍門看蕭索
幾年鄉斜陽
落花流水
落暉首南宮當然,現在生成的唐詩還是比較低階的,屬於基礎的古詩文詞語排列組合。 接下來考慮優化模版,提取五言和七言常用句式作為模版。 另外考慮使用機器學習的方法,寫rnn來讓計算機自動生成充滿韻味的詩。花枝成公子
流水名朝廷
水聲勝白石
用python,生活仍有詩和遠方
常聽說,現在的 就和唐朝的詩一樣重要。可對我們來說,寫幾行 沒什麼,但是,要讓我們真正地去寫一首唐詩,那可就頭大了。既然如此,為何不乾脆用 寫一首唐詩?github github theodore3131 tangshigenerator 使用urllib3的內建函式構建爬蟲的安全驗證,來應對 的反...
用Python,生活仍有詩和遠方
常聽說,現在的 就和唐朝的詩一樣重要。可對我們來說,寫幾行 沒什麼,但是,要讓我們真正地去寫一首唐詩,那可就頭大了。既然如此,為何不乾脆用 寫一首唐詩?準備 github theodore3131 tangshigenerator 具體步驟 使用爬蟲爬取全唐詩,總共抓取了71000首。使用urlli...
生活不止眼前的苟且,還有詩和遠方!
作為一名技術開發者,優秀的技術是我們吃飯的基本工具。但是在我們鑽研技術的時候,可能很多人都會有同樣的感覺,就是執著於技術 痴迷於技術。俗話說 生活不只是眼前的苟且,還有詩和遠方!作為大多數 程式猿 的我們,一天大腦中時時刻刻都在想著技術,想著問題,甚至連睡覺做夢的時候也在想著如何攻克難題。可能很多程...