裁判文书关键信息提取

裁判文书关键信息提取单个文件等级地处理 程序实现 1 传入一个路径 doc 或 docx 文件路径 系统会自动判断是 doc 文件还是 docx 文件 doc 文件会转换为 docx 文件 在本路径下生成同文件名 json 文件 2 传入一个路径 返回一个列表 内嵌套固定类型字典 importosimpo docimportdoc 1 通过文件路径解析信息 txt 文件编码类型为 ANSI 获取案件名 文件名 案由 案件类型 文书类型

 项目初期的部分代码,比较粗糙,随便看看就行了,效果不太好,且我后面又改了很多。

2021年11月8日

"""单个文件等级地处理""" # 程序实现:1.传入一个路径(doc或docx文件路径,系统会自动判断是doc文件还是docx文件,doc文件会转换为docx文件),在本路径下生成同文件名json文件。2.传入一个路径,返回一个列表(内嵌套固定类型字典)。 import os import docx import json from process_doc import doc2docx_1 # 通过文件路径解析信息(txt文件编码类型为ANSI),获取案件名(文件名)、案由、案件类型、文书类型 def case_name(filepath, anyoutxt, leixingtxt, papertypetxt, casetypetxt): # 获取案件名 (path, filename) = os.path.split(filepath) (casename, ext) = os.path.splitext(filename) # 获取案由 anyou = '' f01 = open(anyoutxt, "r") # 设置文件对象,其中txt文件编码类型为ANSI data01 = f01.readlines() # 直接将文件中按行读到list里,效果与方法2一样 f01.close() # 关闭文件 for ay in data01: ay = ay.replace('\n', '') # 删除回车 if ay in casename: anyou = ay # 获取审理程序 chengxu = '' f02 = open(leixingtxt, "r") # 设置文件对象 data02 = f02.readlines() # 直接将文件中按行读到list里,效果与方法2一样 f02.close() # 关闭文件 for ay in data02: ay = ay.replace('\n', '') # 删除回车 if ay in casename: chengxu = ay # 获取文书类型 papertype = '' f03 = open(papertypetxt, "r") # 设置文件对象 data03 = f03.readlines() # 直接将文件中按行读到list里,效果与方法2一样 f03.close() # 关闭文件 for ay in data03: ay = ay.replace('\n', '') # 删除回车 if ay in casename: papertype = ay # 获取诉讼程序 casetype = '' f04 = open(casetypetxt, "r") # 设置文件对象 data04 = f04.readlines() # 直接将文件中按行读到list里,效果与方法2一样 f04.close() # 关闭文件 for ay in data04: ay = ay.replace('\n', '') # 删除回车 if ay in casename: casetype = ay if casename =='': print('未找到案件名') casename = 'void' if anyou == '': print("未找到案由!") anyou = 'void' if chengxu == '': print("匹配审理程序失败!") chengxu = 'void' if papertype == '': print("解析文书类型失败!") papertype = 'void' if casetype == '': print("解析案件类型失败!") casetype = 'void' return (casename, anyou, chengxu, papertype, casetype) # 后两项仅用于传入case_base_information函数 # 读取docx文档,并将每段存入一个列表 def read_docx(path): if not os.path.exists(path): print('发生错误:\n'+path+'文件不存在!') exit(0) # 无错误结束程序 doc = docx.Document(path) paras_temp = [] # 用来存储段落 for p in doc.paragraphs: p1 = p.text.replace(" ", "") # 去除空格,并以字符串的形式存储在列表中 paras_temp.append(p1) print(path + ": 文件读取成功") return paras_temp # 传入读取的文件段落列表,获取案件基本信息:法院,文书性质,案号,判决日期 def case_base_information(paras, papertype, casetype, papertypetxt, casetypetxt): case_court = paras[0] type = paras[1] case_number = paras[2] # 变量名分配 prosecution_organ = '' # 公诉机关 part_people_index0 = 0 # 参与人第一段索引(初始化 part_people_index1 = 0 # 参与人最后一段索引(初始化 law_index0 = 0 # 相关法律初始段(初始化 defendants = [] # 被告人 law_relate = [] # 获取文书类型 if papertype == 'void': f03 = open(papertypetxt, "r") # 设置文件对象 data03 = f03.readlines() # 直接将文件中按行读到list里,效果与方法2一样 f03.close() # 关闭文件 for ay in data03: ay = ay.replace('\n', '') # 删除回车 if ay in type: papertype = ay # 获取诉讼程序 if casetype == 'void': f04 = open(casetypetxt, "r") # 设置文件对象 data04 = f04.readlines() # 直接将文件中按行读到list里,效果与方法2一样 f04.close() # 关闭文件 for ay in data04: ay = ay.replace('\n', '') # 删除回车 if ay in type: casetype = ay # 遍历检索 judge_day = 'void' n1 = 1 for p in paras: # 提取公诉机关(检察院) if '公诉机关' in p: if len(prosecution_organ) <= 0: prosecution_organ = p.replace('公诉机关','') prosecution_organ = prosecution_organ.replace('。','') part_people_index0 = paras.index(p) + 1 n1 += 1 # 案由段,暂时未提取!!!!!!! elif '已审理终结' in p: anyou = p if '年' and '月' and '日' in p: if len(p) <= 12: judge_day = p # 相关法律条文起始段索引 if '法律条文' in p: law_index0 = paras.index(p) if n1 ==2 and (prosecution_organ in p): part_people_index1 = paras.index(p) - 1 # 提取被告人信息(包括辩护人) while part_people_index0 <= part_people_index1: defendants.append(paras[part_people_index0]) part_people_index0 += 1 # 相关法律条文 if law_index0 > 0: while law_index0 < len(paras): law_relate.append(paras[law_index0]) law_index0 += 1 if prosecution_organ == '': print('未提取到公诉机关') prosecution_organ = 'void' if defendants == []: print('未提取到被告人信息') defendants.append('void') if law_relate == []: print('文书未附相关法律条文') law_relate.append('void') if judge_day == 'void': print('提取判决日期失败') return (papertype, casetype, case_court, case_number, judge_day, defendants, prosecution_organ, law_relate) # 将信息存入字典(在此设置字典)(暂时不用) def information_dict(casename, anyou, chengxu, papertype, casetype, fayuan, wenshuleixing, anhao, panjueriqi, beigaoren, gongsuren): info_dict_temp = {'案件名': casename, '案号':anhao, '案由':anyou, '程序': chengxu, '文书类型':papertype, '案件类型': casetype, '法院':fayuan, '文书类型':wenshuleixing, '判决日期': panjueriqi, '被告人':beigaoren, '公诉人':gongsuren } return info_dict_temp # 将信息存入列表(内嵌套字典) def information_list(casename, anyou, chengxu, papertype, anjianleixing, fayuan, anhao, panjueriqi, beigaoren, gongsuren, law_ralated): info_list = [ {'案件名': casename}, {'案由': anyou}, {'程序': chengxu}, {'文书类型': papertype}, {'案件类型': anjianleixing}, {'法院': fayuan}, {'案号':anhao}, { '判决日期': panjueriqi}, {'被告人': beigaoren}, { '公诉人':gongsuren}, {'相关法律': law_ralated} ] return info_list # 字典转json文件(savefile_load是文件夹路径) def dict2json(info_dict, savefile_load, casename): b = json.dumps(info_dict, ensure_ascii=False) savefile_load = savefile_load + '/' + casename + '.json' f2 = open(savefile_load, 'w') f2.write(b) f2.close() def list_output(file_path): if os.path.splitext(file_path)[-1] == ".doc": # 判断文件类型是否为doc print('传入文件格式为doc,将转换为docx格式。') doc2docx_1(file_path) file_path = file_path + 'x' # 设置引用文件路径(因为后期可能要更新相应信息,所以采用此种方式更方便一些) anyoutxt = 'D:/projects_pycharm/lawdocs2excel/data_access/data/anyou.txt' leixingtxt = 'D:/projects_pycharm/lawdocs2excel/data_access/data/chengxu.txt' papertypetxt = 'D:/projects_pycharm/lawdocs2excel/data_access/data/paper_type.txt' casetypetxt = 'D:/projects_pycharm/lawdocs2excel/data_access/data/case_type.txt' (casename, anyou, chengxu, papertype0, casetype0) = \ case_name(file_path, anyoutxt, leixingtxt, papertypetxt, casetypetxt) paras = read_docx(file_path) # 读取文书段落 (papertype, casetype, fayuan, anhao, panjueriqi, beigaoren, gongsuren, law_ralated) \ = case_base_information(paras, papertype0, casetype0, papertypetxt, casetypetxt) # 读取基本信息 info_list = information_list(casename, anyou, chengxu, papertype, casetype, fayuan, anhao, panjueriqi, beigaoren, gongsuren, law_ralated) return info_list if __name__ == '__main__': path = 'E:/NLP/doc2docx_test/王云清应先勇等强迫交易罪非法占用农用地罪夏君兵王某29强迫交易罪一审刑事判决书.doc' info_list = list_output(path) for i in info_list: print(i)

以下为文件内容举例。

anyou.txt

paper_type.txt

代码补充:

# 实现单个doc文件转换为docx文件 def doc2docx_1(doc_path): # 打开word并设置 word = wc.Dispatch("Word.Application") word.Visible = 0 # 1程序可见,0不可见 print(doc_path) doc = word.Documents.Open(doc_path) docx_save_path = doc_path + 'x' doc.SaveAs(docx_save_path, 12, False, "", True, "", False, False, False, False) # 转换后的文件,12代表转换后为docx文件 doc.Close() word.Quit()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231502.html原文链接:https://javaforall.net

(0)
上一篇 2025年12月8日 下午6:01
下一篇 2025年12月8日 下午6:22


相关推荐

  • 编写测试用例的思路_用例测试方法

    编写测试用例的思路_用例测试方法前言用过pytest的小伙伴都知道,pytest的运行方式是非常丰富的,可以说是你想怎么运行怎么运行,想运行哪些运行哪些,那httprunner是否同样可以呢?运行用例的各种方式运行指定路径的用

    2022年8月6日
    7
  • StarUML入门教程

    StarUML入门教程声明 原文链接 StarUML 使用简明教程 作者 栾小邑 StarUML 入门教程 StarUML 简称 SU 是一种创建 UML 类图 生成类图和其他类型的统一建模语言 UML 图表的工具 StarUML 是一个开源项目之一发展快 灵活 可扩展性强 zj StarUML 官方下载地址 http staruml io downloadStar 主界面创建工程在启动 starUML 时 系统会默认帮我们创建一个工程 如果这个工程不是你想要的工程 你可以点击 File gt

    2025年6月30日
    5
  • 同向加法器

    同向加法器转载自 https zhidao baidu com question 164328667 html 反相端电压 同相端电压 ui1 ui u R21 i2 ui2 u R22 u R i1 i2 由此解出 u ui1 R21 ui2 R22 1 R 1 R21 1 R22 对输出支路 有串联分压得 uo RF R1 u R1uo u RF R1 R1 u 1 RF

    2026年3月19日
    2
  • php 字符串转换时间_php 字符时间如何转换「建议收藏」

    php 字符串转换时间_php 字符时间如何转换「建议收藏」php字符时间转换的方法:1、通过php中的“strtotime()”函数将任何英文文本的日期时间描述解析为时间戳;2、使用php中的“mktime()”函数从日期取得时间戳即可。本文操作环境:windows7系统、PHP5.6版,DELLG3电脑。php字符串转时间戳PHP提供了函数可以方便的将各种形式的日期转换为时间戳,该类函数主要是:strtotime():将任何英文文本的日期时间描述解…

    2022年6月2日
    32
  • 传奇私服架设(温故2002,自己制作传奇私服服务器)

    传奇私服架设(温故2002,自己制作传奇私服服务器)在家闲着没事,便想玩点单机游戏,于是想到自己架设个传奇私服,然后自己做GM玩玩,肯定挺爽的。。 准备工作:(网上搜索下载)DBC2000 数据库:http://www.skycn.com/soft/40872.html传奇私服服务端:http://www.rayfile.com/zh-cn/files/bf0e4b00-8550-11e0-bca

    2022年10月6日
    4
  • Java基础篇:equals()方法与==的区别

    Java基础篇:equals()方法与==的区别

    2021年10月4日
    94

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号