R包安利 ② pubmed.mineR—又一个PubMed利器

hmmmmm


1.1 关于 pubmed.mineR

Jyoti Rani, S.Ramachandan and Ab. Rauf Shah (2014). Text mining of PubMed abstracts. R package version 1.0.5

Find it with 'help(package=pubmed.mineR)'

最新版: 1.0.15 , 2019-05-06

从 Title 和 Description 看,“Text Mining of PubMed Abstracts (text and XML) ”,这是一个致力于从 Pubmed Abstarct 文件挖掘文本/数据的包,包里一大堆函数/数据:

ls("package:pubmed.mineR")
# [1] "alias_fn"                       "altnamesfun"                   
# [3] "BWI"                            "cleanabs"                      
# [5] "cluster_words"                  "co_occurrence_fn"              
# [7] "combineabs"                     "common_words_new"              
# [9] "contextSearch"                  "cos_sim_calc"                  
# [11] "cos_sim_calc_boot"              "currentabs_fn"                 
# [13] "Find_conclusion"                "find_intro_conc_html"          
# [15] "gene_atomization"               "genes_BWI"                     
# [17] "GeneToEntrez"                   "Genewise"                      
# [19] "get_gene_sentences"             "get_MedlinePlus"               
# [21] "get_NMids"                      "get_original_term"             
# [23] "get_original_term2"             "get_PMCIDS"                    
# [25] "get_PMCtable"                   "get_Sequences"                 
# [27] "getabs"                         "getabsT"                       
# [29] "Give_Sentences"                 "Give_Sentences_PMC"            
# [31] "head_abbrev"                    "HGNC2UniprotID"                
# [33] "HGNCdata"                       "input_for_find_intro_conc_html"
# [35] "local_uniprotfun"               "names_fn"                      
# [37] "official_fn"                    "pmids_to_abstracts"            
# [39] "previousabs_fn"                 "prevsymbol_fn"                 
# [41] "printabs"                       "pubtator_function"             
# [43] "pubtator_result_list_to_table"  "readabs"                       
# [45] "readabsnew"                     "ready"                         
# [47] "removeabs"                      "searchabsL"                    
# [49] "searchabsT"                     "sendabs"                       
# [51] "SentenceToken"                  "space_quasher"                 
# [53] "subabs"                         "subsetabs"                     
# [55] "tdm_for_lsa"                    "uniprotfun"                    
# [57] "whichcluster"                   "word_associations"             
# [59] "word_atomizations"              "wordscluster"                  
# [61] "wordsclusterview"               "xmlgene_atomizations"          
# [63] "xmlreadabs"                     "xmlword_atomizations"          
# [65] "Yearwise"   

2.1 数据准备

在 PubMed 搜索想要的内容,创建 Abstract 文件。

3.1 Text Mining 技能点亮

3.1.1 读取从 PubMed 下载的 Abstract 文件

利用函数 readabs() 读取。

得到的 pubmed_abstracts 是一种 S4 object, Journal , Abstract , PMID 分别是一个 slot.

library(pubmed.mineR)
pubmed_abstracts <- readabs("pubmed_result.txt")
class(pubmed_abstracts)
# [1] "Abstracts"
# attr(,"package")
# [1] "pubmed.mineR"
printabs(pubmed_abstracts)  ## 显示开头和结尾部分

3.1.2 从 pubmed_abstracts 提取 PMID

pmid <- pubmed_abstracts@PMID
pmid
# [1] 31158748 31158746 31158660 31157709 31157548 31157505
class(pmid)
# [1] "numeric"

3.1.3 获取注释信息

函数 pubtator_function() 只需输入 PMID(数字或上一步得到的 pmid), 就可以给出相应的信息,如 'Gene’, ’Chemical’, ’Disease’ 等。

pubtator_output <- pubtator_function(pmid)

也可以直接输入PMID.

pubtator_ot6 <- pubtator_function(31157505)

然鹅有时……

pubtator_ot1 <- pubtator_function(31158748)
pubtator_ot1
# [1] " No Data "

也有歪果友人发生这样的问题,但直接输入 3.1.2 得到的 pmid 是没问题的ヾ(•ω•`)o

想获取其中一项:

pubtator_output$Genes
#  [1] "nuclear factor kappa B>81736" "NF-kB>81736"                 
#  [3] "cyclooxygenase-2>29527"       "COX-2>29527"                 
#  [5] "p53>301300"                   "CTr>116506"                  
#  [7] "NF- kB>81736"                 "P53>301300"                  
#  [9] "p16>1029"                     "p53>7157"                    
# [11] "p53>22060"                    "p16>13088"                   
# [13] "mPTP>19273"                  
pubtator_output$Genes[1]
# [1] "nuclear factor kappa B>81736"

3.1.5 函数SentenceToken() 获取信息

SentenceToken() 可以从 3.1.1 得到的 pubmed_abstracts 中提取语句。

abstractstc <- pubmed_abstracts@Abstract
SentenceToken(abstractstc[1])
# [1] "ahead of print]  The synthesis and anticancer activity of 2-styrylquinoline derivatives." 
# ……

3.1.6 将获得的信息输出为 .txt 文件

这时要用到这个函数:sendabs()

sendabs(pubmed_abstracts,"mypba.txt")

4.1 一些可视化玩法

4.1.1 统计词频

函数 word_atomizations 可以将整个文本拆分成单词,除去空格、标点符号、常用单词,统计剩下的单词出现的频率。

p53_words <- word_atomizations(pubmed_abstracts)
p53_words[1:10,]  ## 只下载了6篇文章的abstract, 样本有点少惹
#          words Freq
# 139     cancer   13
# 385        p53   11
# 146       cell   10
# 147      cells   10
# 221 expression    9
# 83    activity    8
# 111  apoptosis    8
# 382        p16    8
# 226         fd    7
# 304      level    7

4.1.2 统计"基因频"

函数 gene_atomization() 基于包内自带的 HGNC 数据库,可以从文本提取 Gene Symbol 和其出现的频率。

p53_gene <- gene_atomization(pubmed_abstracts)
p53_gene
#      Gene_symbol    Genes                           Freq
# [1,] "TP53"      "tumor protein p53"                "2" 
# [2,] "ADC"       "arginine decarboxylase"           "1" 
# [3,] "NQO1"      "NAD(P)H dehydrogenase, quinone 1" "1" 

4.1.3 两个新技能

以 ”关键词“ 和 "年份" 两个参数,得到 PubMed 中相关文章的数量,并可视化。

参考代码来自这里这里

library(RISmed)
library(dplyr)
library(ggplot2)
library(tidytext)
library(wordcloud)
result <- EUtilsSummary("(p53) AND cancer", 
                         type = "esearch", 
                         db = "pubmed",
                         datetype = "pdat",
                         retmax = 10000,
                         mindate = 1970, 
                         maxdate = 2019)
fetch <- EUtilsGet(result, type = "efetch", db = "pubmed") 
abstracts <- data.frame(title = fetch@ArticleTitle,
                        abstract = fetch@AbstractText, 
                        journal = fetch@Title,
                        DOI = fetch@PMID, 
                        year = fetch@YearPubmed) 
abstracts <- abstracts %>% mutate(abstract = as.character(abstract))
abstracts %>%
  group_by(year) %>%
  count() %>%
  filter(year > 1969) %>%
  ggplot(aes(year, n)) +
  geom_point() +
  geom_line() +
  labs(title = "Pubmed articles with search terms (p53) AND cancer \n1970-2019", hjust = 0.5,
       y = "Articles")

## 然而不知道为什么画出来的图只有2016-2019...(+_+)?

绘制词云图:

cloud <- abstracts %>%
  unnest_tokens(word, abstract) %>%
  anti_join(stop_words) %>%
  count(word, sort = TRUE)
cloud %>%
  with(wordcloud(word, n, min.freq = 15, max.words = 500, colors = brewer.pal(8, "Dark2")), scale = c(8,.3), per.rot = 0.4)

得到了一张又方又丑的图。(:з)∠)_

References


最后,向大家隆重推荐生信技能树的一系列干货!

  1. 生信技能树全球公益巡讲:https://mp.weixin.qq.com/s/E9ykuIbc-2Ja9HOY0bn_6g
  2. B站公益74小时生信工程师教学视频合辑:https://mp.weixin.qq.com/s/IyFK7l_WBAiUgqQi8O7Hxw
  3. 招学徒:https://mp.weixin.qq.com/s/KgbilzXnFjbKKunuw7NVfw
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355