一、openrefine数据整理
一、数据整理(openrefine)
我们选取的素材是从网站上存储的辩论转录素材,文本格式如下图,标注了发言人、发言的时间和发言内容等信息。
首先我们需要做的是将辩论文本复制,并导入到openrefine中,然后将非结构化的数据转换成我们常见的结构化整洁数据(每个变量是一列,每个观测值是一行)。
1.复制文本,新建openrefine项目
2.新建发言人列
根据column1列,新建发言者列,将发言者提取出来
if(value.contains('('),value,"")
3.新建发言时间列
我们观察到发言者后面有发言时间,思路是将发言时间提取出来,单独一列,根据前后的时间可以确定每个发言人每次发言用时情况。发言时间在括号里面与发言者以“:”为分隔符
将发言时间的括号去掉
value.replace("(","").replace(")","")
4.新建发言内容列
我们观察到发言者的字符串中包含括号,发言内容的字符串中没有括号的情况,这样我们就找到了规律,以是否包含括号为判断,来区分出发言者和发言内容。
if(value.contains('('),"",value)
5.调整发言时间列
通过观察发现发言时间中的包含有“小时:分:秒”模式,其他大部分模式都是采用“分:秒”的结构,为了后期方面计算每位发言者的每次发言时间,统一将“小时:分:秒”调整为“分:秒”的结构,方法是将1小时转换成60分。
首先将符合“小时:分:秒”模式的所有观察值选出来,两种方法,一种是使用text filter 输入正则表达式筛选观察值
\d{2}:\d{2}:\d+
另一种方法根据split()函数后元素的个数判断是否是“小时:分:秒”模式,新建“小时:分:秒”列和“分:秒”列
if(value.split(':').length()>2,value,"")
if(value.split(':').length()>2,"",value)
将符合“小时:分:秒”模式的列转换为“分:秒”模式
toString(value.split(':')[1].toNumber()+60)+":"+value.split(':')[2]
将转换后的列和原来“分:秒”模式的列合并为一列
6.删除空白行和多余的列
选择发言者列和发言时间列,fill down,将空白行向下填充
选择发言内容列,facet,以空白行分面
选择All列,remove matching rows,删除多余的行
删除多余的列
7.统计每次发言字数
选择发言内容列,新建发言发言字数列
value.split("").length()
导出文本的最终效果:
最后,这份文本的清理工作基本上告一段落,导出csv或xls文件存储,记下来我们将会针对这份文本,使用R来进行文本分析,详细的分析过程和分析结果,将在后面呈现,敬请期待。