今年三月份,为了掌握文本分析技术,特意找了两个版本《天龙八部》的txt文件作为数据而进行练习,但可能被其他事情给耽搁了,当时只完成了一部分。前几天金老去世,令人不胜感概,于是想把这个《天龙八部》的文本分析完成,也算是以自己的方式表达对大师的怀念。 首先还是载入相关的包,这次的包有点多: library(tidyverse) library(readxl) library(tidytext) library(jiebaR) library(ggthemes) library(widyr) library(igraph) library(ggraph) 然后将两个版本的小说文本导入,顺便导入了主要人物的人名,因为这次分析是以分析主要人物为主: tl_new <- read_lines('tl_new.txt') tl_old <- read_lines('tl_old.txt') tl_main <- read_lines('tl_main.txt') %>% .[-1] 因为每个人的称呼不止一个,如乔帮主、萧大王、姊夫等等,都是指萧峰一个人,所以为了统一人名,还要做一些替换工作: tl_new_tran <- tl_new %>% str_replace_all('(段公子)|(哥哥)|(誉儿)', '段誉') %>% str_replace_all('(乔峰)|(乔帮主)|(姊夫)|(萧大王)', '萧峰') %>% str_replace_all('(梦郎)|(小和尚)', '虚竹') %>% str_replace_all('(南海鳄神)|(岳老二)', '岳老三') %>% str_replace_all('带头大哥', '玄慈') %>% str_replace_all('延庆太子', '段延庆') %>% str_replace_all('白长老', '白世镜') %>% str_replace_all('全舵主', '全冠清') %>% str_replace_all('甘宝宝', '钟夫人') %>% str_replace_all('小康', '马夫人') %>% str_replace_all('灵儿', '钟灵') %>% str_replace_all('(星宿老怪)|(星宿老仙)', '丁春秋') %>% str_replace_all('庄聚贤', '游坦之') %>% str_replace_all('(慕容公子)|(表哥)', '慕容复') %>% str_replace_all('国师', '鸠摩智') %>% str_replace_all('表妹', '王语嫣') %>% str_replace_all('(婉妹)|(木姊姊)', '木婉清') %>% str_replace_all('(郡主)|(小师妹)', '阿紫') %>% str_replace_all('段王爷', '段正淳') tl_old_tran <- tl_old %>% str_replace_all('(段公子)|(哥哥)|(誉儿)', '段誉') %>% str_replace_all('(乔峰)|(乔帮主)|(姊夫)|(萧大王)', '萧峰') %>% str_replace_all('(梦郎)|(小和尚)', '虚竹') %>% str_replace_all('(南海鳄神)|(岳老二)', '岳老三') %>% str_replace_all('带头大哥', '玄慈') %>% str_replace_all('延庆太子', '段延庆') %>% str_replace_all('白长老', '白世镜') %>% str_replace_all('全舵主', '全冠清') %>% str_replace_all('甘宝宝', '钟夫人') %>% str_replace_all('小康', '马夫人') %>% str_replace_all('灵儿', '钟灵') %>% str_replace_all('(星宿老怪)|(星宿老仙)', '丁春秋') %>% str_replace_all('庄聚贤', '游坦之') %>% str_replace_all('(慕容公子)|(表哥)', '慕容复') %>% str_replace_all('国师', '鸠摩智') %>% str_replace_all('表妹', '王语嫣') %>% str_replace_all('(婉妹)|(木姊姊)', '木婉清') %>% str_replace_all('(郡主)|(小师妹)', '阿紫') %>% str_replace_all('段王爷', '段正淳') 上面的替换工作并不全,比如,同样是段郞,有时可能是指段誉,有时可能是指段正淳,这就需要具体的情境,才能判断出来这个词指的是谁,但这个工作太麻烦了,这里就放弃了。

Continue reading

据说希腊的德尔菲神庙上刻着几条箴言,其中一条告诫我们要“认识你自己”。这条箴言刻起来容易,做起来却很难,甚至可能是人生最困难的事情之一。要想认识自己,大概有四种方法,一是客观内容的客观描述,如测量人的身高、体重等各种身体特征,这些特征在一定的时间内不会有太大幅度的变化,用来测量这些特征的工具也具有极高的信度和效度,因此不论从要了解的内容和用于了解该内容的方式,都是很客观的;二是客观内容的主观描述,如使用问卷量表测量人的各种能力,人的能力应该也是比较恒定的,但用于测量这些特征的工具,无论是编制过程还是施用过程,都避免不了与人为因素有关的干扰,即便硬要说它是客观的,也是“主观”的客观。三是主观内容的主观描述,如各种投射测验,对于这些测验,我没有实际接触过,但从书本上来看,难免不让我认为这种测验从内容到方式都不是那么客观;最后一种就显而易见了,即对主观内容的客观描述,如对推特的文本分析,我要进行的日记文本分析,也是这一范围之内的。日记本身是主观的产物,但这里我要对这些主观的内容进行客观的数据分析,进而从这一角度来加深对自己的了解,不过这个方法的局限性也很大,毕竟不是每个人都有几十万字的日记文本可以用来分析。另外再加一句,上面这段话,也可以说是对客观内容的主观描述。 这篇文章分为三部分,首先是对我每天记日记的时间进行一个简单的分析,然后对文本进行分词,针对词频进行分析,最后是一个初步的情感分析。下面先载入需要用到的包。 导入需要的包 library(tidyverse) library(readxl) library(jiebaR) library(ggthemes) 一般情况下,我的第一行代码都是library(tidyverse),这次主要用到了其中dplyr、tidyr、stringr以及ggplot2四个包;readxl包用来读入.xlsx格式的文件;jiebarR用来分词;ggthemes用来添加我最喜欢的tufte主题。 时间分析 首先要把日记中与时间有关的内容提取出来,我记录时间的格式很固定,都是20XX年X月X日 周X XX:XX的形式,通过以下代码,可以把这部分内容提取出来: time <- read_lines('dairy.txt') %>% as.tibble() %>% filter(str_detect(value, '.*年.*月.*日.*周')) %>% mutate(num = row_number()) %>% select(2, time = 1) 处理后是这个样子的: num time 1 2012年1月13日 周五 21:40 2 2012年1月14日 周六 21:41 3 2012年1月15日 周日 21:53 4 2012年1月16日 周一 21:58 5 2012年1月17日 周二 21:45 6 2012年1月18日 周三 21:51 7 2012年1月19日 周四 22:01 8 2012年1月20日 周五 21:43 9 2012年1月21日 周六 21:35 10 2012年1月22日 周日 21:53 所有的时间都放在一起是没法分析的,接下来我就把各部分时间分离开,并转化成了整数型,这一步代码如下:

Continue reading

Author's picture

孟祥良

R语言爱好者, 心理学专业硕士 & FGO休闲玩家