文本分析

一、openrefine数据整理

一、数据整理(openrefine)

我们选取的素材是从网站上存储的辩论转录素材,文本格式如下图,标注了发言人、发言的时间和发言内容等信息。

首先我们需要做的是将辩论文本复制,并导入到openrefine中,然后将非结构化的数据转换成我们常见的结构化整洁数据(每个变量是一列,每个观测值是一行)。

1.复制文本,新建openrefine项目

image-20201109151532131.png

image-20201109151842932.png

2.新建发言人列

根据column1列,新建发言者列,将发言者提取出来

if(value.contains('('),value,"")
image-20201109152126091.png

3.新建发言时间列

我们观察到发言者后面有发言时间,思路是将发言时间提取出来,单独一列,根据前后的时间可以确定每个发言人每次发言用时情况。发言时间在括号里面与发言者以“:”为分隔符


image-20201109155551112.png

将发言时间的括号去掉

value.replace("(","").replace(")","")
image-20201109155720935.png

4.新建发言内容列

我们观察到发言者的字符串中包含括号,发言内容的字符串中没有括号的情况,这样我们就找到了规律,以是否包含括号为判断,来区分出发言者和发言内容。

if(value.contains('('),"",value)
image-20201109155916350.png

5.调整发言时间列

通过观察发现发言时间中的包含有“小时:分:秒”模式,其他大部分模式都是采用“分:秒”的结构,为了后期方面计算每位发言者的每次发言时间,统一将“小时:分:秒”调整为“分:秒”的结构,方法是将1小时转换成60分。


image-20201109160614191.png

首先将符合“小时:分:秒”模式的所有观察值选出来,两种方法,一种是使用text filter 输入正则表达式筛选观察值

\d{2}:\d{2}:\d+
image-20201109161100663.png

另一种方法根据split()函数后元素的个数判断是否是“小时:分:秒”模式,新建“小时:分:秒”列和“分:秒”列

if(value.split(':').length()>2,value,"")
image-20201109161338517.png
if(value.split(':').length()>2,"",value)
image-20201109161559672.png

将符合“小时:分:秒”模式的列转换为“分:秒”模式

toString(value.split(':')[1].toNumber()+60)+":"+value.split(':')[2]
image-20201109162117998.png

将转换后的列和原来“分:秒”模式的列合并为一列


image-20201109162308304.png

6.删除空白行和多余的列

选择发言者列和发言时间列,fill down,将空白行向下填充

选择发言内容列,facet,以空白行分面


image-20201109162807812.png

选择All列,remove matching rows,删除多余的行


image-20201109162909375.png

删除多余的列

7.统计每次发言字数

选择发言内容列,新建发言发言字数列

value.split("").length()
image-20201109163637547.png

导出文本的最终效果:


image-20201109165442893.png

最后,这份文本的清理工作基本上告一段落,导出csv或xls文件存储,记下来我们将会针对这份文本,使用R来进行文本分析,详细的分析过程和分析结果,将在后面呈现,敬请期待。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容