集算器不僅有大數(shù)據(jù)計(jì)算,還有詩和遠(yuǎn)方。最近看到不少寫詩機(jī)器人的新聞,于是嘗試用集算器簡單地實(shí)現(xiàn)一個(gè)。這個(gè)實(shí)現(xiàn)真的很簡單,簡單到只有10幾行代碼,請(qǐng)看實(shí)現(xiàn)步驟:
站在用戶的角度思考問題,與客戶深入溝通,找到承德縣網(wǎng)站設(shè)計(jì)與承德縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋承德縣地區(qū)。
1下載字典和詩詞
從網(wǎng)上找一個(gè)用于分詞的字典文件,里面記錄著每個(gè)中文詞匯的詞性。我從GitHub上找了一個(gè),稍微處理之后保存到集文件dict.btx。
下載宋詞三百首的txt文件,去掉空格和換行,以及其它文字以外的字符,得到一個(gè)長字符串。
2訓(xùn)練
對(duì)上一步得到的長字符串進(jìn)行分詞,結(jié)果保存到集文件作為模板,實(shí)現(xiàn)代碼如下:
A | B | C | |
1 | =file("dict.btx").import@bi().keys(WORD).index() | ||
2 | =create(WORD,LEN,T) | ||
3 | 宋詞三百首宴山亭趙佶北行見杏花裁剪冰綃,輕疊數(shù)…… | ||
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").export@t(A2) |
A1讀取字典文件,并且建立索引;
A2定義模板記錄的數(shù)據(jù)結(jié)構(gòu),三個(gè)字段表示:詞、長度、詞性;
A5到A9是循環(huán)處理,對(duì)A3進(jìn)行分詞,這里最長只處理三個(gè)字組成的詞;
A10把結(jié)果保存;
這一步得到一個(gè)模板,內(nèi)容是《宋詞三百首》里所有文字的分詞,以及這些分詞的詞性。
3創(chuàng)作
創(chuàng)作的原理是找一首宋詞作為目標(biāo),得到它的每個(gè)分詞,根據(jù)分詞的長度和詞性,從上一步的模板里隨機(jī)找一個(gè)詞進(jìn)行替換。這里選擇的是《水調(diào)歌頭·明月幾時(shí)有》,來看代碼:
A | B | C | |
1 | =file("宋詞模型.txt").import@t() | ||
2 | =file("dict.btx").import@bi().keys(WORD).index() | ||
3 | 明月幾時(shí)有,把酒問青天。不知天上宮闕,今夕是何年。我欲乘風(fēng)歸去。惟恐瓊樓玉宇,高處不勝寒,起舞弄清影,何似在人間。 | ||
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) |
運(yùn)行結(jié)果如下,這些“作品”雖然存在語法錯(cuò)誤,但還是有模有樣的,總比我自己寫的要好很多。
晚秋無奈送,佇立鷓鴣天。已成西下黃葉,春寒疏何處。我又花下離別。酒醒陽關(guān)蕭蕭,如許悲歡霜,初見年少影,誰曾在斜陽。
春寒何在喧,不解煙雨任。梳洗江上西風(fēng),明月憐此地。誰先水聲惹起。相思洛陽曉色,幾許不成魂,不應(yīng)相迎競,他未為梢頭。
而今幾度寄,相認(rèn)問青天。催發(fā)江上蓬壺,黃昏發(fā)何處。別未御街可惜。輕吹江南那堪,先斷閑來閑,相逢拘束影,任又在舊事。
昨夜無處應(yīng),不知闌珊處。映帶樓上王孫,如今來有時(shí)。任更點(diǎn)點(diǎn)飄香。垂涎池塘秋千,到處望斷天,酒醒衰草影,我尤把天涯。
選擇一首發(fā)到朋友圈,居然得到不少點(diǎn)贊。
實(shí)現(xiàn)原理是同詞性替換,根據(jù)這個(gè)還可以實(shí)現(xiàn)寫唐詩的功能。如果對(duì)模板文件進(jìn)一步調(diào)整,根據(jù)韻律和平仄優(yōu)化詞性,效果會(huì)更好。這就是屬于人工智能的人工勞動(dòng)了,需要專業(yè)知識(shí)和辛苦付出,不是一下可以達(dá)成的。
感興趣的同學(xué)可以下載附件。
15368090470002ffa.rar