帮师妹写的裁判文书内容提取:可做进一步提取模板

  • 一、提取结果
  • 二、提取内容
  • 三、代码

一、提取结果

二、提取内容

 需求内容为:被告、裁判文书案号、时间、地域、刑事强制措施、罪名、刑罚整体运用的技术:主要采取的是正则匹配,因为裁判文书的这些表述是存在一定的模式的,法言法语的要求是的语言表述一般比较固定;当然在被告名字处正则匹配可能会遗漏,于是通过pyhanlp实体识别进行了进一步的精确化遇到的一些问题:多主体不同罪名这一问题主要通过被告名称进行定位,如果名字在该段文字中且存在这一罪名,则形成指向关系,被告犯xx罪

三、代码


```python
# -*-  coding: utf-8 -*-
# Author: cw
# Datetime : 2020
# software: PyCharm
# 收获:
import time,json,random,re
from fuzzywuzzy import fuzz
from tqdm import tqdm
from pyhanlp import *
from 数据集处理过程.非结巴而是符号分词 import Symbol_cutword as sy
#自行封装的读取docx内容的函数
import pandas as pd
from common.线程方法化 import Thread_Pool as t
#自行封装的多线程函数
from 数据集处理过程.中文数字转阿拉伯 import simple_math as sm
#自行封装的中文数字转阿拉伯数字的函数
class Get_message():def __init__(self):self.file = os.path.dirname(__file__)def get_name(self,file):#实体识别:名称global name_onames,names_o1,names_o2 = [],[],[]CRFLexicalAnalyzer = JClass("com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer")analyzer = CRFLexicalAnalyzer()for t in analyzer.analyze(file):if "nr" in str(t):name_o = "".join(re.findall(r'[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b\u4e00-\u9fa5]+',str(t).replace("犯", "")))if name_o == "某某":passelse:if len(name_o)<=3:names_o1.append(name_o + "(人名)")else:name_o = name_o[:3]names_o1.append(name_o + "(人名)")elif "nt" in str(t):name_o = "".join(re.findall(r'[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b\u4e00-\u9fa5]+',str(t).replace("犯", "")))if name_o == "某某":passelse:names_o1.append(name_o + "(机构名)")#print(names_o1)if names_o1 != []:names = list(set(names_o1))return namesdef get_text_from_wenshu(self, file):names,user_dict = [],[]dataframe= {}texts = sy().period_cutword(file)# 公开与否if "不宜在互联网公布" in texts or len(texts) <= 20:dataframe['公开状况'] = "不公开"dataframe['案件名称'] = file.split("\\")[-1].split(".")[0]names = self.get_name(file.split("\\")[-1].split(".")[0])if names == []:dataframe["被告"] = "不明"dataframe["被告"] = "".join(names)"""excel写入"""dataframes = pd.DataFrame(dataframe, index=[0])writer = pd.ExcelWriter(r"E:\Firefox\shimei2\{name}.xls".format(name=file.split("\\")[-1].split(".")[0]))dataframes.to_excel(writer, sheet_name='数据', index=False)writer.save()else:dataframe['公开状况'] = "公开"for i in texts[:5]:try:name_ = re.search("被告人(.*?),",i).group().replace("被告人","").replace(",","")names.append(name_)except:pass#地域准备try:area = re.search("湖南省(.*?)书", i).group().replace("刑事判决书","").replace("刑事裁定书","")dataframe["地域"] = areadataframe["指控机关"] = area+"人民检察院"dataframe["审判法院"] = area+"人民法院"except:passcontent = ["被告人", "原告人", "被上诉人", "上诉人"]for n in content:if fuzz.partial_ratio(n, i) > 50:for nrt in self.get_name(i):names.append(nrt)#异常if names == []:for i in texts[:10]:for nrt in self.get_name(i):names.append(nrt)names = list(set(names))#print(names)for yuan in names:#列表前移出错if "检察院" in yuan:if "人名" in yuan:yuan = yuan.split("人名")for yuan_1 in yuan:if "检察" in yuan_1:yuan2= yuan_1.replace("(机构名)","").replace("(","").replace(")","")dataframe["指控机关"] = yuan2dataframe["地域"] = yuan2.replace("人民检察院", "").replace('检察院', '').replace("(机构名)","")else:names.append(yuan_1.replace("(", "").replace(")", ""))else:dataframe["指控机关"] = yuan.replace("(机构名)","")dataframe["地域"] = yuan.replace("人民检察院", "").replace('检察院', '').replace("(机构名)","")try:for i in range(2):names.remove(yuan)except:passif "法院" in yuan:if "人名" in yuan:yuan = yuan.split("人名")for yuan_1 in yuan:if "法院" in yuan_1:yuan2 = yuan_1.replace("(机构名)","").replace("(","").replace(")","")dataframe["审判法院"]= yuan2dataframe["地域"] = yuan2.replace("法院", "").replace('人民法院', '').replace("(机构名)","")else:names.append(yuan_1.replace("(", "").replace(")", ""))else:dataframe["审判法院"] = yuan.replace("人民法院", "").replace('法院', '').replace("(机构名)","").replace("(","").replace(")","")dataframe["地域"] = yuan.replace("法院", "").replace('人民法院', '').replace("(机构名)","").replace("(","").replace(")","")try:for i in range(2):names.remove(yuan)except:passif "市" in yuan and len(yuan) <=3:try:for i in range(2):names.remove(yuan)except:passif names == []:print(file)names = ["不明"]dataframe["被告"] = "".join(names).replace("[", "").replace("]", "")dataframe["刑事强制措施"] = "无"# 裁判文书名字dataframe['案件名称'] = file.split("\\")[-1].split(".")[0]# 案号try:number = re.search("((.*?)号", texts[0].strip()).group()dataframe["案号"] = number#dataframe["时间"] = re.search("((.*?))", number).group().replace("(", "").replace(")", "")except:number = re.search("湘(.*?)号", texts[0]).group()dataframe["案号"] = numberfor i in texts:if '〇' in i:reg = '([\u96f6\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u767e\u5343\u4e07\u3007]+)年'time = "".join(re.findall(reg, i))[:4]time = sm(time)dataframe["时间"] = timefor na in names:if na in i:if fuzz.partial_ratio("查封", i) > 80:dataframe["刑事强制措施"] = f"查封:{na}"elif fuzz.partial_ratio("扣押", i) > 80:dataframe["刑事强制措施"] = f"扣押:{na}"elif fuzz.partial_ratio("冻结", i) > 80:dataframe["刑事强制措施"] = f"冻结:{na}"elif fuzz.partial_ratio("逮捕", i) > 80:dataframe["刑事强制措施"] = f"逮捕:{na}"if fuzz.partial_ratio("查封", i) > 80:dataframe["刑事强制措施"] = f"查封:{na}"elif fuzz.partial_ratio("扣押", i) > 80:dataframe["刑事强制措施"] = f"扣押:{na}"elif fuzz.partial_ratio("冻结", i) > 80:dataframe["刑事强制措施"] = f"冻结:{na}"elif fuzz.partial_ratio("逮捕", i) > 80:dataframe["刑事强制措施"] = f"逮捕:{na}"zuimings= str(re.findall("判决如下(.*?)如不服本判决", "。".join(texts))).replace("[","").replace("]","")+"。"zuiming=zuimings.split("。")#准备dataframe["罪名"] = "不明"dataframe["刑罚"] = "不明"for zuim in zuiming:#有就更新for name_c in names:name_c = name_c.replace("(人名)", "").replace("(机构名)", "")if name_c in zuim and "罪" in zuim:try:zui1 = re.search(f"{name_c}(.*?)罪", zuim).group()dataframe["罪名"] = zui1.replace("[", "").replace("]", "").replace("犯", "-")except:passif "判处" in zuim and "。" in zuim:pen1 = re.search("判处(.*?)。", zuim).group()dataframe["刑罚"] = str(pen1)else:try:pen1 = re.search("判处(.*?))", str(zuim)+")#").group()dataframe["刑罚"] = str(pen1)except:pass#异常情况if dataframe["罪名"] == "不明":try:cri = re.search("犯(.*?)罪", zuimings).group().replace("犯", "")except:#print(file)cri = re.search("被告人(.*?)罪",  "。".join(texts)).group().replace("被告人", "").replace("一","")if cri != []:dataframe["罪名"] = criif dataframe["刑罚"] == "不明":try:#应对裁判文书出现序列错误pen1 = re.search("判处(.*?)。", zuimings).group().replace("判处", "")except:try:pen1 = re.search("判(.*?)。", "。".join(texts)).group().replace("判", "")except:try:pen1 = re.search("判(.*?))", "。".join(texts)).group().replace("判", "")except:pen1 = "没有提取到相关信息"if pen1 != "没有提取到相关信息" :if len(pen1)>30:pen1 = re.search("判(.*?))", "。".join(texts)+")").group().replace("判处", "")dataframe["刑罚"] = pen1[:30]else:dataframe["刑罚"] = pen1"""excel写入"""#print(dataframe)dataframes = pd.DataFrame(dataframe, index=[0])writer = pd.ExcelWriter(r"E:\Firefox\shimei2\{name}.xls".format(name=file.split("\\")[-1].split(".")[0]))dataframes.to_excel(writer, sheet_name='数据', index=False)writer.save()def threading(self,files):threads = glob.glob(os.path.join(files,"*.docx"))#print(threads[168:171])t(2,self.get_text_from_wenshu,threads).concurrent_Thread_package()if __name__ == "__main__":os.makedirs("E:\Firefox\shimei2")#excel文件的存储目录files = r"E:\Firefox\shimei_wenshu15"#files为目标文件的目录,里面必须是.docx格式的文件,不能是.doc文件格式,因为python没有处理.docgGet_message(index).threading(files)

帮师妹写的裁判文书内容提取程序:可做进一步提取模板相关推荐

  1. 帮我写一个拦截APP广告的程序

    在写程序之前,首先你需要了解如何去分析和识别应用程序中的广告.一种方法是通过网络请求分析来识别广告.例如,你可以通过检测网络请求的 URL 来判断它是否是广告,或者你可以通过分析请求中所包含的数据来识 ...

  2. python自动卸载win程序_朋友说:能不能用python,帮我写一个“制作工资条”的自动化程序...

    本文说明 今天和一个朋友吃饭,她说我经常使用Excel制作工资条,但是每个月都要做一遍,你能不能用python写一个代码,能够自动化完成这个工作.这当然可以啦,就是这么牛逼! 我们先来看看原始数据是什 ...

  3. 打印工资条怎么做到每个人都有表头明细_朋友说:能不能用python,帮我写一个“制作工资条”的自动化程序?...

    本文说明 今天和一个朋友吃饭,她说我经常使用Excel制作工资条,但是每个月都要做一遍,你能不能用python写一个代码,能够自动化完成这个工作.这当然可以啦,就是这么牛逼! 我们先来看看原始数据是什 ...

  4. 你能帮我写出三层电梯的PLC程序吗

    对不起,我不能为您编写完整的PLC程序,但我可以给您一些指导和建议. 控制三层电梯的PLC程序通常需要考虑以下因素: 电梯的运动:需要考虑电梯的上升和下降,以及当电梯停止在某一层时的处理. 按钮的操作 ...

  5. 裁判文书上诉理由分类统计

    裁判文书上诉理由分类统计 一.统计结果 二.实现方法 (一)裁判文书上诉理由提取 1.分类标准 2.裁判文书内容提取方式 3.实现代码 4.标签贴好后 三.文本分类 (一)文本分类源码来源 (二)数据 ...

  6. 西山小菜鸟之Scrapy学习笔记---爬取企查查网公司的裁判文书信息

    前言 本文接着上文,爬取企查查的公司裁判文书信息.企查查  本文中若存在不详细的地方欢迎各位大神网友提问,若有错误的地方,希望大家指正.谢谢!! ? ? 粗略分析 点击进入要查询的公司可以进入该公司的 ...

  7. JS逆向——裁判文书网(详细图文步骤)

    写在前面:本篇博客很长,都是手把手一步一步的教程,跟着做就能出结果,文章总共分为以下三部分,我也会在3个部分中详细的说明步骤 (1)接口请求头参数验证 (2)接口响应数据DES3加密 (3)登录状态验 ...

  8. 裁判文书网 爬虫 最新更新2020-08-12

    该程序采用Node模拟人工操作,自动获取页面内容,并将获取的数据保存到excel中(每1000条保存一个文件,可以设置保存的条数).excel文件内容如下图: 声明:本文章是以学习和交流为目的,数据源 ...

  9. 瑞数(裁判文书)js的加密分析

    抓了半年多的裁判文书突然停了,查看log发现HTTP响应码全是202,分析页面发现原网站在cookie上做了加密.经分析正确的请求流程如下 1. 请求首页,返回两个set-cookie响应头,cook ...

最新文章

  1. [nowCoder] 局部最小值位置
  2. java冒泡排序_Java中的经典算法之冒泡排序(Bubble Sort)
  3. 基于SpringBoot的个人博客系统
  4. python关键字from,Python 中的 yield from 关键字
  5. 设计模式在vue中的应用(五)
  6. python代码读取外部变量_关于python闭包的问题,内部函数可以获取外部函数的变量吗?...
  7. 计算机开机coms错误,电脑开机提示“CMOS checksum error-Defaults loaded”怎么办?
  8. 射电天文谱线接收机和终端系统
  9. Android-JNI开发系列《十一》实践-利用Android C源码实现GIF图片的播放
  10. 灵活就业协议影响应届身份吗,档案应该如何处理
  11. 提升效率Mysql函数(function)|存储过程(procedure)
  12. 一、博客首页搭建搭建《iVX低代码仿CSDN个人博客制作》
  13. 欧姆龙OMRON CP1H  PLC与台达 DOP-B触摸屏通讯
  14. 华人女性社交社区的存在可能
  15. Flurry——统计和分析用户行为
  16. signature=8df1e41f626c2f25b2dd4e97b89cc127,来用百度密语吧!!!
  17. 总结了一些微信小程序推广方法
  18. Win7关闭防火墙的脚本
  19. 用docker搭建discuz论坛
  20. FreeBSD#MySQL安装配置

热门文章

  1. HTML学习笔记-----行内元素、块级元素和行内块元素
  2. LitJson输出格式化Json字符串
  3. 编译内核出错:/bin/sh: 1: bison: not found scripts/Makefile.lib:196: recipe for target ‘scripts/kconfig/zco
  4. Streamsets相关资料汇总
  5. Linux学习(五):挂载新的硬盘
  6. MYSQL命令集大全
  7. Field myFeignClient in com.zkh.controller.FeignController required a bean of type 'com.zkh.feign.MyF
  8. 0基础如何学习安卓开发
  9. 很牛的求职经历(转)
  10. Mysql - 知识图谱总览