Posted at
RDay 13

RでMeSH(Medical Subject Headings)を触ってみる

More than 1 year has passed since last update.


MeSHとは

医学系論文を検索しやすいように同じ意味の言葉を一つの言葉をまとめていったものです。

例えば、癌(Cancer)なんかは悪性腫瘍(Tumor)や悪性新生物(Neoplasm)など、表記ゆれがあります。

これらを統制して一つの単語にまとめることで、すべての単語を検索せずとも、統制語(neoplasms)による検索によって一挙に調べることが可能になります。


NLM(米国国立医学図書館)が作成するシソーラス Medical Subject Headings(医学主題見出し)の略称です。シソーラスとは、様々な医学用語を統一して上位語・下位語を整理した統制語辞書のことです。MeSH は主題による階層構造になっており、下位に行くほど用語がより詳細になります。また、医療や医学専門用語の変化に対応させるために定期的に更新されています。


http://www.lib.m.u-tokyo.ac.jp/manual/pubmedmanual.pdf


統一用語のMeSHデータベースをRで触ってみる

MeSHはデータベースとして提供されており、R言語だとBioconductorのmeshrというパッケージで簡単に入手でき、容易に取り出すことが出来ます。

## try http:// if https:// URLs are not supported

source("https://bioconductor.org/biocLite.R")
biocLite("meshr")
library(meshr)


meshrの使い方


R方式

LEU <- select(MeSH.db, keys = "Leukemia", columns = c("MESHID", "MESHTERM", "CATEGORY", "SYNONYM"), keytype = "MESHTERM")

LEU

meshrのselect()を使ってデータベースからデータを取り出すことが出来ます。


SQL方式

library("RSQLite")

LEU <- dbGetQuery(dbconn(MeSH.db), "SELECT MESHID, MESHTERM, CATEGORY, SYNONYM FROM DATA WHERE MESHTERM = 'Leukemia'")
LEU <- unique(LEU)
LEU

RSQLiteを使ってSQL文でそのまま取り出すことが出来ます。

この場合、R側でuniqueにしないと重複は取り除けません。


ある単語からそのMeSHを取りだす

花粉症に関するMeSHを取り出してみたいと思います。

MESHTERMかSYNONYMに入っていると思われるので、あいまい検索も使って調べてみます。

library("RSQLite")

HF <- dbGetQuery(dbconn(MeSH.db), "SELECT MESHID, MESHTERM, CATEGORY, SYNONYM FROM DATA WHERE UPPER(SYNONYM) LIKE UPPER('%Hay Fever%') OR UPPER(MESHTERM) LIKE UPPER('%Hay Fever%')")
HF <- unique(HF)
HF

   MESHID                     MESHTERM CATEGORY

1 D006255 Rhinitis, Allergic, Seasonal C
SYNONYM
1 Hay Fever|T047|T184|NON|EQV|NLM (1966)|990101|abbcdef

その結果、Rhinitis, Allergic, SeasonalがMeSHとして出力されました。

IDも出力されてるので、今度は逆に他にどんなシノニムがあるか調べてみましょう。

RAS <- dbGetQuery(dbconn(MeSH.db), "SELECT SYNONYM FROM DATA WHERE MESHID ='D006255'")

RAS <- unique(RAS)
RAS

1                                            Allergic Rhinitides, Seasonal

38 Allergic Rhinitis, Seasonal
75 Allergies, Pollen
112 Allergy, Pollen
149 Fever, Hay
186 Hay Fever|T047|T184|NON|EQV|NLM (1966)|990101|abbcdef
223 Hayfever|T047|T184|NON|EQV|UNK (19XX)|781214|abbcdef
260 Pollen Allergies
297 Pollen Allergy|T047|T184|NON|EQV|NLM (2006)|050420|abbcdef
334 Pollinoses
371 Pollinosis|T047|T184|NON|EQV|NLM (2006)|050420|abbcdef
408 Rhinitides, Seasonal Allergic
445 Rhinitis, Seasonal Allergic
482 Seasonal Allergic Rhinitides
519 Seasonal Allergic Rhinitis|T047|T184|NON|EQV|NLM (2006)|050420|abbcdef

Pollen AllergyとかPollinosisなどと呼ばれていることが分かります。

今回はここまでですが、他にも概念の階層を調べたり、関連する遺伝子も調べたり出来るようです。もうちょっと触ってみます。


MeSH on Demand

https://meshb.nlm.nih.gov/MeSHonDemand

Rとは関係ないのですが、こちらに自分の研究の要旨などを入れると10個くらいのMeSHを返してくれます。

更にでてきたMeSHから近い分野の論文を自動的に出力してくれるので、おなじ対象に対してどういったアプロ―チで他の研究がなされているか分かります。

プログラミングは出来ないけど、MeSHは触ってみたいという方はぜひどうぞ。

(どうやってこれは実装しているのだろう。。。気になる。。。)


参考

https://www.nlm.nih.gov/mesh/meshhome.html

http://libserve.nms.ac.jp/manual5/pubmed/pubmedmanual5.pdf

http://www.nara-wu.ac.jp/aic/seminar/PubMed.pdf

https://www.bioconductor.org/packages/release/bioc/vignettes/meshr/inst/doc/MeSH.pdf

https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-015-0453-z

http://onlinelibrary.wiley.com/doi/10.1111/age.12307/full