关于《后浪》的B站弹幕分析总结(二)——jieba分词、常用词典、颜文字处理以及字符格式统一
目录
- 一、你需要知道的几个常用词典
- - **停用词典(停用词,颜文字,emoji)**
- - 否定词典,程度副词词典
- - 情感极性词典,多维情感词典
- 二、统一字符、统一大小写、统一繁简体
- - 统一字符
- - 统一大小写
- - 统一繁简体
- 三、添加无法识别的词和字典中没有的新词
- 四、代码实现分词
与本文相关内容链接:
- B站视频《[数说弹幕]我不小心看了后浪弹幕》
- 关于《后浪》的B站弹幕分析总结(一)——爬取B站视频的上万条弹幕的方法
这一篇内容我着重讲述分词的方法,以及在分词过程中需要注意的点,这里主要使用的工具是jieba分词。前半部分是理论介绍,后半部分是代码,如果对理论很熟悉的可以跳过前半部分。
一、你需要知道的几个常用词典
这个网站有很多词典可以下载使用:https://github.com/fighting41love/funNLP
我在做分词,包括后面的情感分析主要使用的词典是
- 停用词典(停用词,颜文字,emoji)
由于B站弹幕上充满了网络用语和二次元表情,处理起来不是一个简单的停用词表可以解决的。这样你的停用词典就要分成三类,停用词,颜文字((≧ω≦)/,(ω),(∩▽∩),(๑•́ ₃ •̀๑),⊙ω⊙)和emoji
颜文字可以将其拆解为一个个符号进行剔除,如果想保留可以建立自己的颜文字表。
emoji都有对应的Unicode,可以查找他们的编码进行识别处理。
- 否定词典,程度副词词典
《面向微博短文本的情感分析研究》中指出,正向情感类被否定词修饰后,其情感趋向于负向情感类,而负向情感类被否定词修饰后,其情感趋向于无情感,或稍微倾向于正向情感。而程度副词分为两类一类是增强情感,一类是削弱情感。
- 情感极性词典,多维情感词典
情感极性词典将情感分为正向、中性、负向三种。
情感多维词典也就是情绪词典,通常根据七情六欲中的七情将情感分为喜、怒、忧、思、悲、恐、惊,也有更多的划分。具体可以参考微博舆情的情绪模型。
其他的大家可以留言补充。
二、统一字符、统一大小写、统一繁简体
- 统一字符
统一字符,就是将文本内容中的全角字符串转换为半角字符串,这样会避免在自然语言处理的过程中由于字符不统一而导致的信息混乱问题。有规律的字符全角的十进制范围是[65281,65374],半角是[33,126],全角和半角之间的差值为65248,因此我们直接在全角数值上减去65248即可的到半角数值。在转换的过程中使用两个函数:ord和chr,ord是将字符串转换为对应的数值,chr是将数值转换为Unicode字符串。
- 统一大小写
针对英文词组,或者英文缩写,一个英文词组同样的意思因为大小写不一致,会被识别为不同的词组。这里使用upper()函数转换为大写,或者lower()函数转换成小写。
- 统一繁简体
针对中文词组,同样的中文词组,由于繁简体不一致会被识别为不同的词组。
langconv.py
zh_wiki.py
将这两个包下载下来,放在与代码同样的文件夹下,然后倒入。第一个包是用来实现繁体转简体,第二个包是用来实现简体转繁体。
三、添加无法识别的词和字典中没有的新词
因为B站的二次元环境就注定了很多常用词组是在日常生活中没有的,jieba也同样识别不出来,这样就需要我们手动添加,比如”老番茄“,“哔哩哔哩”,“小破站”等。只需要使用jieba.add()函数就可以了。
四、代码实现分词
这里的代码不会将上面说的点都实现,因为有些是同样的逻辑,只是重复工作而已,道理已经讲清楚了,自己实现起来不难。
import jieba #中文分词
import jieba.analyse
添加词组
#添加jieba无法识别的词组,tag用来定义词性
jieba.add_word('哔哩哔哩',tag='nt')
jieba.add_word('老番茄',tag='nr')
jieba.add_word('B站',tag='nt')
读取停用词
#读取停用词典,其他词典同样道理,这里codecs需要import一下
import codecs #用于编码转换
stoplist=[i.strip() for i in codecs.open('stop_words.txt', 'r', 'utf-8').readlines()]
繁体转简体
from langconv import *
import sys# 定义转换繁体到简体函数
def cht_to_chs(line):line = Converter('zh-hans').convert(line)line.encode('utf-8')return line
全角转半角
def str_convertU(content):strs=[]for each_char in content:code_num = ord(each_char) if code_num==12288:code_num=32elif 65281<=code_num<=65374:code_num-=65248strs.append(chr(code_num))return ''.join(strs)
结巴分词
def jieba_cut(text):words=pseg.cut(text)rule_word=['z','vn','v','t','nz','nr','ns','n','nt','l','i','j','an','a','eng']seg_list=[word.word.upper() for word in words if word.flag in rule_word]cov_list=[cht_to_chs(word) for word in seg_list if word not in stoplist]return cov_list
words_list=[jieba_cut(each_content) for each_content in df]
在下一篇文章我会介绍制作词云的几个方法,敬请期待。
关于《后浪》的B站弹幕分析总结(二)——jieba分词、常用词典、颜文字处理以及字符格式统一相关推荐
- ik分词和jieba分词哪个好_Python 中文 文本分析 实战:jieba分词+自定义词典补充+停用词词库补充+词频统计...
最近项目需要,实现文本的词频分析,折腾了几天才完成任务,有点成就感,最后整理总结一下这部分的内容,希望更多同僚受益. 一.使用前准备 环境:Python3.6 安装结巴:pip install ji ...
- 关于《后浪》的B站弹幕分析总结(一)——爬取B站视频的上万条弹幕的方法
目录 一.先尝试爬取1000条 1 .1 查找弹幕所在地址 1.2 代码实现 二.1000条不够我想要更多怎么办? 三.B站弹幕文件里的其他信息有用吗? 注意:这是一篇技术类文章 前几天我做了B站&l ...
- 关于《后浪》的B站弹幕分析总结(四)——Python实现LDA内容主题挖掘及主题可视化
目录 一.使用sklearn里面的LatentDirichletAllocation做主题挖掘 二.使用gensim的ldamodel做主题挖掘 三.如何将结果可视化 四.如何确定主题数 4.1 观察 ...
- 关于《后浪》的B站弹幕分析总结(三)——怎么制作好看的交互式词云
目录 一.对分词做词频统计 二.使用wordcloud展示词云 二.使用pyecharts绘制词云 三.使用词云制作工具 与本文相关内容链接: B站视频<[数说弹幕]我不小心看了后浪弹幕> ...
- python爬取b站弹幕分析_Python 爬取「后浪」弹幕,看看大家都在说什么
前天,正好是五四青年节, B 站的一条献给年轻人的视频「后浪」火了,一时间到处都是各种讨论「后浪」的声音. 其他的平台先不管,先看看 B 站平台本身用户对「后浪」的评价. B 站的评论是弹幕的形式,想 ...
- python爬取b站弹幕分析_python爬取B站视频弹幕分析并制作词云
目录1.分析网页 2.爬虫+jieba分词+制作词云2.1爬虫 2.2jieba分词 2.3制作词云 3.成品展示 4.完整代码 1.分析网页 视频地址:https://www.bilibili.co ...
- 爬虫6_周杰伦新歌《Mojito》B站弹幕分析
6.12周杰伦发布新歌<Mojito>,赶紧蹭个热点来看一下大家弹幕都会说点什么. 爬取链接[官方MV]Mojito - 周杰伦 本项目源码,提取码duq8 目前弹幕只能抓取1000条,再 ...
- python爬取b站弹幕分析_B站弹幕爬取原理解析(python)
感谢 原理 概念 cid : 爬取弹幕需要的id号,可以由BV号通过API接口获得 步骤BV转cid 浏览器输入:https://api.bilibili.com/x/player/pagelist? ...
- python爬取b站弹幕分析_如何爬取b站弹幕文件
我们知道编写一个爬虫之前最重要的是进行网页结构的分析,确定你要抓取的部分是属于网页结构的哪一部分.以"你绝对没听过的梁朝伟唱歌 一开口就苏了 可惜被梁家辉开腔了"为例子,打开谷歌浏 ...
最新文章
- C#按关闭按钮实现最小化,按ESC才关闭的实现【含系统消息大全】
- 关于 jest 测试结果如何在浏览器上显示的问题
- Windows 10使用PowerShell创建系统还原点的技巧
- lsof查看进程占用文件_lsof命令查看进程socket相关信息
- CodeIgniter 2.X 于 PHP5.6 兼容错误
- java.lang.NoClassDefFoundError: javax/transaction/Synchronization (jUnit测试报错)
- iview this.$modal 关闭所有的弹窗_一看会用TOB弹窗应用场景
- dnn模型 list index out of range_通过MalConv模型实现恶意软件的分类
- java.util.LinkedHashMap cannot be cast to Entity
- [蓝桥杯历届试题] 汉诺塔计数
- 最多只能选择两个多选框的jQuery功能实现
- 计算机硬件的基本组成(计算机组成原理3)
- JS函数传参是传值还是传引用
- 品牌在B站做投放,如何选择优质带货UP主?
- 干货!我被面试官绝地反杀了,附详细答案
- 三 windows搭建rocketmq集群(双主双从)
- 被假阀门坑过吗?如何辨别翻新阀门?
- Linux系统下的分区管理
- 第十届蓝桥杯题解(部分)
- 雅马哈机械手的基本操作,与上位机通讯程序编写
热门文章
- 计算机毕业答辩问题整理
- 计算机三级(网络技术)笔记
- 一个全新时代,皱纹不在是噩梦
- arcgistif合并_ARCGIS拼接影像教程
- 【Excel函数】计算指定单元格内的指定字符数量——COUNTIF()
- 2021年金属非金属矿山(地下矿山)安全管理人员考试技巧及金属非金属矿山(地下矿山)安全管理人员复审模拟考试
- 梁宁《产品思维》之10抓住做产品的“点”(痛点、爽点和痒点)
- electron如何控制电脑摄像头
- 关于EatStreet 数据搜索和导航分类的功能报告
- C++ Style Casts