百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

排名第一的Python语言,是如何应用于医疗临床

toyiye 2024-06-21 12:05 8 浏览 0 评论

AlphaGo战胜了围棋领域的人类第一高手,让人们惊叹于人工智能的发展速度。一夜之间,人工智能的应用成为了大家最热议的话题。在医疗领域,人工智能应用已逐渐渗透,如病理诊断、影像、肿瘤治疗等。

人工智能的核心是算法和数据,尤其是海量的优质数据,是人工智能发展的关键。过去“以药养医”,存在过度治疗、过度检查等问题,对医院的临床数据特别是治疗数据造成了污染。而数据质量的高低则直接决定了智能医疗的成功与否。

为了获得持续高质量的医疗大数据,数据治理和自然语言的处理不可或缺。在临床科研中,存在着很多无法描述的自然语言,我们需要将自然语言处理成可量化、可统计的数据。

每家医院都存有大量无法标准化的历史病案数据,特别是B超、放射、病理等数据。如B超的检查结果:

肝:肝大小形态正常,包膜光,实质回声均匀,管网清,右肝内胆管见约0.4cm强光斑,门脉不扩。胆:胆囊大小形态正常,壁光,内未见明显占位及结石,肝内外胆管不扩。胰:胰腺大小形态正常,实质回声均匀,主胰管不扩。脾:脾大小形态正常,内部回声均匀。双肾:双肾大小形态正常,包膜光,左肾见约0.7*0.7cm高回声结节,右肾见约0.4*0.3cm强光斑,余实质回声均匀,双肾盂不扩。CDFI:双肾内血流分布正常。输尿管:双侧输尿管未见明显扩张。膀胱:膀胱充盈尚可,壁毛糙,内透声佳。前列腺:前列腺大小约5.3*3.3*3.7cm,重约34g,内见多枚强光斑,较大约0.8cm,余实质回声欠均匀。

为了解析这部分的数据,我们需要自然语言处理工具,将其切分,分解成可统计、可分析的标准化数据。

一、Python自然语言处理:NLTK

自然语言工具箱(NLTK,Natural Language Toolkit)是一个基于python的类库,它是当前最为流行的自然语言编程和开发工具之一。NLTK是一个高效的平台,为自然语言的处理提供了很多的接口。

Python和NLTK的安装不在本文的讨论范围,在此不再赘述。接下来通过一些实例介绍NLTK的使用。

1.分 句

针对一段文字的描述,我们希望把它分成一个一个的句子。使用NLTK中的punkt句子分割器:

importnltk

sent_tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')

paragraph = "The first time I heard that song was in Hawaii on radio. I was just a kid, and loved it very much! What a fantastic song!"

sentences = sent_tokenizer.tokenize(paragraph)

print(sentences)

得到的结果为:

['The first time I heard that song was in Hawaii on radio.', 'I was just a kid, and loved it very much!', 'What a fantastic song!']

2.分 词

分成了句子之后,我们还要将句子分词,得到一个个的词组。使用NLTK 包中的 WordPunct tokenizer:

import nltk

sentence = "Are you old enough to remember Michael Jackson attending the Grammys with Brooke Shields and Webster sat on his lap during the show?"

words = nltk.word_tokenize(sentence)

print(words)

得到的结果:

['Are', 'you', 'old', 'enough', 'to', 'remember', 'Michael', 'Jackson', 'attending', 'the', 'Grammys', 'with', 'Brooke', 'Shields', 'and', 'Webster', 'sat', 'on', 'his', 'lap', 'during', 'the', 'show', '?']

3.词性标注

分句和分词之后,我们还可以对分词做词性标注:

import nltk

sentence = "Are you old enough to remember Michael Jackson attending the Grammys with Brooke Shields and Webster sat on his lap during the show?"

words = nltk.word_tokenize(sentence)

tags = nltk.pos_tag(words)

print(tags)

得到的结果如下:

[('Are', 'NNP'), ('you', 'PRP'), ('old', 'JJ'), ('enough', 'RB'), ('to', 'TO'), ('remember', 'VB'), ('Michael', 'NNP'), ('Jackson', 'NNP'), ('attending', 'VBG'), ('the', 'DT'), ('Grammys', 'NNP'), ('with', 'IN'), ('Brooke', 'NNP'), ('Shields', 'NNP'), ('and', 'CC'), ('Webster', 'NNP'), ('sat', 'VBD'), ('on', 'IN'), ('his', 'PRP

), ('lap', 'NN'), ('during', 'IN'), ('the', 'DT'), ('show', 'NN'), ('?', '.')]

以上都是NLTK自然语言处理工具包的基础功能,更深入的应用如词干提取、词形还原、频率分布、关键词排序等,大家可以在实际的使用中对其做更深入的研究。

二、中文分词

中文与英文的最大不同在于中文需要分词。现在最流行的分词工具包括斯坦福中文分词器、哈工大分词包、结巴分词等。本文主要介绍结巴分词工具的使用。

结巴分词支持三种分词模式:精确模式、全模式、搜索引擎模式,同时支持自定义词典。主要功能包括分词、添加自定义词典、关键词提取、词性标注等。

我们以文初的B超诊断结果描述作为处理文本介绍结巴分词的功能:

1.分 词

代码示例:

import jieba

detail = "肝:肝大小形态正常,包膜光,实质回声均匀,管网清,右肝内胆管见约0.4cm强光斑,门脉不扩。"

seg_list = jieba.cut(detail, cut_all=True)

print("Full Mode: " + "/ ".join(seg_list)) # 全模式

seg_list = jieba.cut(detail, cut_all=False)

print("Default Mode: " + "/ ".join(seg_list)) # 精确模式

seg_list = jieba.cut_for_search(detail) # 搜索引擎模式

print(", ".join(seg_list))

输出结果:

Full Mode: 肝/ / / 肝/ 大小/ 形态/ 正常/ / / 包膜/ 光/ / / 实质/ 回声/ 均匀/ / / 管网/ 清/ / / 右/ 肝/ 内胆/ 胆管/ 管见/ 约/ 0/ 4cm/ 强光/ 光斑/ / / 门/ 脉/ 不/ 扩/ /

Default Mode: 肝/ :/ 肝/ 大小/ 形态/ 正常/ ,/ 包膜/ 光/ ,/ 实质/ 回声/ 均匀/ ,/ 管网/ 清/ ,/ 右肝内/ 胆管/ 见/ 约/ 0.4/ cm/ 强/ 光斑/ ,/ 门脉/ 不/ 扩/ 。

肝, :, 肝, 大小, 形态, 正常, ,, 包膜, 光, ,, 实质, 回声, 均匀, ,, 管网, 清, ,, 右肝内, 胆管, 见, 约, 0.4, cm, 强, 光斑, ,, 门脉, 不, 扩, 。

2.添加自定义词典

从上面的分词结果中我们可以看到精确模式下分词的准备度还是比较高的,包膜、右肝内等都能识别出。不过在医疗领域有较多的专有名词,如皮髓质、远程回声、不扩等症状描述的词汇,可以通过自定义词典的方式,提高分词的准确度,如上面的“门脉不扩”分词为“门脉/不扩”。

3.关键词提取

结巴分词有“基于TF-IDF算法的关键词提取”和“基于TextRank算法的关键词提取”两个接口。

代码示例:

import jieba

import jieba.analyse

detail = "肝:肝大小形态正常,包膜光,实质回声均匀,管网清,右肝内胆管见约0.4cm强光斑,门脉不扩。"

print('='*40)

print('关键词提取'')

print('-'*40)

print(' TF-IDF')

print('-'*40)

for x, w in jieba.analyse.extract_tags(detail, withWeight=True):

print('%s %s' % (x, w))

print('-'*40)

print(' TextRank')

print('-'*40)

for x, w in jieba.analyse.textrank(detail, withWeight=True):

print('%s %s' % (x, w))

输出结果:

关键词提取

----------------------------------------

TF-IDF

----------------------------------------

右肝内 0.8539119644928571

0.4 0.8539119644928571

cm 0.8539119644928571

门脉 0.8539119644928571

光斑 0.7825884766285715

----------------------------------------

TextRank

----------------------------------------

管网 1.0

包膜 0.9956270686506203

实质 0.9532805433007815

回声 0.9497949058021358

门脉 0.7884070838128903

4.词性标注

代码示例:

import jieba

import jieba.posseg

detail = "肝:肝大小形态正常,包膜光,实质回声均匀,管网清,右肝内胆管见约0.4cm强光斑,门脉不扩。"

words = jieba.posseg.cut(detail)

for word, flag in words:

print('%s %s' % (word, flag))

输出结果:

肝 n

: x

肝 n

大小 b

形态 n

正常 d

, x

包膜 n

光 n

, x

实质 n

回声 v

均匀 a

, x

管网 n

清 t

, x

右肝 n

内 f

胆管 n

见 v

约 d

0.4 m

cm eng

强 a

光斑 n

, x

门脉 n

不 d

扩 v

。 x

简单总结

自然语言处理是一个庞大的课题,在医疗领域更是如此。本文只是对python中自然语言处理工具NLTK和结巴分词做了简单的介绍,更多的使用研究如NLTK和结巴分词的结合使用、统计分析、机器学习等还需要进一步的研究。

使用自然语言处理的工具以及医疗主数据、机器学习等,将医院的病案大数据格式化、标准化,相信一定可以对临床研究与智能医疗领域提供最有利的支持。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码