如何用 R 创作古诗
当前位置:以往代写 > 其他教程 >如何用 R 创作古诗
2019-06-14

如何用 R 创作古诗

如何用 R 创作古诗

引子最近中国诗词大会很受接待,才女武亦姝凭借超强的影象力和超快的回响本领一炮走红,成为各人心目中的偶像。

如何用 R 创作古诗

在浏览节目标同时,我也不禁想到,既然古代的诗人可以或许创作出这些优美的诗篇,那我是不是也能创作几首属于本身的诗词作品呢?惋惜,颠末一番实验,我发明自身的文学功底不足,恐怕无法完成这样难题的任务。看来人和人照旧有很大的差距。虽然,我并没有气馁。就像著名的无限猴子定理叙述的那样,哪怕是让一只猴子在打字机上随机地按键,只要按键的时间足够长,那么险些一定可以或许打出任何特定的文字,甚至是莎士比亚的全套著作。我以为我的编程本领应该比猴子照旧要略强一筹,所以规划试试用我熟悉的语言R 来创作几首『歪诗』。
词频阐明既然要创作诗词,那么就要先相识诗词中最常呈现的词汇和意象是什么。我在 github 上找到了一些古典中文的语料库(链接),个中有不少唐诗宋词的文本,只不外是繁体的。我选择了《宋词三百首》作为了我的文本库,对它举办词频阐明。
其实做法很简朴,或许就是分这么几步:把文本拆分成一个一个的单词;把单词凭据呈现的频率、次数举办排序用可视化把功效展示出来下面的部门我会接头一下详细的操纵,不感乐趣的观众请往后翻到功效的部门。
第一步、第二步导入文本库:> fileName <- “宋詞三百首.txt” > SC <- readChar(fileName, file.info(fileName)$size)# 或许查抄一下> substr(SC, 1000, 1100)[1] “醒。送春春去幾時回,臨晚鏡。傷流景。旧事後期空記省。○沙上並禽池上暝。雲破月來花弄影。重重簾幕密遮燈,風不定。人初靜。嫡落紅應滿徑。\n\n詞牌:青門引\n作者:張先\n詞文:乍暖還輕冷。風雨晚來方定。庭軒寂”
用分词包『结巴R』 (链接) 内里的 worker() 公式完身分词:> cc = worker()> analysis <- as.data.frame(table(cc[SC]))# 从头排序> analysis <- analysis[order(-analysis$freq),]# 简朴改变一下文件的定名、名目> names(analysis) <- c(“word”,”freq”)> analysis$word <- as.character(analysis$word)# 看一下这个分词文件的开头> head(analysis)     word freq470  作者  3106120 詞文  3106121 詞牌  3101024   又   751014   去   553124   月   54
看来在宋词三百首中,呈现最多的词语是『作者』,『词文』,『词牌』,总共呈现了310次。这是因为每首诗词开始时,文档中城市先容这首诗词的作者、词文和词牌,从而滋扰了我们的文天职析。
第二步我用 R 包 wordcloud2把功效简朴地举办了一下可视化:wordcloud2(analysis)然后获得了这张图。

如何用 R 创作古诗

嗯,硕大的一个『词文』呈现了许多次,看来我们在可视化的时候要把它去掉。我把呈现频率大于300次的词语刨除之后,按照分词功效的字数(一字,二字,三字)从头举办了可视化,功效如下:wordcloud2(analysis[analysis$freq>1& analysis$freq < 300 & nchar(analysis$word) == 1,])wordcloud2(analysis[analysis$freq>1& analysis$freq < 300 & nchar(analysis$word) == 2,])wordcloud2(analysis[analysis$freq>1 & analysis$freq < 300 & nchar(analysis$word) == 3,])

如何用 R 创作古诗

此刻的功效就正常多了。我们看到,一个字的词语中,呈现频率较多的有『谁』,『又』,『人』,『去』,『梦』, 『是』, 『处』,『月』 等等。

如何用 R 创作古诗

两个字的词语中,『那里』,『斜阳』,『相思』这些词利用频率最多,给我一种在看网络小说标题的感受。

如何用 R 创作古诗

三个字的词语中,呈现最多的往往是词牌名和作者名。

如何用 R 创作古诗

完成了简短的词频阐明,下面就要开始最重要的『诗词创作』部门了!
诗词创作筹备创作宋词,先要明晰一个词牌名。我选择了李白的《清平乐·画堂晨起》作为典型。画堂晨起,来报雪花坠。高卷帘栊看佳瑞,皓色远迷庭砌。盛气光引炉烟,素草寒生玉佩。应是天仙狂醉,乱把白云揉碎。R 的中文分词包『结巴R』的成果中,有一项可以用来判别词语的词性。我将典型举办分词后,再用这项成果阐明一下各部门的词性。
> cipai <- “画堂晨起,来报雪花坠。高卷帘栊 看 佳瑞,皓色远 迷 庭砌。盛气光引 炉烟,素草寒生玉佩。应是天仙狂醉,乱把白云揉碎。”> tagger <- worker(“tag”)> cipai_2 <- tagger <= cipai> cipai_2     n      x      x      n      v      a      n      g      v “画堂” “晨起” “来报” “雪花”   “坠”   “高” “卷帘”   “栊”   “看”      x      x      a      v      x      n      x      x      x “佳瑞” “皓色”   “远”   “迷” “庭砌” “盛气” “光引” “炉烟” “素草”      x     nr      x      n      x      d      p     nr      v “寒生” “玉佩” “应是” “天仙” “狂醉”   “乱”   “把” “白云” “揉碎” 
个中每个字母代表什么词性,我也没有很领略。据我的揣摩,n 应该是名词,x是没有判别出来的词性,v是动词, a是形容词,至于『nr』, 『p』, 『d』是什么,实在是猜不出来,在辅佐文档中也没有找到。假如有伴侣知道的话,但愿能不惜见教。
最后,我从之前提炼的宋词词频库中,选取了至少呈现过两次的一字或两字词语,作为诗词创作的素材库:> example <- subset(analysis, freq >1 & nchar(word) <3 & freq < 300)# 提取词性文件> cixing <- attributes(cipai_2)$names# 将素材库举办词性分类> example_2 <- tagger <= example$word
创作下面,我们终于要开始用 R 创作诗歌了!我本身想了一个创作的算法,可以说很简朴,甚至说有点好笑。步调是这样的:我从范本词牌的第一个词开始,随机在素材库中选取词性沟通,字数相等的单词,填入提前配置好的空缺字符串中。举个例子,原诗的第一个词是『画堂』,是个二字的名词。那么,我就在素材库中随机选择一个二字的名词,填入这个空间中。然后,继承阐明下一个词。
详细方程的代码如下:> write_songci <- function(m){set.seed(m)empty <- “”for (i in 1:length(cipai_2)){  temp_file <- example_2[attributes(example_2)$name == cixing[i]]  temp_file <- temp_file[nchar(temp_file) == nchar(cipai_2[i])]   empty <- paste0(empty, sample(temp_file,1))  }result <- paste0(substr(empty, 1,4), “,”, substr(empty,5,9),”。”,       substr(empty, 10,16), “,”, substr(empty, 17,22),”。”,      substr(empty, 23,28), “,”, substr(empty, 29,34),”。”,      substr(empty, 35,40), “,”, substr(empty, 41,46),”。”)}
功效做了这么多事情,终于到了验收功效的部门。请列位来浏览几首 R 创作的歪词作品吧:
> lapply(1:5, write_songci)[[1]][1] “幽香凝佇,春空賞花回。淨關塞旆感春歸,朝天淺爭前度。江聲已失無跡,香非凝笑秋千。過盡細雨歸鴻,欲對蓬萊歸來。”[[2]][1] “流年漏永,春空愁腸覺。穩黃花笮收敗壁,數峰深鋪已斷。寄語舊香非煙,歸夢如夢殷勤。沈沈啼鶯老來,卻把丁香不堪。”[[3]][1] “愁腸簾外,前度芳心困。少陽臺瘞切桃蹊,幾人細鎖新樣。腸斷缺月中酒,潘鬢行遍何曾。歸雁芳草修竹,不對秋水垂下。”[[4]][1] “一川晏殊,阮郎斷鴻展。重暮雲菰訪楊花,畫閣滿聽金尊。敗葉孤城雪滿,晝永隋堤碧雲。無準黃金年光,漸因綺羅開時。”[[5]][1] “煙柳清景,謝娘桃花如。窄蝴蝶琮誤中酒,花間碎挂斷煙。幽夢曉來千樹,蕭娘數峰翩翩。蟲網暗想未醒,曾向丁寧离合。”
既然是计较机生成的诗,自然谈不上什么文学性。不外,固然大部门内容看上去不知所云,有些词句照旧有些意思的,好比『幽香凝伫』,『愁肠帘外』,『孤城雪满』等等。之前在调试的时候,还呈现过雷同于『风烟泪暗霜前, 古岸频听金莲』这样的词句,无厘头之余,莫名地居然尚有些押韵。
感触这篇文章到此就竣事了,但愿各人读得还愉快。最后谈谈本身的感触。许多读者大概会问,既然用 R 写出来的诗绝不合文理,为什么还要举办这样的事情呢?这种操练是不是在侮辱中文和古典诗词呢?我倒是以为,我们对语言应该存有一种开放的立场。诗词说到底,也是一种大雅的文字游戏。我们又何尝不能抱着游戏的立场,把这个操练当做一个有趣的消遣呢?用计较机代码作诗的主意并非是我原创。清华大学早在一年前就推出过作诗呆板人薇薇,宣称可以通过图灵测试。

如何用 R 创作古诗

#p#分页标题#e#

如何用 R 创作古诗

有些词句,如『那里春风约』,『万朵千峰映碧垂』等照旧略显生硬,不外比我这里创作的诗词已经强的太多了。本文的小措施较量简短,总共只利用了不到50行代码,可以说是较量大致的一个版本,仅供各人参考。感乐趣的读者可以设计更紧密的算法,利用更高级的统计要领改造创作的质量。古诗词历来被认为具有很高的艺术代价。本日的我们有越来越多的东西,可以系统化地总结、归纳诗词的纪律,这或许也是已往的诗人怎么也想不到的。或者有一天,计较机真的能进修出作诗的法门,给我们带来更多全新的灵感和更好的诗句。我们拭目以待。
参考资料古典中文语料库jiebaR 的CRAN pagejiebaR 的辅佐文档R中的普通文本处理惩罚汇总百度百科:清平乐无限猴子定理「归雁芳草修竹,差池秋水垂下。—— R」
接待插手本站果真乐趣群贸易智能与数据阐明群乐趣范畴包罗各类让数据发生代价的步伐,实际应用案例分享与接头,阐明东西,ETL东西,数据客栈,数据挖掘东西,报表系统等全方位常识QQ群:81035754

    关键字:

在线提交作业