R语言对医学中的自然语言(NLP)进行机器学习处理(1)

这篇具有很好参考价值的文章主要介绍了R语言对医学中的自然语言(NLP)进行机器学习处理(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是自然语言(NLP),就是网络中的一些书面文本。对于医疗方面,例如医疗记录、病人反馈、医生业绩评估和社交媒体评论,可以成为帮助临床决策和提高质量的丰富数据来源。如互联网上有基于文本的数据(例如,对医疗保健提供者的社交媒体评论),这些数据我们可以直接下载,有些可以通过爬虫抓取。例如:在病人论坛上发表对疾病或药物的评论,可以将它们存储在数据库中,然后进行分析。

R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
在这个之前需要了解什么是情绪分析,情绪分析是指赋予词语、短语或其他文本单位主观意义的过程。情绪可以简单地分为正面或负面,也可以与更详细的主题有关,比如某些词语所反映的情绪。简单来说就是从语言从提取患者态度或者情绪的词语,然后进行分析,比如患者对这个药物的疗效,她说好,有用,我们提取出这些关键词来进行分析。

自然语言(NLP)进行机器学习分为无监督学习和有监督学习,本期咱们先来介绍无监督学习。咱们先导入R包和数据

library(tm)
library(data.table)
library(tidytext)
library(dplyr)
library(tidyr)
library(topicmodels)
library(performanceEstimation)
library(rsample)
library(recipes)
library(parsnip)
library(workflows)
library(tune)
library(dials)
library(kernlab)
library(ggplot2)
training_data <- as.data.frame(fread("E:/r/test/drugsComTrain_raw.tsv"))

咱们先来看一下数据
R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
这是一个患者对药物评价的数据,该数据集提供了患者对特定药物及相关疾病的评估,以及10星级患者评级,反映了整体患者满意度。这些数据是通过爬取在线医药评论网站获得的。公众号回复:药物评论数据,可以获得该数据,我们先来看一下数据的构成,drugName:药物名称,condition (categorical)条件类别,多指患者的一些疾病类别,review:患者对药物的评论,rating患者对药物的打分,date (date)患者评论的日期,usefulCount发现评论有用的数据,代表浏览者支持这个观点。
这个数据有16万行,非常大,为了演示方便,我们只取5000个来演示

set.seed(123)
sample <- sample(nrow(training_data),5000)
data <- training_data[sample,]
dim(data)

R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
因为这是网页抓取的数据,会存在一些乱码,所以咱们在分析前先要进行数据的清洗,编写一个简单的数据清洗程序,就是一些简单的正则式小知识

cleanText <- function(rawtext) {
  rawtext <- gsub("&#039;", "?", rawtext)
  # Expand contractions
  rawtext <- gsub("n?t", " not", rawtext)
  rawtext <- gsub("won?t", "will not", rawtext)
  rawtext <- gsub("wont", "will not", rawtext)
  rawtext <- gsub("?ll", " will", rawtext)
  rawtext <- gsub("can?t", "can not", rawtext)
  rawtext <- gsub("cant", "can not", rawtext)
  rawtext <- gsub("didn?t", "did not", rawtext)
  rawtext <- gsub("didnt", "did not", rawtext)
  rawtext <- gsub("?re", " are", rawtext)
  rawtext <- gsub("?ve", " have", rawtext)
  rawtext <- gsub("?d", " would", rawtext)
  rawtext <- gsub("?m", " am", rawtext)
  rawtext <- gsub("?s", "", rawtext)
  # Remove non-alphanumeric characters.
  rawtext <- gsub("[^a-zA-Z0-9 ]", " ", rawtext)
  # Convert all text to lower case.
  rawtext <- tolower(rawtext)
  # Stem words
  rawtext <- stemDocument(rawtext, language = "english")
  return(rawtext)
}

这个小程序我简单介绍一下,第一行就是就是把文字中的"&#039;"全部改成“?”,其他也是差不多的,第二行就是把"n?t"改成" not".接下来gsub("[^a-zA-Z0-9 ]", " ", rawtext)这句前面有个^,表示把没有数据和字母的字符的字符串定义为缺失。tolower(rawtext)是把数据转成小写。
写好程序后咱们运行一下

data$review <- sapply(data$review, cleanText)

R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
这样数据就被清洗一遍了,接下来咱们需要使用tidytext包中的unnest_tokens函数先把评论打散,变成一个个的单词,然后把含有stop的单词去掉,再把每行重复的词去掉,最后选择大于3个字符的词

tidydata <- data %>%
  unnest_tokens(word, review) %>%  #将句子打散变成单个词
  anti_join(stop_words) %>%  #Joining with `by = join_by(word)` remove stop words
  distinct() %>%   #去除重复
  filter(nchar(word) > 3)

我们看下整理后的数据,我们可以看到同一行被拆成多个词,当然数据也比原来大了很多
R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
接下来咱们需要使用get_sentiments函数来对文本进行分析,它自带有很多字典咱们这次使用"bing"字典进行分析,咱们先来看下什么是"bing"字典

head(get_sentiments("bing"),20)

R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
我们可以看到字典就是对应的字符串,假如匹配到abnormal 这个词,函数就会返回负面的negative,假如是abound这个词,函数就会返回正面的positive

tidydata %>%
  inner_join(get_sentiments("bing"))  #使用"bing"的字典进行情感分析

R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
咱们看到数据很大,咱们只取其中的4种药物来分析"Levothyroxine",“Vyvanse”,“Xiidra”,“Oseltamivir”,并且计算出每种药物的评价数量和百分比

drug_polarity <- tidydata %>%
  inner_join(get_sentiments("bing")) %>%   #使用"bing"的字典进行情感分析
  filter(drugName == "Levothyroxine" |     #选定4种药物
           drugName == "Vyvanse" |
           drugName == "Xiidra" |
           drugName == "Oseltamivir") %>%
  count(sentiment, drugName) %>%           #对情感进行计数
  pivot_wider(names_from = sentiment,   #选择要访问的列
              values_from = n,           #输出列的名字
              values_fill = 0) %>%       #如果缺失的话默认填0
  mutate(polarity = positive - negative,  #评分
         percent_positive = positive/(positive+negative) * 100) %>%  #计算百分比
  arrange(desc(percent_positive))

R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
上图对显示出患者对药物的一些基本反馈。
下面咱们准备开始进行无监督学习,先要建立矩阵(DTM),

drug_as_doc_dtm <- tidydata %>%
  count(drugName, word, sort = TRUE) %>%  #每种药物的评价词语的个数
  ungroup() %>% 
  cast_dtm(drugName, word, n) %>%  #将数据帧转换为tm包中DocumentTermMatrix,TermDocumentMatrix或dfm
  removeSparseTerms(0.995)

我们看一下这个矩阵

inspect(drug_as_doc_dtm)

R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
建立好矩阵后主要是通过topicmodels包的LDA函数来进行无监督学习,这里的K表示你想要分成几组,control这里可以设置一个种子

lda<- LDA(drug_as_doc_dtm, k = 3,
          control = list(seed = 123))

接着咱们对数据进行进一步提取

top_terms_per_topic <- lda %>%
  tidy(matrix = "beta") %>%    #获取系数
  group_by(topic) %>%         #分组
  arrange(topic, desc(beta)) %>%    #排序
  slice(seq_len(10)) # Number of words to display per topic

看下提取后的数据,第一个是组别,第二个是它的名字,第三个是它的beta
R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
接下来咱们可以做一些简单的可视化,加入咱们想看这些词的几率

ggplot(top_terms_per_topic, aes(x = beta, y = term, fill = term)) +
  geom_bar(stat = "identity", color = "black")

R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
或者做个词云图

library(wordcloud)

wordcloud(top_terms_per_topic$term,top_terms_per_topic$beta,scale=c(3,0.3),min.freq=-Inf,
          max.words=Inf,colors=brewer.pal(8,'Set1'),random.order=F,random.color=F,ordered.colors=F)

R语言对医学中的自然语言(NLP)进行机器学习处理(1),R语言,r语言,自然语言处理,机器学习
本期先介绍到这里,下期继续介绍有监督学习,未完待续。

参考文献:文章来源地址https://www.toymoban.com/news/detail-758087.html

  1. tm包文档
  2. tidytext包文档
  3. topicmodels包文档
  4. Harrison, C.J., Sidey-Gibbons, C.J. Machine learning in medicine: a practical introduction to natural language processing. BMC Med Res Methodol 21, 158 (2021).
  5. https://www.cnblogs.com/jiangxinyang/p/9358339.html
  6. https://blog.csdn.net/sinat_26917383/article/details/51547298

到了这里,关于R语言对医学中的自然语言(NLP)进行机器学习处理(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【自然语言处理】【深度学习】NLP中的N-gram理解

    N-gram是自然语言处理(NLP)中的一个概念,它描述的是文本中连续的n个项(通常是单词或字符)。这个概念主要用于语言建模和文本分析中。 具体来说: Unigram (1-gram): 包含一个单词的序列,例如句子中的单个单词。 Bigram (2-gram): 包含两个相邻单词的序列。例如,在句子 “

    2024年01月25日
    浏览(57)
  • 【Chatgpt4 教学】 NLP(自然语言处理)第九课 朴素贝叶斯分类器的工作原理 机器学习算法

    我在起,点更新NLP自然语言处理==》《 王老师带我成为救世主 》 为啥为它单独开章,因为它值得,它成功的让我断了一更,让我实践了自上而下找能够理解的知识点,然后自下而上的学习给自己的知识升级,将自己提升到能够解决当前遇到的问题的水平。 (1)--------------

    2023年04月15日
    浏览(51)
  • 自然语言处理 Paddle NLP - 机器同传技术及应用-理论

    基础 自然语言处理(NLP) 自然语言处理PaddleNLP-词向量应用展示 自然语言处理(NLP)-前预训练时代的自监督学习 自然语言处理PaddleNLP-预训练语言模型及应用 自然语言处理PaddleNLP-文本语义相似度计算(ERNIE-Gram) 自然语言处理PaddleNLP-词法分析技术及其应用 自然语言处理Pa

    2024年02月11日
    浏览(63)
  • 自然语言处理NLP:一文了解NLP自然语言处理技术,NLP在生活中的应用,图导加深了解,NLP语料库,NLP开源工具

    目录 1.自然语言处理NLP 1.1 NLP中英对照(双份) 1.2 相关文章  2.NLP语料库

    2024年02月09日
    浏览(64)
  • 【精品】NLP自然语言处理学习路线(知识体系)

    当前,大规模预训练语言模型的强大对话问答、文本生成能力,将自然语言处理(NLP)的研究和应用推向了新一轮的热潮。NLP是计算机科学、人工智能和语言学等学科交叉的前沿领域。NLP的应用和研究范围非常的广泛,个人是没有找到那种特别好的、详细且成体系的文档的。

    2024年02月09日
    浏览(50)
  • 自然语言处理(NLP) - 前预训练时代的自监督学习

    基础 自然语言处理(NLP) 自然语言处理PaddleNLP-词向量应用展示 自然语言处理(NLP)-前预训练时代的自监督学习 自然语言处理PaddleNLP-预训练语言模型及应用 自然语言处理PaddleNLP-文本语义相似度计算(ERNIE-Gram) 自然语言处理PaddleNLP-词法分析技术及其应用 自然语言处理Pa

    2024年02月08日
    浏览(44)
  • 深度学习6:自然语言处理-Natural language processing | NLP

    目录 NLP 为什么重要? 什么是自然语言处理 – NLP NLP 的2大核心任务 自然语言理解 – NLU|NLI 自然语言生成 – NLG NLP(自然语言处理) 的5个难点 NLP 的4个典型应用 NLP 的 2 种途径、3 个核心步骤 总结 自然语言处理 “语言理解是人工智能领域皇冠上的明珠” 比尔·盖茨 在人工智能

    2024年02月11日
    浏览(68)
  • 中文自然语言处理(NLP)中的命名实体识别(NER)任务中,加入注意力(attention)机制

    在中文自然语言处理(NLP)中的命名实体识别(NER)任务中,加入注意力(attention)机制可以极大地提升模型的性能。注意力机制可以帮助模型更好地捕捉序列中的关键信息和上下文依赖关系,从而提高对命名实体的识别准确度。下面是一些关于注意力机制的具体作用和不同

    2024年01月25日
    浏览(58)
  • 以ChatGPT为例进行自然语言处理学习——入门自然语言处理

    ⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您, 麻烦点个赞 👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支持一下呗。👍⭐️❤️ Qt5.9专栏 定期更新Qt的一些项目Demo

    2023年04月23日
    浏览(83)
  • 【自然语言处理】NLP入门(一):1、正则表达式与Python中的实现(1):字符串构造、字符串截取

       语言 是一种使用具有共同处理规则的沟通指令的广义概念,这些指令可以通过视觉、声音或触觉等方式传递。语言可以分为自然语言、动物语言和计算机语言。    自然语言 是人类发展过程中形成的一种信息交流方式,它包括口语和书面语,并且反映了人类的思想。

    2024年03月12日
    浏览(146)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包