基于PostgreSQL的自然语义解析电子病历编程实践与探索(下)

news/2025/1/30 14:45:59/

五、数据导入与存储

5.1 使用 Python 连接 PostgreSQL 数据库

在 Python 中,使用 psycopg2 库可以方便地连接 PostgreSQL 数据库,实现数据的导入与存储操作。psycopg2 是一个流行的 PostgreSQL 适配器,它提供了丰富的功能和高效的性能,能够满足电子病历数据处理的需求。

在使用 psycopg2 库之前,需要先确保其已安装。可以使用 pip 命令进行安装:

pip install psycopg2

如果安装过程中遇到问题,可能是因为缺少相关的依赖库。在 Linux 系统中,可能需要安装libpq-dev库,可以使用以下命令进行安装(以 Ubuntu 为例):

sudo apt-get install libpq-dev

在 Windows 系统中,可以从 psycopg2 官方网站下载对应的安装包进行安装。

安装完成后,即可在 Python 代码中使用 psycopg2 库连接 PostgreSQL 数据库。连接数据库时,需要提供数据库的相关配置信息,包括主机名、用户名、端口号、密码和数据库名。以下是一个简单的连接示例:

import psycopg2

# 数据库配置信息

host = "your_host"

user = "your_user"

port = "your_port"  # PostgreSQL默认端口是5432

password = "your_password"

dbname = "your_dbname"

# 连接数据库

try:

    conn = psycopg2.connect(

        host=host,

        user=user,

        port=port,

        password=password,

        dbname=dbname

    )

    print("连接成功")

except psycopg2.Error as e:

    print(f"连接失败: {e}")

在上述代码中,首先导入了 psycopg2 库。然后,定义了数据库的配置信息,包括主机名、用户名、端口号、密码和数据库名。在实际应用中,需要将这些信息替换为真实的数据库配置。接着,使用psycopg2.connect()方法尝试连接数据库。如果连接成功,会打印 “连接成功”;如果连接失败,会捕获psycopg2.Error异常,并打印错误信息。

在实际应用中,为了提高代码的安全性和可维护性,建议将数据库配置信息存储在配置文件中,如config.ini文件。config.ini文件的内容可以如下:

[database]

host = your_host

user = your_user

port = your_port

password = your_password

dbname = your_dbname

在 Python 代码中,可以使用configparser库读取配置文件中的信息:

import psycopg2

import configparser

# 读取配置文件

config = configparser.ConfigParser()

config.read('config.ini')

# 获取数据库配置信息

host = config.get('database', 'host')

user = config.get('database', 'user')

port = config.get('database', 'port')

password = config.get('database', 'password')

dbname = config.get('database', 'dbname')

# 连接数据库

try:

    conn = psycopg2.connect(

        host=host,

        user=user,

        port=port,

        password=password,

        dbname=dbname

    )

    print("连接成功")

except psycopg2.Error as e:

    print(f"连接失败: {e}")

通过这种方式,将数据库配置信息与代码分离,使得代码更加清晰和易于维护。同时,在部署应用时,只需修改配置文件中的信息,而无需修改代码,提高了应用的灵活性和安全性。

在连接数据库时,还需要注意异常处理。除了上述捕获psycopg2.Error异常外,还可以捕获其他可能的异常,如psycopg2.OperationalError表示操作错误,可能是由于网络问题或数据库服务未启动导致的;psycopg2.InternalError表示内部错误,可能是由于数据库连接池已满或数据库内部错误导致的。通过捕获这些异常,可以更准确地处理连接过程中可能出现的问题:

import psycopg2

import configparser

# 读取配置文件

config = configparser.ConfigParser()

config.read('config.ini')

# 获取数据库配置信息

host = config.get('database', 'host')

user = config.get('database', 'user')

port = config.get('database', 'port')

password = config.get('database', 'password')

dbname = config.get('database', 'dbname')

# 连接数据库

try:

    conn = psycopg2.connect(

        host=host,

        user=user,

        port=port,

        password=password,

        dbname=dbname

    )

    print("连接成功")

except psycopg2.OperationalError as e:

    print(f"操作错误,连接失败: {e}")

except psycopg2.InternalError as e:

    print(f"内部错误,连接失败: {e}")

except psycopg2.Error as e:

    print(f"连接失败: {e}")

这样,在连接数据库时,能够更全面地处理各种异常情况,提高程序的稳定性和可靠性。

5.2 将 NLP 处理后的数据插入数据库

在成功连接到 PostgreSQL 数据库后,就可以将 NLP 处理得到的实体、关系等数据插入到相应的表中。以下将详细介绍如何使用 Python 和 psycopg2 库实现这一过程,并给出具体的代码示例。

假设已经通过 NLP 处理得到了患者的基本信息、病历记录、实体和关系等数据。以之前提到的实际电子病历数据为例,NLP 处理后得到的实体和关系如下:

# 假设NLP处理后得到的实体

entities = [('男性', '性别'), ('56', '年龄'), ('多饮', '症状'), ('多食', '症状'), ('多尿', '症状'), ('体重下降', '症状'), ('1个月', '时间'), ('高血压', '疾病'), ('5', '时间'), ('硝苯地平', '药物'), ('空腹血糖12.5mmol/L', '检查结果'), ('餐后2小时血糖18.6mmol/L', '检查结果'), ('糖化血红蛋白8.5%', '检查结果'), ('2型糖尿病', '疾病'), ('二甲双胍片', '药物')]

# 假设NLP处理后得到的关系(这里简单模拟,实际可能更复杂)

relations = [((1, '2型糖尿病'), (3, '多饮'), '症状表现'), ((1, '2型糖尿病'), (4, '多食'), '症状表现'), ((1, '2型糖尿病'), (5, '多尿'), '症状表现'), ((1, '2型糖尿病'), (15, '二甲双胍片'), '治疗药物')]

其中,实体列表entities包含了实体文本及其类型,关系列表relations包含了两个实体的 ID 及其之间的关系类型。这里的实体 ID 是假设在插入实体表后生成的自


http://www.ppmy.cn/news/1567912.html

相关文章

字节跳动自研HTTP开源框架Hertz简介附使用示例

字节跳动自研 HTTP 框架 Hertz Hertz 是字节跳动自研的高性能 HTTP 框架,专为高并发、低延迟的场景设计。它基于 Go 语言开发,结合了字节跳动在微服务架构中的实践经验,旨在提供更高效的 HTTP 服务开发体验。 1. 背景介绍 随着字节跳动业务…

OSCP:发送钓鱼电子邮件执行客户端攻击

概述 在渗透测试领域,钓鱼攻击是一种有效的客户端攻击手段,尤其在目标用户缺乏安全意识或系统存在未修复漏洞时,成功率较高。针对Windows平台,滥用Windows库文件(.Library-ms)是一种技术性较强但易于实施的…

Linux学习笔记——用户管理

一、用户管理命令 useradd #用户增加命令 usermod #用户修改命令 passwd #密码修改命令 userdel #用户删除命令 su #用户提权命令 1、useradd命令(加用户): 创建并设置用户信息,使用us…

剑指 Offer II 007. 数组中和为 0 的三个数

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20007.%20%E6%95%B0%E7%BB%84%E4%B8%AD%E5%92%8C%E4%B8%BA%200%20%E7%9A%84%E4%B8%89%E4%B8%AA%E6%95%B0/README.md 剑指 Offer II 007. 数组中和为 0 的三个数 …

Ubuntu二进制部署K8S 1.29.2

本机说明 本版本非高可用,单Master,以及一个Node 新装的 ubuntu 22.04k8s 1.29.3使用该文档请使用批量替换 192.168.44.141这个IP,其余照着复制粘贴就可以成功需要手动 设置一个 固定DNS,我这里设置的是 8.8.8.8不然coredns无法…

DeepSeek部署教程(基于Ollama)

虽说在过年,但不能忘了学习。这几天科技圈最火的莫过于deepseek,我抽空也学习一下deepseek的部署过程,主要还是因为官方服务已经彻底瘫了[手动狗头]。 1、下载Ollama并安装 https://github.com/ollama/ollama/releases/latest/download/Oll…

使用 ECS服务器 和 vsCode 搭建远程开发站

SSH 连接测试 学习过 Linux 的应该对 SSH 很了解,使用在此不介绍 Linux 上的使用 在 Window 中打开 PowerShell 程序【此处不知道 PowerShell 可以百度一下,不做过多介绍】 方法一:按住 Shift ,鼠标右键桌面 方法二&#xff1…

【深度学习】常见模型-Transformer模型

Transformer 是一种深度学习模型,首次由 Vaswani 等人在 2017 年提出(论文《Attention is All You Need》),在自然语言处理(NLP)领域取得了革命性成果。它的核心思想是通过 自注意力机制(Self-A…