【NLP】⚠️学不会打我! 半小时学会基本操作 5⚠️ 家暴归类, 妈妈再也不同担心我被家暴啦

  • 概述
  • 数据介绍
  • 词频统计
  • 朴素贝叶斯
  • 代码实现
    • 预处理
    • 主函数

概述

从今天开始我们将开启一段自然语言处理 (NLP) 的旅程. 自然语言处理可以让来处理, 理解, 以及运用人类的语言, 实现机器语言和人类语言之间的沟通桥梁.

数据介绍

该数据是家庭暴力的一份司法数据.分为 4 个不同类别: 报警人被老公打,报警人被老婆打,报警人被儿子打,报警人被女儿打. 今天我们就要运用我们前几次学到的知识, 来实现一个 NLP 分类问题.

词频统计

CountVectorizer是一个文本特征提取的方法. 可以帮助我们计算每种词汇在该训练文本中出现的频率, 以获得词频矩阵.

格式:

vec = CountVectorizer(analyzer="word",max_features=4000)

参数:

  • analyzer: 对语料进行 “word” 或 “char” 分析
  • max_features: 最大关键词集
方法列表 作用
fit() 拟合
transform() 返回词频统计矩阵

朴素贝叶斯

MultinomialNB多项式朴素贝叶斯, 是一种非常常见的分类方法.

公式:

P(B|A) = P(B)*P(A|B)/P(A)

例子:

假设北京冬天堵车的概率是 80% P(B) = 0.8假设北京冬天下雪的概率是 10% P(A) = 0.1如果某一天堵车,下雪的概率是 10%, P(A|B) = 0.1我们就可以得到P(B|A)= P(B)堵车的概率0.8 * P(A|B),如果某一天堵车,下雪的概率 0.1除以P(A) 下雪的概率 = 0.1,等到0.8也就是说如果北京冬天某一天下雪,那么有80%可能性当天会堵车

代码实现

预处理

import random
import jieba
import pandas as pddef load_data():"""加载数据, 进行基本转换:return: 老公, 老婆, 儿子, 女儿 (家暴数据)"""# 加载停用词stopwords = pd.read_csv('data/stopwords.txt', index_col=False, quoting=3, sep="\t", names=['stopword'],encoding='utf-8')stopwords = stopwords['stopword'].valuesprint(stopwords, len(stopwords))# 加载语料laogong_df = pd.read_csv("data/beilaogongda.csv", encoding="utf-8", sep=",")laopo_df = pd.read_csv("data/beilaopoda.csv", encoding="utf-8", sep=",")erzi_df = pd.read_csv("data/beierzida.csv", encoding="utf-8", sep=",")nver_df = pd.read_csv("data/beinverda.csv", encoding="utf-8", sep=",")# 去除nanlaogong_df.dropna(inplace=True)laopo_df.dropna(inplace=True)erzi_df.dropna(inplace=True)nver_df.dropna(inplace=True)# 转换laogong = laogong_df.segment.values.tolist()laopo = laopo_df.segment.values.tolist()erzi = erzi_df.segment.values.tolist()nver = nver_df.segment.values.tolist()# 调试输出print(laogong[:5])print(laopo[:5])print(erzi[:5])print(nver[:5])return laogong, laopo, erzi, nver, stopwordsdef pre_process_data(content_lines, category, stop_words):"""数据预处理:param content_lines: 语料:param category: 分类:param stop_words: 停用词:return: 预处理完的数据"""# 存放结果sentences = []# 遍历for line in content_lines:try:segs = jieba.lcut(line)segs = [v for v in segs if not str(v).isdigit()]  # 去除数字segs = list(filter(lambda x: x.strip(), segs))  # 去除左右空格segs = list(filter(lambda x: len(x) > 1, segs))  # 长度为1的字符segs = list(filter(lambda x: x not in stop_words, segs))  # 去除停用词result = (" ".join(segs), category)  # 空格拼接sentences.append(result)except Exception:# 打印错误行print(line)continuereturn sentencesdef pre_process():"""数据预处理主函数:return: 返回预处理好的语料 (分词 + 标注)"""# 读取数据laogong, laopo, erzi, nver, stop_words = load_data()# 预处理laogong = pre_process_data(laogong, 0, stop_words)laopo = pre_process_data(laopo, 1, stop_words)erzi = pre_process_data(erzi, 2, stop_words)nver = pre_process_data(nver, 3, stop_words)# 调试输出print(laogong[:2])print(laopo[:2])print(erzi[:2])print(nver[:2])# 拼接result = laogong + laopo + erzi + nverreturn resultif __name__ == '__main__':pre_process()

主函数

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from pre_peocessing import pre_processdef main(sentences):"""主函数"""# 实例化vec = CountVectorizer(analyzer="word",max_features=4000)# 取出语料和标签x, y = zip(*sentences)# 分割数据集X_train, X_test, y_train, y_test = train_test_split(x, y, random_state=0)# 转换为词袋模型vec.fit(X_train)print(vec.get_feature_names())# 实例化朴素贝叶斯classifier = MultinomialNB()classifier.fit(vec.transform(X_train), y_train)# 预测y_predit = classifier.predict(vec.transform(X_test))# print(y_predit)# print(y_test)# 计算准确率score = classifier.score(vec.transform(X_test), y_test)print(score)if __name__ == '__main__':data = pre_process()main(data)

输出结果:

['!' '"' '#' ... '450' '22549' '22544'] 2627
['报警人被老公打,请民警到场处理。', '看到上址女子被老公打  持刀 需要救护 (已通知120,如民警到场不需要,请致电120或110)请民警带好必要的防护设备,并且注意自身安全。', '报警人被老公打,醉酒持刀,(请民警携带必要个人防护装备到场处理,并注意自身安全。)', '报警人被老公打,对方人在,无需救护,请民警到场处理。', '报警人称 被老公打 1人伤 无需120 请民警到场处理。']
['报警人称被妻子打,未持械,人伤,无需120,妻子在场,请民警注意自身安全,请民警到场处理。', '家暴,称被其老婆打了,无持械,1人伤无需救护,请民警到场处理。', '报警人被老婆打,持械,无人伤,请民警到场处理,并注意自身安全。', '家庭纠纷报警人被老婆打 无需救护,请民警到场处理。', '闹离婚引发被老婆打,无持械,人无伤,请民警到场处理。']
['报警人被儿子打,无人伤,请民警到场处理。', '报警人称被儿子打 请民警到场处理。(内线:22649)', '报警人被儿子打 无人伤,无持械, 请民警携带必要防护装备并注意自身安全。', '报警人被儿子打,请民警到场处理', '报警人称被儿子打,人轻伤(一人伤),无持械。请民警携带必要的防护设备,并注意自身安全 请民警到场处理。']
['报警人称 被女儿打,1人伤 无需120,请民警到场处理。', '报警人被女儿打,因家庭纠纷,对方离开,请民警携带必要的防护设备,并注意自身安全。', '报警人被女儿打,无持械,请民警到场处理。', '报警人称被女儿打,无持械,人无事,请民警到场处理。请携带必要的防护装备,并请注意自身安全。', '报警人称其老婆被女儿打,无持械,人未伤,请民警到场处理。']
[('报警 老公 民警 到场', 0), ('上址 老公 持刀 救护 通知 民警 到场 致电 民警 防护 设备', 0)]
[('报警 人称 妻子 持械 人伤 无需 妻子 在场 民警 民警 到场', 1), ('家暴 老婆 持械 人伤 无需 救护 民警 到场', 1)]
[('报警 儿子 无人 民警 到场', 2), ('报警 人称 儿子 民警 到场', 2)]
[('报警 人称 女儿 人伤 无需 民警 到场', 3), ('报警 女儿 家庭 纠纷 离开 民警 携带 防护 设备', 3)]
['aa67c3', 'q5', '一人', '一人伤', '一名', '一拳', '一楼', '一辆', '丈夫', '上址', '不上', '不住', '不倒翁', '不明', '不清', '不用', '不行', '不让', '不详', '不通', '不需', '东西', '中断', '中有', '中称', '丰路', '乒乓', '九亭', '九泾路', '争吵', '亚美尼亚人', '人代报', '人伤', '人借', '人头', '人手', '人无事', '人无伤', '人未伤', '人称', '人系', '代为', '代报', '休假', '伤及', '住户', '保安', '保温瓶', '做好', '催促', '催问', '儿子', '儿称', '充电器', '公交车站', '公分', '公路', '关在', '关机', '其称', '其近', '具体地址', '冲突', '几天', '凳子', '出血', '出轨', '分处', '分局', '分已', '分所处', '分钟', '刚刚', '到场', '前妻', '剪刀', '割伤', '加拿大', '区划', '医治', '医院', '十一', '卧室', '卫生局', '去过', '又称', '反打', '反锁', '发生', '受伤', '变更', '口角', '口齿不清', '后往', '告知', '咬伤', '咱不需', '啤酒瓶', '喉咙', '喊救命', '喜泰路', '喝酒', '嘴唇', '回到', '回去', '回家', '回来', '在场', '在家', '地上', '地址', '坐在', '处置', '处警', '夏梦霭', '外伤', '外国人', '外面', '多岁', '大桥', '大理石', '大碍', '夫妻', '头上', '头伤', '头晕', '头痛', '头部', '奥迪', '女儿', '妇女', '妈妈', '妹妹', '妻子', '威胁', '婚外情', '婴儿', '媳妇', '孙女', '孤老', '定位', '家中', '家庭', '家庭成员', '家庭暴力', '家暴', '家门', '对峙', '对象', '将门', '小区', '小姑', '小孩', '尾号', '居委', '居委会', '居民', '岳母', '工作', '工作人员', '工具', '工号', '已处', '市场', '并称', '座机', '开门', '异地', '弄口', '引发', '弟弟', '当事人', '得知', '必备', '怀孕', '急救车', '情况', '情况不明', '情绪', '情节', '成功', '手上', '手持', '手指', '手机', '手机号', '手痛', '手部', '手里', '打人', '打伤', '打倒', '打其', '打打', '打架', '打死', '打电话', '打破', '打耳光', '打请', '扫帚', '抓伤', '报称', '报警', '担子', '拖鞋', '拦不住', '拿出', '拿到', '拿尺', '拿长', '拿鞋', '持刀', '持械', '持续', '持饭', '掐着', '接电话', '控制', '措施', '携带', '放下', '放到', '救命', '救护', '救护车', '无人', '无碍', '无需', '早上', '昨天', '暂时', '有伤', '有刀', '木棍', '杀人', '村里', '来电', '杯子', '松江', '桌上', '梅陇', '棍子', '棒头', '椅子', '楼上', '榔头', '此警', '武器', '武器装备', '残疾人', '母亲', '母子', '毛巾', '民警', '水壶', '水果刀', '求助', '沈杨', '没事', '沪牌', '注意安全', '活动室', '派出所', '流血', '浦东', '激动', '烟缸', '烧纸', '照片', '爬不起来', '父亲', '父女', '牙齿', '物业公司', '物品', '玩具', '现人', '现刀', '现场', '现称', '现要', '现跑', '玻璃', '瓶子', '用具', '用脚', '电告', '电线', '电视机', '电话', '疑似', '疾病', '白色', '皮带', '盒子', '相关', '看不见', '眼睛', '矛盾', '砍刀', '砸坏', '确认', '离去', '离婚', '离开', '离异', '称其', '称属', '称有', '称现', '称要', '稍后', '窗口', '竹棍', '等候', '等同', '筷子', '精神', '精神病', '纠纷', '经济纠纷', '翟路', '翟路纪', '老人', '老伯伯', '老伴', '老公', '老北', '老大爷', '老太', '老太太', '老头', '老婆', '老年', '联系电话', '肋骨', '肯德基', '脖子', '脸盆', '自动', '自残', '自称', '自行', '致电', '英语翻译', '菜刀', '虐待', '螺丝刀', '衣服', '衣架', '补充', '装备', '装机', '西门', '解释', '警卫室', '警察', '设备', '询问', '该户', '赌博', '走后', '赶出来', '起因', '路人报', '路边', '路近', '身上', '转接', '轻伤', '轻微伤', '轿车', '辛耕路', '过场', '过警', '过顾', '还称', '进屋', '追其', '逃出来', '逃逸', '通知', '通话', '邻居', '酒瓶', '醉酒', '钥桥', '铁棍', '铁质', '锁事', '锅铲', '锤子', '门卫', '门卫室', '门口', '门外', '门岗', '闵行', '防护', '阿姨', '陈路', '隔壁', '鞋子', '韩国', '项链', '验伤', '骨折', '黑色', '鼻子', '龙州', '龙舟']
C:\Users\Windows\Anaconda3\lib\site-packages\sklearn\feature_extraction\image.py:167: DeprecationWarning: `np.int` is a deprecated alias for the builtin `int`. To silence this warning, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecationsdtype=np.int):
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\Windows\AppData\Local\Temp\jieba.cache
Loading model cost 0.922 seconds.
Prefix dict has been built successfully.
1.0Process finished with exit code 0

准确率基本为 100%. 妈妈再也不同担心我被家暴啦!

【NLP】⚠️学不会打我! 半小时学会基本操作 5⚠️ 家暴归类, 妈妈再也不同担心我被家暴啦相关推荐

  1. 【NLP】⚠️学不会打我! 半小时学会基本操作 8⚠️ 新闻分类

    [NLP]⚠️学不会打我! 半小时学会基本操作 8⚠️ 新闻分类 概述 TF-IDF 关键词提取 TF IDF TF-IDF TfidfVectorizer 数据介绍 代码实现 概述 从今天开始我们将 ...

  2. 【NLP】⚠️学不会打我! 半小时学会基本操作 2⚠️词向量模型简介

    [NLP]⚠️学不会打我! 半小时学会基本操作 2⚠️词向量模型简介 概述 词向量维度 Word2Vec CBOW 模型 Skip-Gram 模型 负采样模型 词向量的训练过程 1. 初始化词向量矩阵 ...

  3. 【NLP】⚠️学不会打我! 半小时学会基本操作 4⚠️词向量模型

    [NLP]⚠️学不会打我! 半小时学会基本操作 4⚠️词向量模型 概述 词向量 词向量维度 Word2Vec CBOW 模型 Skip-Gram 模型 负采样模型 词向量的训练过程 1. 初始化词向量 ...

  4. 【NLP】学不会打我 半小时学会基本操作 14 文本处理 <PAD><EOS><UNK><GO>

    [NLP]⚠️学不会打我! 半小时学会基本操作 14⚠️ 文本处理 概述 文本处理 概述 从今天开始我们将开启一段自然语言处理 (NLP) 的旅程. 自然语言处理可以让来处理, 理解, 以及运用人类的 ...

  5. 【OpenCV】⚠️高手勿入! 半小时学会基本操作 15⚠️ 对象测量

    [OpenCV]⚠️高手勿入! 半小时学会基本操作 15⚠️ 对象测量 概述 对象测量 多边形拟合 计算对象中心 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就 ...

  6. 【OpenCV】 ⚠️高手勿入! 半小时学会基本操作 24⚠️ SIFT 算法

    [OpenCV] ⚠️高手勿入! 半小时学会基本操作 24⚠️ SIFT 算法 概述 图像尺度空间 多分辨率金字塔 高斯差分金字塔 计算极值点 SIFT 算法 函数 实战 概述 OpenCV 是一个跨 ...

  7. 【OpenCV】高手勿入! 半小时学会基本操作 4 图像裁剪融合

    [OpenCV]高手勿入! 半小时学会基本操作 4 概述 图像裁剪 数值计算 图像融合 概述 OpenCV 是一个跨平台的计算机视觉库, 支持多语言, 功能强大. 今天小白就带大家一起携手走进 Ope ...

  8. 学会这招,妈妈再也不担心我的排名上不去了

    学会这招,妈妈再也不担心我的排名上不去了 前言 一.思路分析 二.获取答案 三.提交答案 四.猜猜猜 写在最后 Tip:本文仅供学习与参考,且勿用作不法用途~ 前言 相传,就在前几日,kimol君在网 ...

  9. 计算机管理怎么给硬盘重新合区,一分钟学会磁盘合区,妈妈再也不用担心!

    原标题:一分钟学会磁盘合区,妈妈再也不用担心! 自从上一篇文章<一分钟搞定电脑磁盘分区,再也不求人!>中小编讲到了,日常生活中我们的电脑该如何区分区,留言区就有小伙伴问我,怎么把D盘的容量 ...

最新文章

  1. 信息系统分析与设计杨选辉_信息系统分析与设计(第2版)
  2. 获取节点及元素的代码
  3. TCP socket编程记录(C语言)
  4. docwizard c++程序文档自动生成工具_如何开发一个基于 TypeScript 的工具库并自动生成文档
  5. eclipse maven打包_我的Java Web之路47 - 使用Maven改造租房网工程
  6. js 父子标签同时设置onclick,字标签触发父标签onclick解决办法
  7. python异常信息中最重要的部分是_Python中获取异常(Exception)信息
  8. LVS (Linux虚拟服务器)模型及算法
  9. npm i 报错 'match' of undefined 错误以及删除node_modules失败
  10. 安装netframewo酷比魔方平板电脑一键Root教程
  11. Linux: Manjaro/Arch logiops 罗技鼠标驱动安装教程
  12. 第八届泰迪杯B题特等奖比赛论文——基于Mask R-CNN及Yolov4的电力巡检中绝缘子缺陷研究
  13. 策略模式探究(二)多个门禁对接使用策略模式
  14. 网易云课堂-数据结构
  15. 基于51单片机霍尔汽车自行车码表测速测里程显示proteus仿真原理图PCB
  16. 非参数与半参数统计之核函数
  17. 【愚公系列】2022年02月 微信小程序-数据绑定
  18. ROS——UDRF机器人模型优化(xacro)
  19. 使用Python进行并发编程
  20. 用字体,每次都要先开软件,ifonts闪退?不好用怎么办

热门文章

  1. 肿瘤 材料 计算机模拟,射频加热治疗肿瘤体模实验的数值模拟.pdf
  2. 【洛谷】【分支】洛谷团队系统
  3. 计算两个数平均数的三种方法
  4. selenium安装和初探
  5. 关灯游戏 Lights out (三)(线性代数+高斯消元,搜索全部解)
  6. HDU 4770 Lights Against Dudely
  7. 光庭2021c语言笔试题,上海市闵行区莘松中学2020—2021学年八年级下学期期中考试语文试题.docx...
  8. 硬盘数据剪切了还可以恢复吗?强力推荐好办法
  9. Andrew Ng宣布离职百度:将开启在人工智能领域的新篇章
  10. 六兄弟原来手中各有多少桔子?