主诉病程时长提取

news2024/9/29 1:25:17

编写Python函数

import re
def structured_pro(original_text,keyword,out_unit=None):
    pattern_split_str='[。,]'
    pattern_split=re.compile(pattern_split_str,re.I|re.M)
    original_list=pattern_split.split(original_text)
    pattern_keyword=re.compile(keyword,re.I|re.M)
    time_str='([0-9半]+)([+余]{0,1})([年月周天])'
    pattern_time_str=re.compile(time_str,re.I|re.M)
    for original in original_list:
        searchObj=pattern_keyword.search(original)
        if searchObj:
            time_unit_Obj=pattern_time_str.search(original)
            if time_unit_Obj:
                value_unit=time_unit_Obj.group()
                value=time_unit_Obj.group(1)
                unit=time_unit_Obj.group(3)
                # 单位换算
                value= 0.5 if value=='半' else float(value)
                if unit in('年'):
                    days=value*365
                    weeks=value*52
                    months=value*12
                    years=value*1
                elif unit in('月'):
                    days=value*30
                    weeks=value*4.3
                    months=value*1
                    years=value/12
                elif unit in('周'):
                    days=value*7
                    weeks=value*1
                    months=value/4.3
                    years=value/52
                elif unit in('天','日'):
                    unit='天'
                    days=value*1
                    weeks=value/7
                    months=value/30
                    years=value/365
                date_dict = {None:value_unit,'天':days,'周':weeks,'月':months,'年':years}
                break
        date_dict = {None:None,'天':None,'周':None,'月':None,'年':None}
    return date_dict[out_unit]
Python函数调用效果
original_text='间断咳嗽、咳痰6天,加重1+月,发热8天。'
structured_pro(original_text,'咳嗽')
#'6天'

structured_pro(original_text,'咳嗽','天')
# 6.0
structured_pro(original_text,'咳嗽','年')
# 0.01643835616438356

重构为PostgreSQL函数


CREATE OR REPLACE FUNCTION pgsql_structured_pro(original_text text,keyword text,out_unit text default null)
    RETURNS text
AS $$
def structured_pro(original_text,keyword,out_unit):
    import re
    pattern_split_str='[。,]'
    pattern_split=re.compile(pattern_split_str,re.I|re.M)
    original_list=pattern_split.split(original_text)
    pattern_keyword=re.compile(keyword,re.I|re.M)
    time_str='([0-9半]+)([+余-]{0,1})([年月周天])'
    pattern_time_str=re.compile(time_str,re.I|re.M)
    for original in original_list:
        searchObj=pattern_keyword.search(original)
        if searchObj:
            time_unit_Obj=pattern_time_str.search(original)
            if time_unit_Obj:
                value_unit=time_unit_Obj.group()
                value=time_unit_Obj.group(1)
                unit=time_unit_Obj.group(3)
                # 单位换算
                value= 0.5 if value=='半' else float(value)
                if unit in('年'):
                    days=value*365
                    weeks=value*52
                    months=value*12
                    years=value*1
                elif unit in('月'):
                    days=value*30
                    weeks=value*4.3
                    months=value*1
                    years=value/12
                elif unit in('周'):
                    days=value*7
                    weeks=value*1
                    months=value/4.3
                    years=value/52
                elif unit in('天','日'):
                    unit='天'
                    days=value*1
                    weeks=value/7
                    months=value/30
                    years=value/365
                date_dict = {None:value_unit,'天':days,'周':weeks,'月':months,'年':years}
                break
        date_dict = {None:None,'天':None,'周':None,'月':None,'年':None}
    return date_dict[out_unit]

return structured_pro(original_text,keyword,out_unit)
$$ LANGUAGE plpython3u;
函数调用
SELECT "就诊编号", "入院记录主诉",
pgsql_structured_pro("入院记录主诉",'咳嗽',NULL) "咳嗽",
pgsql_structured_pro("入院记录主诉",'咳嗽','天')::FLOAT "天"
FROM "支气管扩张_2入院记录"

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/730591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

目前最好的MicrosoftProject替代方案

Microsoft Project是一个功能强大的项目管理工具。然而它可能是昂贵的,并且可能不适合所有的项目管理需求。幸运的是,有几个Microsoft Project的替代方案提供了类似的特性和功能。在本文中我们将探索目前可用的一些最好的Microsoft Project替代方案。 1、…

12.4 ARM异常处理

目录 ARM异常处理(一) 异常 概念 异常处理机制 ARM异常源 概念 ARM异常源 ARM异常模式 ARM异常处理(二) ARM异常响应 异常向量表 异常返回 IRQ异常举例​编辑 ARM异常处理(三 ) 异常优先级 …

自我介绍这样写?

已经帮小伙伴改了 500 多份简历了,也发现了一些大家写简历时的共性问题。其中让我印象比较深刻的一个点就是 自我介绍 ,基本上所有同学的自我介绍都是这么写的: 读这篇文章的朋友们,你是不是也是这么写自我介绍的呢? 这…

MySQL索引优化整合案例实现

目录 1 JOIN优化1.1 JOIN算法原理1.2 in和exists函数 2 order by优化2.1 索引排序2.2 额外排序2.3 排序优化 3 索引单表优化案例3.1. 建表3.2. 单表索引分析3.1.1 需求3.1.2 优化 4 索引多表优化案例 1 JOIN优化 1.1 JOIN算法原理 1) JOIN回顾 JOIN 是 MySQL 用来进行联表操作…

在 Jetpack Compose 中创建 BottomAppBar

Jetpack Compose 是 Android 的现代 UI 工具包,它使得构建美观且功能强大的应用变得更加简单。在本文中,我们将探讨如何使用 Jetpack Compose 创建一个 BottomAppBar。 开始之前 确保你的开发环境已经设置好了 Jetpack Compose。你需要使用 Android Stu…

矩阵Matrices

目录 矩阵的变换 向量和矩阵 矩阵的变换 房子图形的矩阵变换(wiggle动态变换) uicontrol的‘style’类型: X house dot2dot(X) theta1 wiggle(X) function dot2dot(X) % DOT2DOT Connect the points from a 2-by-n matrix. X(:,end1) X…

5 类数据,洞察游戏的秘密

数据犹如一扇扇窗户,透过它,我们可以洞察到游戏世界内部的诸多秘密。这些秘密,就像是隐藏在房间深处的宝藏,只有真正理解并善用它们,我们才能创造出更吸引人的游戏,形成更成功的商业模式。 一个关键的问题是…

【Linux】—— 浅谈进程优先级

本期,我们将来聊聊的是关于进程优先级的相关知识!!! 目录 序言 (一)基本概念 (二)查看系统进程 1、PRI and NI 2、PRI vs NI (三)设置优先级 序言 首先…

关于antdesign-vue的layout组件样式失效问题(#components-layout-demo-custom-trigger)

1.错误描述 使用antdesign vue 中的layout作为主要布局,https://www.antdv.com/components/layout-cn 正常引入后,跟期望的样子不一样 期望中的样子 实际的样子 logo没有了,而且此时也无法更改样式。 此时的样式是这样的 无论怎么修改都…

Grafana 使用Rest API 作为数据源的实践

本文使用最新版本的Grafana 10 进行操作。 如果要使用Rest API 作为grafana 的数据源,可以选择安装一个Infinity的数据源插件。 如果创建数据源时,搜不到infinity,点击find more 查找安装该数据源插件 1. 安装 Infinity 数据源插件&#xf…

IP 协议的相关特性

目录 IP协议有三大特点:无连接、无状态、不可靠。 四位版本号 四位头部长度 八位服务类型: 十六位总长度 16 位标识, 3 位标志, 13 位片偏移 八位生存时间 八位协议 十六位首部校验和 关于IP v4地址不够的问题 ip地址动态分配: ip地址转换(NAT) 数据传输…

一个空的Object在内存中占用几个字节

文章目录 一、对象在内存中的布局1. 对象头1.1. 哈希码(Hash Code):1.2. 对象所属的年代(Generation):1.3. 对象锁(Object Lock):1.4. 锁状态标志(Lock State…

POE级联蓝牙定位系统方案_蓝牙信标,蓝牙网关,级联蓝牙网关

近年来,随着新能源行业的快速发展,在化工厂,核电厂以及电力电厂等企业,对人员定位,人员导航,资产定位,生命体征监测的需求越来越大。传统的蓝牙室内定位方案中蓝牙信标为锂亚电池供电,需定期更换电池且有安全隐患,为更好的服务有蓝牙定位导航,被动人员定位,生命体征…

vue创建项目报错npm install --loglevel error --legacy-peer-deps

vue创建项目报错npm install --loglevel error --legacy-peer-deps 如图所示: 话不多说,直接上解决方法: 1、找到这两个文件(每个人的位置不一样,像我是安装在D盘) 2、分别点进去,右键—属性…

A Survey on Evaluation of Large Language Models

这是LLM相关的系列文章,针对《A Survey on Evaluation of Large Language Models》的翻译。 大型语言模型评价综述 摘要1 引言2 背景2.1 大语言模型2.2 AI模型评估 3 评估什么3.1 自然语言处理任务3.1.1 自然语言理解3.1.2 推理3.1.3 自然语言生成3.1.4 多语言任务…

vue——接口修改请求头——有些接口不需要请求头传递token——基础积累

最近在写后台管理系统的时候,遇到一个切换租户的功能。在请求接口的时候不需要传递token 直接上代码吧: 1.html代码 login2(this.user.id, this.ruleForm.tenantType) .then(this.afterLogin) .finally(() > {this.confirmLoading false;if (this…

ja3指纹和akamai指纹

问题: 请求失效,带上抓包软件却可以->检测ja3浏览器指纹 方法,python 安装curl_cffi库 pip install curl_cffi 查看浏览器指纹 https://tls.browserleaks.com/json python 原生request 缺少两个指纹 使用curl_cffi之后 可以看到结果…

多模态系列论文--BLIP 详细解析

论文地址:BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 论文代码:https://github.com/salesforce/BLIP BLIP 1 研究动机及本文贡献2 相关工作2.1 ALBEF模型2.2 VLMO模型 3 本文贡献1--U…

LLaMA: Open and Efficient Foundation Language Models

背景 用最少的计算资源,解决了LLM大模型预测问题,训练了一些列的LLaMa模型,在参数量比较少的情况下,达到业界大模型效果。 主要贡献就是提升了LLM模型的训练速度和效率,在小容量的基础上,大大提升了模型的…

C语言 - AES软件加解密算法

概述 (AES)RIJNDAEL算法是一个数据块长度盒密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于256位的32位任意倍数。深入学习请参考《密码学》书籍,谢谢各位参阅。 验证环境&#xf…