任务需求

清洗json格式的弹幕数据(以“聆听丶芒果鱼直播间时间切片弹幕.json”为例),具体要求如下:

提取出所有弹幕类型(列表中的第1个元素)为”NM“的弹幕的内容(列表中的第4个元素)取出,存为一条弹幕为一行的txt格式文件。

剔除弹幕中的不可见字符(包括制表符、换行符等)

将弹幕中的所有英文字符转换为小写

将弹幕中的所有全角字符转换为半角字符

将弹幕中的所有繁体字转换为简体字

将弹幕中大于等于4个的、连续的、相同的中文汉字合并为3个(例如将”啊啊啊啊啊啊“替换为”啊啊啊“)

将弹幕中大于等于4个的、连续的、相同的英文字母或数字合并为3个(例如将”666666“替换为”666“)

将弹幕中大于等于3个的、连续的、相同的标点符号合并为2个(例如将“???”替换为”??“)

实现方法

基于以上需求,我们逐个确定实现方法。

剔除不可见字符

根据对弹幕内容中包含的不可见字符的分析,我们主要需要剔除制表符(\t)、回车符(\r)和换行符(\n)。

source = source.replace("\t", "").replace("\r", "").replace("\n", "")

替换英文大小写

将所有英文字符转换为小写只需要使用字符串自带的方法即可。

source = source.upper()  # 将字符串中的英文全部转换为大写

source = source.lower()  # 将字符串中的英文全部转换为小写

将全角字符转换为半角字符

我们遍历弹幕字符串中的每个字符,依据Unicode编码将全角字符转换为半角字符。

def full_width_to_half_width(string):

""" 将全角字符转化为半角字符

:param string: 需要转化为半角的字符串

:return: 转化完成的字符串

"""

result = ""

for uchar in string:

inside_code = ord(uchar)

if inside_code == 12288:  # 全角空格直接转换

inside_code = 32

elif 65281 <= inside_code <= 65374:  # 全角字符(除空格)根据关系转化

inside_code -= 65248

result += chr(inside_code)

return result

将繁体字转换为简体字

因为繁简转换涉及到繁简分歧词等多种情况,所以我们不宜直接按字转换,而更应该按词转换。因此我们使用其他人造的轮子,通过HanLP的

convertToSimplifiedChinese函数将弹幕字符串中的繁体字转换为简体字。

from pyhanlp import HanLP

source = HanLP.convertToSimplifiedChinese(source)

合并连续相同的字符

我们使用包含反向引用的正则表达式来匹配连续且相同的字符,又考虑到每个句子当前可能包含多个不同的连续且相同的字符,因此使用findall方法来进行匹配。

反向匹配是指正则表达式中的"\1",“\1”可以用来指代第一个被“()”定义的子表达式。

for chinese_character in re.findall(r"([\\u4e00-\\u9fa5])\1{3,}", source):

source = re.sub("[" + chinese_character[0] + "]{3,}", chinese_character * 3, source)

for chinese_character in re.findall(r"([A-Za-z])\1{3,}", source):

source = re.sub("[" + chinese_character[0] + "]{3,}", chinese_character * 3, source)

for chinese_character in re.findall(r"([0-9])\1{3,}", source):

source = re.sub("[" + chinese_character[0] + "]{3,}", chinese_character * 3, source)

(以上三个循环的正则表达式可以合并并简化为一个循环)

类似的,连续且相同的标点符号的处理方法如下。

PUNCTUATION_LIST = [" ", " ", ",", ",", ".", "。", "!", "?"]  # 样例标点符号列表

punctuation_list = "".join(PUNCTUATION_LIST)

for match_punctuation in re.findall("([" + punctuation_list + "])\\1{2,}", source):

source = re.sub("[" + match_punctuation[0] + "]{2,}", match_punctuation * 3, source)

source = re.sub("-{2,}", "---", source)  # 处理特殊的短横杠

结果输出

在完成弹幕内容的清洗后,我们可以将临时变量中的数据存储到文件中。

with open("时间切片弹幕(清洗后).txt", "w+", encoding="UTF-8") as file:

file.write("\n".join(barrage_list))

python数据清洗实例_Python文本清洗案例分析:直播弹幕数据清洗相关推荐

  1. 非线性有限元:基本理论与算法及基于Python、Fortran程序实现与案例分析实践技术

    有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法.尽管各类商业软件使用方便,但其使用对用户来说往往是一个"黑箱子" ...

  2. 非线性有限元:基本理论与算法及基于Python、Fortran程序实现与案例分析

    非线性有限元:基本理论与算法及基于Python.Fortran程序实现与案例分析 (qq.com) 有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采 ...

  3. 岩土工程--非线性有限元:基本理论与算法及基于Python、Fortran程序实现与案例分析

    非线性有限元:基本理论与算法及基于Python.Fortran程序实现与案例分析实践技术 有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元 ...

  4. python进行简单的文本相似度分析

    python进行简单的文本相似度分析 本文利用gensim包.jieba包和TF-IDF模型进行简单的文本相似度分析.从而能够让我们确定,哪句话和哪句话相似程度是多少.文本相似度分析是自然语言处理中常 ...

  5. Python文本整理案例分析:《全唐诗》文本整理

    在整理<全唐诗>的文本之前,我们首先需要完成以下两个步骤: 确定需求 了解文本 在完成以上步骤后,我们开始实际着手整理文本,在整理的过程中大体上也包含两个流程: 文本解析 结果输出 全唐诗 ...

  6. [转载] 用Python进行简单的文本相似度分析

    参考链接: Python 3中的文本分析 学习目标: 利用gensim包分析文档相似度使用jieba进行中文分词了解TF-IDF模型 环境: Python 3.6.0 |Anaconda 4.3.1 ...

  7. python实现实例_Python 练习实例65

    Python 练习实例65 题目:一个最优美的图案. 程序分析:无. 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- import math clas ...

  8. 24类情感分析英语文本标注案例分析

    什么是情感分析? 情感分析,又称意见挖掘(opinion mining)和倾向性分析.简单地说,就是对主观内容进行分析.总结和推理的过程.通过判断信息中的情感取向,进行口碑分析.话题监测和舆情分析等. ...

  9. python考勤记录_python连接中控考勤机分析数据

    用python连接中控考勤机. 下载并分析数据,把结果邮件给人事. SDK包建议用32位的,在win7 64位系统上用64位开发包不行,用32可以. python还要pywin32 注意版本,我这用的 ...

最新文章

  1. python修改类属性值_python编程入门到实践:直接修改属性的值和通过方法修改属性的值...
  2. sharepoint column中的图片链接不能显示为图片
  3. Unity3D研究院之Android同步方法读取streamingAssets
  4. Java Optionals获得更具表现力的代码
  5. php如何使用高阶函数
  6. 电脑系统linux普通用户,Linux操作系统用户管理
  7. ubuntu下修改网卡名称
  8. 信息学奥赛一本通C++语言——1017: 浮点型数据类型存储空间大小
  9. 中华人民共和国民法典
  10. 柔性电子综述2013 ---电子皮肤 The Evolution of Electronic Skin (E-Skin)
  11. Protel (DXP2004sp2) 许可协议认证过程
  12. Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
  13. 将centos7打造成桌面系统centos
  14. 计算机主板提示ahci,电脑BIOS没有AHCI功能没有办法BIOS刷新怎么办
  15. ios 判断手机角度_iOS 角度获取及旋转
  16. 我是一匹来自北方的狼
  17. c语言中怎么定义一个指针,C语言中,定义一个指针的时候为这个指针开辟...
  18. s7-200 smart中VD,VW这类变量在INTOUCH中如何对应
  19. ArcGIS基础实验操作100例--实验24提取栅格独立格网面
  20. 最新长三角shp底图(两省一市+安徽)

热门文章

  1. 细说nui之datagrid
  2. steam无法显示成人内容_显示Steam游戏的FPS
  3. python地图gps轨迹可视化_GPS轨迹可视化的三种方法
  4. JavaScript的算数运算符与比较运算符,直通大厂!
  5. 挑战真实场景对话——小爱同学背后关键技术深度解析
  6. javascript瀑布流(照片墙)
  7. 英文期刊催稿信模板_SCI 投稿全过程信件模板一览(Cover letter,催稿信等)
  8. 中国智能音箱行业十四五调研分析及发展战略咨询研究报告2021年版
  9. 零基础通过Ajax实现网易云音乐数据交互(4)
  10. java日志处理log