1. 程式人生 > >10 行程式碼集算器實現寫詩機器人

10 行程式碼集算器實現寫詩機器人

可閱讀原文:http://c.raqsoft.com.cn/article/1536756719594?r=alice

集算器不僅有大資料計算,還有詩和遠方。最近看到不少寫詩機器人的新聞,於是嘗試用集算器簡單地實現一個。這個實現真的很簡單,簡單到只有10幾行程式碼,請看實現步驟:

 

1下載字典和詩詞

從網上找一個用於分詞的字典檔案,裡面記錄著每個中文詞彙的詞性。我從GitHub上找了一個,稍微處理之後儲存到集檔案dict.btx。

下載宋詞三百首的txt檔案,去掉空格和換行,以及其它文字以外的字元,得到一個長字串。

2訓練

對上一步得到的長字串進行分詞,結果儲存到集檔案作為模板,實現程式碼如下:

 

A

B

C

1

=file("dict.btx")[email protected]().keys(WORD).index()

   

2

=create(WORD,LEN,T)

   

3

宋詞三百首宴山亭趙佶北行見杏花裁剪冰綃,輕疊數……    

4

=len(A3)

>i=1

 

5

for (i<=A4)

>word3=A2.find(mid(A3,i,3) ), word2=A2.find(   mid(A3,i,2) ), word1=A2.find( mid(A3,i,1) )

 

6

 

if (word3!=null)

>A2.insert(0, word3.(WORD),3,word3.(T)), i=i+3

7

 

else if (word2!=null)

>A2.insert(0, word2.(WORD),2,word2.(T)), i=i+2

8

 

else if (word1!=null)

>A2.insert(0, word1.(WORD),1,word1.(T)), i=i+1

9

 

else

>i=i+1

10

=file("宋詞模型.txt")[email protected](A2)    

A1讀取字典檔案,並且建立索引;

A2定義模板記錄的資料結構,三個欄位表示:詞、長度、詞性;

A5到A9是迴圈處理,對A3進行分詞,這裡最長只處理三個字組成的詞;

A10把結果儲存;

這一步得到一個模板,內容是《宋詞三百首》裡所有文字的分詞,以及這些分詞的詞性。

3創作

創作的原理是找一首宋詞作為目標,得到它的每個分詞,根據分詞的長度和詞性,從上一步的模板裡隨機找一個詞進行替換。這裡選擇的是《水調歌頭·明月幾時有》,來看程式碼:

 

A

B

C

1

=file("宋詞模型.txt")[email protected]()    

2

=file("dict.btx")[email protected]().keys(WORD).index()

   

3

明月幾時有,把酒問青天。不知天上宮闕,今夕是何年。我欲乘風歸去。惟恐瓊樓玉宇,高處不勝寒,起舞弄清影,何似在人間。    

4

=len(A3)

>str="", i=1, words=null

 

5

for (i<=A4)

>word3=A2.find(mid(A3,i,3)   ),word2=A2.find( mid(A3,i,2) ), word1=A2.find( mid(A3,i,1) )

 

6

 

if (word3!=null)

>words=A1.select(LEN==3&&   T==word3.(T) ), i=i+3, str=str+words(1+rand(words.len())).(WORD)

7

 

else if (word2!=null)

>words=A1.select(LEN==2&&   T==word2.(T) ), i=i+2, str=str+words(1+rand(words.len())).(WORD)

8

 

else if (word1!=null)

>words=A1.select(LEN==1&&   T==word1.(T) ), i=i+1, str=str+words(1+rand(words.len())).(WORD)

9

 

else

>str=str+mid(A3,i,1), i=i+1

10

>output(str)

   

執行結果如下,這些“作品”雖然存在語法錯誤,但還是有模有樣的,總比我自己寫的要好很多。

晚秋無奈送,佇立鷓鴣天。已成西下黃葉,春寒疏何處。我又花下離別。酒醒陽關蕭蕭,如許悲歡霜,初見年少影,誰曾在斜陽。

春寒何在喧,不解煙雨任。梳洗江上西風,明月憐此地。誰先水聲惹起。相思洛陽曉色,幾許不成魂,不應相迎競,他未為梢頭。

而今幾度寄,相認問青天。催發江上蓬壺,黃昏發何處。別未御街可惜。輕吹江南那堪,先斷閒來閒,相逢拘束影,任又在舊事。

昨夜無處應,不知闌珊處。映帶樓上王孫,如今來有時。任更點點飄香。垂涎池塘鞦韆,到處望斷天,酒醒衰草影,我尤把天涯。

感興趣的可以閱讀原文,下載附件:http://c.raqsoft.com.cn/article/1536756719594?r=alice

作者:liwei
來源:乾學院
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。