RadGraph: Extracting Clinical Entities and Relations from Radiology Reports代码
文章来源:NeurIPS
文章类别:IE(Information Extraction)
RadGraph主要基于dygie++,主要文件为inference.py。
inference.py:
1、get_file_list(data_path)
def get_file_list(path):file_list = [item for item in glob.glob(f"{path}/*.txt")]with open('./temp_file_list.json', 'w') as f:json.dump(file_list, f)
该函数从data_path中读取所有的reports(txt文件)列表,然后保存到temp_file_list.json文件中。例如:
["data/s56075423.txt", "data/s59358936.txt", "data/s58951365.txt"]
2、preprocess_reports()
def preprocess_reports():file_list = json.load(open("./temp_file_list.json"))final_list = []for idx, file in enumerate(file_list):temp_file = open(file).read()sen = re.sub('(?<! )(?=[/,-,:,.,!?()])|(?<=[/,-,:,.,!?()])(?! )', r' ',temp_file).split()temp_dict = {}temp_dict["doc_key"] = file## Current way of inference takes in the whole report as 1 sentencetemp_dict["sentences"] = [sen]final_list.append(temp_dict)if(idx % 1000 == 0):print(f"{idx+1} reports done")print(f"{idx+1} reports done")with open("./temp_dygie_input.json",'w') as outfile:for item in final_list:json.dump(item, outfile)outfile.write("\n")
从temp_file_list.json中获取list,对每个report切分,形成单独的词,生成字典形式{“doc_key”: , “sentences”: },保存temp_dygie_input.json中。

3、run_inference(model_path, cuda)
此处使用的是allennlp。从temp_dygie_input.json中读取数据,然后保存到temp_dygie_output.json中。
def run_inference(model_path, cuda):""" Args:model_path: Path to the model checkpointcuda: GPU id"""out_path = "./temp_dygie_output.json"data_path = "./temp_dygie_input.json"os.system(f"allennlp predict {model_path} {data_path} \--predictor dygie --include-package dygie \--use-dataset-reader \--output-file {out_path} \--cuda-device {cuda} \--silent")
4、postprocess_reports(),生成final_dict
调用postprocess_individual_report(file, final_dict),单独处理每个report。
def postprocess_reports():"""Post processes all the reports and saves the result in train.json format"""final_dict = {}file_name = f"./temp_dygie_output.json"data = []with open(file_name,'r') as f:for line in f:data.append(json.loads(line))for file in data:postprocess_individual_report(file, final_dict)return final_dict
5、postprocess_individual_report( )
def postprocess_individual_report(file, final_dict, data_source=None): """Args:file: output dict for individual reportsfinal_dict: Dict for storing all the reports"""try:temp_dict = {}temp_dict['text'] = " ".join(file['sentences'][0])n = file['predicted_ner'][0]r = file['predicted_relations'][0]s = file['sentences'][0]temp_dict["entities"] = get_entity(n,r,s)temp_dict["data_source"] = data_sourcetemp_dict["data_split"] = "inference"final_dict[file['doc_key']] = temp_dictexcept:print(f"Error in doc key: {file['doc_key']}. Skipping inference on this file")
6、get_entity(n,r,s)
def get_entity(n,r,s):"""Gets the entities for individual reportsArgs:n: list of entities in the reportr: list of relations in the reports: list containing tokens of the sentenceReturns:dict_entity: Dictionary containing the entites in the format similar to train.json """dict_entity = {}rel_list = [item[0:2] for item in r]ner_list = [item[0:2] for item in n]for idx, item in enumerate(n):temp_dict = {}start_idx, end_idx, label = item[0], item[1], item[2]temp_dict['tokens'] = " ".join(s[start_idx:end_idx+1])temp_dict['label'] = labeltemp_dict['start_ix'] = start_idxtemp_dict['end_ix'] = end_idxrel = []relation_idx = [i for i,val in enumerate(rel_list) if val== [start_idx, end_idx]]for i,val in enumerate(relation_idx):obj = r[val][2:4]lab = r[val][4]try:object_idx = ner_list.index(obj) + 1except:continuerel.append([lab,str(object_idx)])temp_dict['relations'] = reldict_entity[str(idx+1)] = temp_dictreturn dict_entity
相关文章:
RadGraph: Extracting Clinical Entities and Relations from Radiology Reports代码
文章来源:NeurIPS 文章类别:IE(Information Extraction) RadGraph主要基于dygie,主要文件为inference.py。 inference.py: 1、get_file_list(data_path) def get_file_list(path):file_list [item for item in glob.glob(f&q…...
13. OPenGL与QT界面元素交互控制图形渲染
1. 说明: 前面文章中讲到的 OPenGL 渲染都是在页面加载完成即立刻渲染的,如果向控制图形渲染的时间,可以在QT界面中添加一些元素来进行控制。此时需要用到OPenGL当中的makeCurrent(),update(),doneCurrent()函数。 效果展示: ope…...
高通平台开发系列讲解(USB篇)libuvc详解
文章目录 一、什么是UVC二、UVC拓扑结构三、libuvc的预览时序图沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍libuvc。 一、什么是UVC UVC,全称为:USB video(device) class。 UVC是微软与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标…...
ICC2:set_route_opt_target_endpoints
route_opt阶段通过指定endpoint/driver pin list的方式执行incremental优化。 set_route_opt_target_endpoints [-setup_endpoints file] [-setup_endpoints_collection pin_list] [-hold_endpoints file] [-hold_endpoints_collection pin_list] [-ldrc_objects fil…...
5、小程序面试题
1, 小程序页面有哪些生命周期函数onLoad: 页面加载onReady: 页面初次渲染完成onShow: 页面显示onHide: 页面隐藏onUnload: 页面卸载2, 一页小程序页面有哪些文件组成,分别有什么作用.wxml: 使用微信框架设计的一套组件构建页面结构.wxss: 用于设置页面样式, 和css基本一致.js :…...
Java特殊操作流
6 特殊操作流 6.1 标注输入输出流 System类中有两个静态的成员变量: public static final InputStream in:标准输入流,通常该流对应于键盘输入或由主机环境或用户指定的另一个输入源public static final PrintStream out:标准输…...
如何用SCRM销售管理系统管理销售和做销售管理
每一家企业都在找适合自己公司的销售管理方法,实现销售目标和努力提高业绩。 我们常说,做好销售管理有很多路径和方法,但我们不知道从哪里开始?每个阶段我们该怎么办?如何有效管理销售团队?好的企企业微信…...
分享117个HTML婚纱模板,总有一款适合您
分享117个HTML婚纱模板,总有一款适合您 117个HTML婚纱模板下载链接:https://pan.baidu.com/s/1cC3I5cfh91-KmQj4nfSoPA?pwd9hod 提取码:9hod Python采集代码下载链接:采集代码.zip - 蓝奏云 import os import shutil import …...
VIVADO2022 sdk 工程创建流程
正点原子uart历程复现 create block design(起名 为System) -> open block design -> 号/IP catalog 中搜索zynq 双击打开, 将和pl相关的时钟都干掉 再auto 布线一下 把herarchy中的sources 中的system.bd右键、 无脑下一步导出 如…...
【MyBatis】源码学习 02 - Java 元注解以及 MyBatis @Param 注解分析
文章目录前言参考目录学习笔记1、Java 注解1.1、Java 元注解1.2、Java ElementType 枚举值1.3、自定义注解2、Param 注解分析2.1、Param 注解2.2、测试方法2.3、流程分析(重点:ParamNameResolver)前言 本文内容对应的是书本第 7 章的内容&am…...
贪心算法-蓝桥杯
一、贪心算法的优缺点优点:1.容易理解:生活常见。2.操作简单:在每一步都选局部最优。3.效率高: 复杂度常常是O(1)的。缺点:1.局部最优不一定是全局最优。二、例子: 最少硬币问题硬币面值1、2、5。支付13元,要求硬币数量最少。贪心法: (1) 5元…...
zookeeper 复习 ---- chapter03
zookeeper 复习 ---- chapter03如何创建 zookeeper 对象 要求: 1:知道这几个构造参数 2:知道每一个参数的含义 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) ZooKeeper(String connectString, int sessionTimeout…...
1.PostgreSQL
文章目录LIMITWITH 和RECURSIVEPostgreSQL 约束PostgreSQL AUTO INCREMENT(自动增长)PostgreSQL PRIVILEGES(权限)GRANT语法LIMIT SELECT * FROM COMPANY LIMIT 3 OFFSET 2;WITH 和RECURSIVE WITH RECURSIVE t(a,b) AS (VALUES (…...
buu [UTCTF2020]basic-crypto 1
题目描述: 01010101 01101000 00101101 01101111 01101000 00101100 00100000 01101100 01101111 01101111 01101011 01110011 00100000 01101100 01101001 01101011 01100101 00100000 01110111 01100101 00100000 01101000 01100001 01110110 01100101 00100000 0…...
火山引擎数智平台的这款产品,正在帮助 APP 提升用户活跃度
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 你有没有关注过 APP 给你推送的消息? 出于提升用户活跃度的考虑,APP 会定期在应用内面向用户进行内通推送,推送形式既包括 APP …...
记录每日LeetCode 2341.数组能形成多少数对 Java实现
题目描述: 给你一个下标从 0 开始的整数数组 nums 。在一步操作中,你可以执行以下步骤: 从 nums 选出 两个 相等的 整数从 nums 中移除这两个整数,形成一个 数对 请你在 nums 上多次执行此操作直到无法继续执行。 返回一个下标…...
Ant Design Chart词云图
什么是词云图?词云图,也叫文字云,是对网络文本中出现频率较高的“关键词”予以视觉上的突出,出现越多,显示的字体越大,越突出,这个关键词也就越重要。让浏览者通过词云图一眼就可以快速感知最突…...
mysql索引
索引 mysql索引: 在MySQL中,索引是存储引擎实现的,所以没有统一的索引标准,不同存储引擎的索引工作方式也不一样,也不是所有的存储引擎都支持所有类型的索引即使是多个存储引擎都支持同一种类型的索引,他…...
Java中怎样将数据对象序列化和反序列化?
程序在运行过程中,可能需要将一些数据永久地保存到磁盘上,而数据在Java中都是保存在对象当中的。那么我们要怎样将对象中的数据保存到磁盘上呢?这时就需要使用Java中的对象序列化。对象的序列化(Serializable)是指将一个Java对象转换成一个I/O流中字节序…...
ffmpeg filter的理解
ffmpeg filter的理解 filter的简介 从整体看,filte rgraph包含filter chain,而filter chain又包含了filter,所以可以分为是三个层次去理解。 filterfilter chainfilter graph filter graph是链接多个filter的有向图。它可以包含循环&#…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
