R语言分析宋词300首

其实做法很简单,大概就是分这么几步:

导入文本库

fileName <- "F:\\Code\\R\\Song\\songci300.txt"
SC <- readChar(fileName, file.info(fileName)$size)
can only read in bytes in a non-UTF-8 MBCS locale
substr(SC, 1000, 1100)
[1] "伤春,不如怜取眼前人。\r\n晏殊\r\n红笺小字,说尽平生意。鸿雁在云鱼在水,惆怅此情难寄。\r\n斜阳独倚西楼,遥山恰对帘钩。人面不知何处,绿波依旧东流。\r\n晏殊\r\n金风细细,叶叶梧桐坠。绿酒初尝人易醉,一枕窗"

用分词包『结巴R』里面的 worker() 公式完成分词

library(jiebaR)
cc = worker()
analysis <- as.data.frame(table(cc[SC]))
names(analysis) <- c("word","freq")
analysis <- analysis[order(-analysis$freq),]
analysis$word <- as.character(analysis$word)
head(analysis)

用R包wordcloud2把结果简单地进行了一下可视化

library(wordcloud2)
package 愼㸱愼㹥wordcloud2愼㸱愼㹦 was built under R version 3.3.3
wordcloud2(analysis)

根据分词结果的字数(一字,二字,三字)重新进行了可视化,结果如下

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,])

诗词创作

分析准备

In strsplit(code, "\n", fixed = TRUE) :
  input string 1 is invalid in this locale
tagger <- worker("tag")
cipai_2 <- tagger <= cipai
cipai_2
     n      x      x      n      v      a      n      g      v 
"画堂" "晨起" "来报" "雪花"   "坠" 
1,  高" "卷帘"   "栊" 
1,  看" 
     x      x      a      v      x      n      x      x      x 
"佳瑞" "皓色"   "远" 
1,  迷" "庭砌" "盛气" "光引" "炉烟" "素草" 
     x     nr      x      n      x      d      p     nr      v 
"寒生" "玉佩" "应是" "天仙" "狂醉"   "乱" 
1,  把" "白云" "揉碎" 

从之前提炼的宋词词频库中,选取了至少出现过 两次 的一字或两字词语,作为诗词创作的素材库;然后提取词性文件,将素材根据词性分类:

example <- subset(analysis, freq >1 & nchar(word) <3 & freq < 300)
cixing <- attributes(cipai_2)$names
example_2 <- tagger <= example$word

开始创作

从范本词牌的 第一个词 开始,随机在素材库中选取 词性相同,字数相等 的单词,填入提前设置好的空白字符串中。

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),".")
}

看看创作成果

lapply(1:5, write_songci)
[[1]]
[1] "乱鸦初静,帘外心眼断.慢银钩榭吐灯前,轻寒暖抱春空.青草何似诗酒,竹槛春恨翩翩.犹在垂柳平芜,欲凭佩环归来."

[[2]]
[1] "楼头若到,帘外风味闻.嫩春色旆舞看尽,困倚绿干泪满.华表心似争忍,声里芳思苏轼.轻鸥归路湘天,却为言语衰草."

[[3]]
[1] "风味午梦,春空踪迹认.碎游丝栊觅难留,荒台阴赋赖有.万事香凝残醉,沙际遥山王孙.时见芳草更苦,都凭清香更阑."

[[4]]
[1] "草草双燕,赵令青苔聚.红琉璃醺卧绿杨,天角难听云来.画图非烟长向,柳花怎得蓬壶.声住滋味呼灯,只从秋水不负."

[[5]]
[1] "小窗情伤,倚楼情味望.浓一梦髻引残醉,已断细晴阑角.楼台轻别春山,燕股赖有双飞.燕股留人人去,便在晓色闲愁."
LS0tDQpvdXRwdXQ6DQogIHBkZl9kb2N1bWVudDoNCiAgICBpbmNsdWRlczoNCiAgICAgIGluX2hlYWRlcjogaGVhZGVyLnRleA0KICAgIGxhdGV4X2VuZ2luZTogeGVsYXRleA0KICBodG1sX25vdGVib29rOiBudWxsDQotLS0NCg0KIyBS6K+t6KiA5YiG5p6Q5a6L6K+NMzAw6aaWDQrlhbblrp7lgZrms5XlvojnroDljZXvvIzlpKfmpoLlsLHmmK/liIbov5nkuYjlh6DmraXvvJoNCg0KLSDmiormlofmnKzmi4bliIbmiJDkuIDkuKrkuIDkuKrnmoTljZXor40gIA0KLSDmiorljZXor43mjInnhaflh7rnjrDnmoTpopHnjofjgIHmrKHmlbDov5vooYzmjpLluo8gIA0KLSDnlKjlj6/op4bljJbmiornu5PmnpzlsZXnpLrlh7rmnaUgIA0KDQojIyDlr7zlhaXmlofmnKzlupMNCmBgYHtyfQ0KZmlsZU5hbWUgPC0gIkY6XFxDb2RlXFxSXFxTb25nXFxzb25nY2kzMDAudHh0Ig0KU0MgPC0gcmVhZENoYXIoZmlsZU5hbWUsIGZpbGUuaW5mbyhmaWxlTmFtZSkkc2l6ZSkNCnN1YnN0cihTQywgMTAwMCwgMTEwMCkNCmBgYA0KDQojIyDnlKjliIbor43ljIXjgI7nu5Plt7RS44CP6YeM6Z2i55qEIHdvcmtlcigpIOWFrOW8j+WujOaIkOWIhuivjQ0KYGBge3J9DQpsaWJyYXJ5KGppZWJhUikNCmNjID0gd29ya2VyKCkNCmFuYWx5c2lzIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoY2NbU0NdKSkNCm5hbWVzKGFuYWx5c2lzKSA8LSBjKCJ3b3JkIiwiZnJlcSIpDQphbmFseXNpcyA8LSBhbmFseXNpc1tvcmRlcigtYW5hbHlzaXMkZnJlcSksXQ0KYW5hbHlzaXMkd29yZCA8LSBhcy5jaGFyYWN0ZXIoYW5hbHlzaXMkd29yZCkNCmhlYWQoYW5hbHlzaXMpDQpgYGANCg0KIyMg55SoUuWMhXdvcmRjbG91ZDLmiornu5PmnpznroDljZXlnLDov5vooYzkuobkuIDkuIvlj6/op4bljJYNCmBgYHtyfQ0KbGlicmFyeSh3b3JkY2xvdWQyKQ0Kd29yZGNsb3VkMihhbmFseXNpcykNCmBgYA0KDQojIyDmoLnmja7liIbor43nu5PmnpznmoTlrZfmlbDvvIjkuIDlrZfvvIzkuozlrZfvvIzkuInlrZfvvInph43mlrDov5vooYzkuoblj6/op4bljJbvvIznu5PmnpzlpoLkuIsNCmBgYHtyfQ0Kd29yZGNsb3VkMihhbmFseXNpc1thbmFseXNpcyRmcmVxPjEmIGFuYWx5c2lzJGZyZXEgPCAzMDAgJiBuY2hhcihhbmFseXNpcyR3b3JkKSA9PSAxLF0pDQp3b3JkY2xvdWQyKGFuYWx5c2lzW2FuYWx5c2lzJGZyZXE+MSYgYW5hbHlzaXMkZnJlcSA8IDMwMCAmIG5jaGFyKGFuYWx5c2lzJHdvcmQpID09IDIsXSkNCndvcmRjbG91ZDIoYW5hbHlzaXNbYW5hbHlzaXMkZnJlcT4xICYgYW5hbHlzaXMkZnJlcSA8IDMwMCAmIG5jaGFyKGFuYWx5c2lzJHdvcmQpID09IDMsXSkNCmBgYA0KDQojIOivl+ivjeWIm+S9nA0KIyMg5YiG5p6Q5YeG5aSHDQpgYGB7cn0NCmNpcGFpIDwtICLnlLvloILmmajotbfvvIzmnaXmiqXpm6roirHlnaDjgILpq5jljbfluJjmoIog55yLIOS9s+eRnu+8jOeak+iJsui/nCDov7cg5bqt56CM44CC55ub5rCU5YWJ5byVIOeCieeDn++8jOe0oOiNieWvkueUn+eOieS9qeOAguW6lOaYr+WkqeS7meeLgumGie+8jOS5seaKiueZveS6keaPieeijuOAgiINCnRhZ2dlciA8LSB3b3JrZXIoInRhZyIpDQpjaXBhaV8yIDwtIHRhZ2dlciA8PSBjaXBhaQ0KY2lwYWlfMg0KYGBgDQrku47kuYvliY3mj5DngrznmoTlrovor43or43popHlupPkuK3vvIzpgInlj5bkuoboh7PlsJHlh7rnjrDov4cg5Lik5qyhIOeahOS4gOWtl+aIluS4pOWtl+ivjeivre+8jOS9nOS4uuivl+ivjeWIm+S9nOeahOe0oOadkOW6k++8m+eEtuWQjuaPkOWPluivjeaAp+aWh+S7tu+8jOWwhue0oOadkOagueaNruivjeaAp+WIhuexu++8mg0KYGBge3J9DQpleGFtcGxlIDwtIHN1YnNldChhbmFseXNpcywgZnJlcSA+MSAmIG5jaGFyKHdvcmQpIDwzICYgZnJlcSA8IDMwMCkNCmNpeGluZyA8LSBhdHRyaWJ1dGVzKGNpcGFpXzIpJG5hbWVzDQpleGFtcGxlXzIgPC0gdGFnZ2VyIDw9IGV4YW1wbGUkd29yZA0KYGBgDQoNCiMjIOW8gOWni+WIm+S9nA0K5LuO6IyD5pys6K+N54mM55qEIOesrOS4gOS4quivjSDlvIDlp4vvvIzpmo/mnLrlnKjntKDmnZDlupPkuK3pgInlj5Yg6K+N5oCn55u45ZCM77yM5a2X5pWw55u4562JIOeahOWNleivje+8jOWhq+WFpeaPkOWJjeiuvue9ruWlveeahOepuueZveWtl+espuS4suS4reOAgg0KYGBge3J9DQp3cml0ZV9zb25nY2kgPC0gZnVuY3Rpb24obSl7DQpzZXQuc2VlZChtKQ0KZW1wdHkgPC0gIiINCmZvciAoaSBpbiAxOmxlbmd0aChjaXBhaV8yKSl7DQogIHRlbXBfZmlsZSA8LSBleGFtcGxlXzJbYXR0cmlidXRlcyhleGFtcGxlXzIpJG5hbWUgPT0gY2l4aW5nW2ldXQ0KICB0ZW1wX2ZpbGUgPC0gdGVtcF9maWxlW25jaGFyKHRlbXBfZmlsZSkgPT0gbmNoYXIoY2lwYWlfMltpXSldIA0KICBlbXB0eSA8LSBwYXN0ZTAoZW1wdHksIHNhbXBsZSh0ZW1wX2ZpbGUsMSkpDQogIH0NCg0KcmVzdWx0IDwtIHBhc3RlMChzdWJzdHIoZW1wdHksIDEsNCksICIsIiwgc3Vic3RyKGVtcHR5LDUsOSksIi4iLCANCiAgICAgIHN1YnN0cihlbXB0eSwgMTAsMTYpLCAiLCIsIHN1YnN0cihlbXB0eSwgMTcsMjIpLCIuIiwNCiAgICAgIHN1YnN0cihlbXB0eSwgMjMsMjgpLCAiLCIsIHN1YnN0cihlbXB0eSwgMjksMzQpLCIuIiwNCiAgICAgIHN1YnN0cihlbXB0eSwgMzUsNDApLCAiLCIsIHN1YnN0cihlbXB0eSwgNDEsNDYpLCIuIikNCg0KfQ0KYGBgDQoNCiMjIOeci+eci+WIm+S9nOaIkOaenA0KYGBge3J9DQpsYXBwbHkoMTo1LCB3cml0ZV9zb25nY2kpDQpgYGANCg0K