鉴于本公众号有很多研究生朋友 这里特意借此文章 为大家赠送R语言相关的书籍 希望大家喜欢
中国文化底蕴深厚,在漫长的历史中,我们的语言文字形成了大量特定的组合,用来表达特定的意思。成语是中国传统文化的一大特色,有的来源于典故,有的则来源于固定的使用方法。在成语类的比赛中,经常有“成语接龙”的比赛,往往是双方对战,一方先提出一个成语,然后另一方根据这个成语最后一个字的拼音,作为下一个成语的首拼,承接下去。
if(!require(pacman)) install.packages("pacman")
## Loading required package: pacman
pacman::p_load(tidyfst,pinyin,stringr)
fread("chengyu.csv",encoding = "UTF-8") # 编码格式需要设置,否则可能显示乱码
## word
## <char>
## 1: 阿谀奉承
## 2: 阿党比周
## 3: 阿党相为
## 4: 阿狗阿猫
## 5: 阿姑阿翁
## ---
## 30891: 做一天和尚撞一天钟
## 30892: 做贼心虚
## 30893: 做张做势
## 30894: 做张做致
## 30895: 做张做智
my_dic = pydic(method = "tone",dic = "pinyin2") # 设置词典
# 取得成语的首拼和尾拼
chengyu = fread("chengyu.csv",encoding = "UTF-8")%>%
mutate_dt(shoupin = str_sub(word,1,1)
%>% py(dic = my_dic),weipin = str_sub(word,-1,-1) %>% py(dic = my_dic))
# 展示结果
chengyu
## word shoupin weipin
## <char> <char> <char>
## 1: 阿鼻地狱 a1 yu4
## 2: 阿党比周 a1 zhou1
## 3: 阿党相为 a1 wei2
## 4: 阿狗阿猫 a1 mao1
## 5: 阿姑阿翁 a1 weng1
## ---
## 30891: 做一天和尚撞一天钟 zuo4 zhong1
## 30892: 做贼心虚 zuo4 xu1
## 30893: 做张做势 zuo4 shi4
## 30894: 做张做致 zuo4 zhi4
## 30895: 做张做智 zuo4 zhi4
在上面的操作中,str_sub函数用来提取成语的第一个字和最后一个字,然后利用py函数来将其转化为首拼和尾拼。pinyin包中有两套词典,这里用“pinyin2”词典来完成转化,因为它的错误率较低
game = function(){
chengyu1 = chengyu
repeat{
cat("请输入一个成语(认输或离开请按Q):")
input = readline()
if(input == "Q") break else chengyu1 = chengyu1[word != input]
str_sub(input,-1,-1) %>% py(dic = my_dic) -> input_weipin
res = chengyu1[shoupin == input_weipin]
if(nrow(res) == 0) {
cat("好吧,你赢了。\n")
}else{
cat(res$word[1])
chengyu1 = chengyu1[word != res$word[1]]
cat("\n")
}
}
}
现在,game函数中就封装了我们这个游戏的所有过程。下面我们进行简单的解释:
1、把chengyu这个数据框复制一份放在chengyu1中,因为我们在成语接龙中不允许成语重复出现,因此出现过一次的成语都会删掉。
2、readline函数可以让用户交互式地读入一段字符串;
3、cat函数可以在屏幕中输出一段文字对话;
4、repeat语句相当于while(1),如果没有跳出语句(break),它会一直执行下去。

if(!require(pacman)) install.packages("pacman")
pacman::p_load(tidyfst,pinyin,stringr)
my_dic = pydic(method = "tone",dic = "pinyin2")
chengyu = fread("chengyu.csv",encoding = "UTF-8")%>%
mutate_dt(shoupin = str_sub(word,1,1)
%>% py(dic = my_dic),weipin = str_sub(word,-1,-1) %>% py(dic = my_dic))
chengyu
game = function(){
chengyu1 = chengyu
repeat{
cat("请输入一个成语(认输或离开请按Q):")
input = readline()
if(input == "Q") break else chengyu1 = chengyu1[word != input]
str_sub(input,-1,-1) %>% py(dic = my_dic) -> input_weipin
res = chengyu1[shoupin == input_weipin]
if(nrow(res) == 0) {
cat("好吧,你赢了。\n")
}else{
cat(res$word[1])
chengyu1 = chengyu1[word != res$word[1]]
cat("\n")
}
}
}
game()
在这个基础上,我们还可以让电脑和电脑自己玩接龙游戏,从而得到一大串没有重复的成语接龙结果。此外,还可以利用shiny包做一个漂亮的人机交互界面。
该书立足于R语言与文本挖掘知识基础,实用性和趣味性兼具,循序渐进地引导读者掌握各项文本挖掘实现。书中包含大量代码,因此也可以作为工具书为文本挖掘用户提供R代码参考。
知乎R语言方面的大V新作
深入浅出地介绍文本数据挖掘技术原理与方法
简明扼要地介绍R语言编程基础
结合大量实例循序渐进地讲解
基于R语言的文本数据挖掘步骤、方法、技巧
(点击封面可进入详情页面)
作者:黄天元
关键词:文本数据挖掘 基于R语言 数据科学 非结构化数据 机器学习
适合人群:本书适合对文本数据挖掘感兴趣的学生、科研人员和数据科学从业者阅读。同时,本书还可以作为工具书,为需要经常进行文本数据挖掘的读者提供快速检索
文本是一种特殊的非结构化数据,在当今的大数据时代,其价值日趋凸显。本书利用开源而强大的R软件,对文本数据挖掘的概念、技术及技巧进行了系统的介绍。本书共11章,内容包括:走进文本数据挖掘,R语言快速入门,字符串的基本处理,用好正则表达式,导入各类文本数据,对各类文本数据进行预处理,文本特征提取的4种方法,基于机器学习的文本分类方法,文本情感分析,文本可视化,文本数据挖掘项目实践。本书还提供了丰富的应用案例和程序源代码引导读者高效学习。
投稿直接免费赠书:本文用R语言写的,谁可以用Python写一篇成语接龙的原创文章,直接投稿,免费获赠该书一本【只接受第一位私信我的朋友】。必须是一篇大于1000字的文章,有完整的代码,有详细的注释,最好的md格式的。
当然,我们下方还为大家再抽2本,赠送!



