有许多可以从 PubMed
的文章摘要中提取信息的文本挖掘脚本,包括: NLTK
, TextBlob
, gensim
, spaCy
, IBM Whatson NLU
, PubTator
, LitVar
, NegBio
, OpenNLP
和 BioCreative
等<sup>1</sup>。这里介绍一下 PubTator Central (PTC)
<sup>2</sup>。
PubTator Central(PTC)
是一个基于 Web
的系统,提供 PubMed
摘要和 PMC
全文文章中基因和突变等生物医学概念的自动注释。
PubTator
提供了 API
以导出注释,并提供包括 curl
、 Perl
、 Python
、 Java
在内的四种代码示例。当然,直接通过浏览器访问也是可行的。以 GET
、 POST
、 BioC
、 pubtator
或 JSON
格式批量导出 PubTator
的注释出版物,单次最多以 GET
形式获得 100
份或以 POST
形式获得 1000
份。
在线教程(https://www.ncbi.nlm.nih.gov/research/pubtator/api.html)<sup>3</sup>提供了完整的详细信息和代码示例。
PTC RESTful Web
服务以简单的制表符分隔格式( PubTator
格式)和两种基于 BioC
的格式: BioC-XML
和 BioC-JSON
提供对 PTC
结果的编程访问。 PMC
- TM
全文文章需要 BioC-XML
或 BioC-JSON
,但所有三种格式都支持 PubMed
摘要。
PTC RESTful Web
服务 API
的用法:
摘要示例:
全文示例:
https://www.ncbi.nlm.nih.gov/research/pubtator-api/publications/export/biocxml?pmcids=PMC4743391
因此, 可以使用 curl
命令来获得相应的文档. 如:
curl https://www.ncbi.nlm.nih.gov/research/pubtator-api/publications/export/pubtator?pmids=26739349,28483577
如需获得文件, 在后面添加 -o output.pubtator
即可(对 pubtator
文件).
https://www.ncbi.nlm.nih.gov/research/pubtator-api/publications/export/[Format]?[Type]=[Identifiers]&concepts=[Bioconcepts]
注: 如仅需要对PubMed文献进行处理, 则无需搭建环境, 存在 `requests` 包即可. 可跳至本文"上传 `PMID` "部分继续观看.
# conda run
conda create --name py36 python=3.6
conda env list
conda activate py36
conda install virtualenv
conda
安装的安装过程详见篇外部分<sup>外1</sup>.
virtualenv -p python3.6 venv
source venv/bin/activate
pip install -r requirements.txt
ERROR: Could not find a version that satisfies the requirement en-core-sci-sm==0.2.4 (from versions: none)
ERROR: No matching distribution found for en-core-sci-sm==0.2.4
根据 scispacy
官网<sup>6</sup>提示:
pip install https://s3-us-west-2.amazonaws.com/ai2-s2-scispacy/releases/v0.5.1/en_core_sci_sm-0.5.1.tar.gz
进入 requirements.txt
注释 en-core-sci-sm==0.2.4
:
# en-core-sci-sm==0.2.4
再次运行 pip install -r requirements.txt
.
PMID
示例:
python SubmitPMIDList.py input_pmid/ex.pmid pubtator
$ python SubmitPMIDList.py [InputFile] [Format] [BioConcept]
[Inputfile]: a file with a pmid list
[Format]: 1) pubtator (PubTator)
2) biocxml (BioC-XML)
3) biocjson (JSON-XML)
* Reference for format descriptions: https://www.ncbi.nlm.nih.gov/research/bionlp/APIs/format/
[Bioconcept]: Default (leave it blank) includes all bioconcepts. Otherwise, user can choose gene, disease, chemical, species, proteinmutation, dnamutation, snp, and cellline.
* All arguments are case sensitive.
根据文档可知, 可以输出三种格式:
其中, PubTator
是以制表符分隔的, 可以直接在Excel中打开.
在 SubmitPMIDList.py
中查找
else:
print(r.text.encode("utf-8"))
并添加
with open('output_'+Inputfile+'.'+Format, 'wb') as f:
f.write(r.text.encode("utf-8"))
同样, 可以上传三种数据格式, 后缀名分别为 BioC
、 PubTator
、 json
.
而后根据相应的格式传回处理后的文件.
# Submitting requests
python SubmitText_request.py input All SessionNumber.txt
# Retrieving results
python SubmitText_retrieve.py input SessionNumber.txt output
第一步是提交输入文件并获得服务编号, 第二部是根据服务编号获得文件.
值得注意的是文件处理并不是实时的, 一般都需要10~20分钟. 另外, 官方示例中的 python SubmitText_retrieve.py SessionNumber.txt output
疑似缺少参数, 应添加输入文件夹.
代码来自codeium:
Q: 写一个shell脚本将一个纯文本文件每一千行分隔一次, 并输出文件名列表到文件.
A: 下面是一个可以实现您要求的shell脚本,它将一个纯文本文件分隔成每1000行一个文件,并将文件名列表输出到一个文件中:
#!/bin/bash
# 每个文件的行数
LINES=1000
# 输入文件的名称
INPUT_FILE="ex.pmid"
# 文件名前缀
FILE_PREFIX="ex"
# 计数器
count=1
# 读取文件并将其拆分为多个小文件
split -l $LINES $INPUT_FILE $FILE_PREFIX
# 将小文件重命名为您想要的名称格式
for file in $FILE_PREFIX*
do
mv "$file" "${FILE_PREFIX}_${count}.pmid"
count=$((count+1))
done
# 输出文件列表到文件
ls $FILE_PREFIX* > file_names.txt
您可以将上面的脚本保存为 split_and_list_to_file.sh
并通过以下方式运行它:
chmod +x split_and_list_to_file.sh
./split_and_list_to_file.sh
请注意,此脚本假定输入文件名为 ex.pmid
,每个输出文件包含1000行,并将输出文件命名为 ex_1.pmid
, ex_2.pmid
等。如果您需要使用不同的文件名或行数,请相应地更改变量。
另外, 脚本需要 cd
进入 input_pmid
运行.
之后, 对 filenames.txt
中的 ex_1.pmid
, ex_2.pmid
等依次运行 python SubmitPMIDList.py inputpmid/ex.pmid pubtator
.
#!/bin/bash
# 读取文件列表
for file in $(sort -t_ -k2 -n file_names.txt)
do
# 运行 SubmitPMIDList.py 脚本
python ../SubmitPMIDList.py $file pubtator
done
可以将上述脚本保存为 run_submit_pmid.sh
,并通过以下命令执行:
chmod +x run_submit_pmid.sh
./run_submit_pmid.sh
总流程:
cd input_pmid
./split_and_list_to_file.sh
./run_submit_pmid.sh
至此,通过PubTator进行PubMed文本挖掘的处理结果已经获得,如何展示且待下回分解。
本文所使用代码文件可在公众号后台回复 PubTator提取PubMed文章摘要信息
获得.
另外, PubTator
隶属于 bionlp
项目<sup>7</sup>,除 PubTator
以外该项目组还 LitSuggest
和 TeamTat
等优秀项目,有兴趣的话大家可以一试。
wget https://repo.continuum.io/miniconda/Miniconda3-latest-$(uname -s)-$(uname -m).sh
# exemple: wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash ./Miniconda3-latest-$(uname -s)-$(uname -m).sh
# exemple: bash ./Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
conda config --set show_channel_urls yes
conda config --show # 查看新增channels
不推荐, 比较麻烦
sudo apt-get install python
python -V
python3 -V
root@tenney:/www/wwwroot/mdreader.yeyeziblog.eu.org# whereis python
python: /usr/bin/python3.8-config /usr/bin/python2.7 /usr/bin/python3.8 /usr/lib/python2.7 /usr/lib/python3.8 /usr/lib/python3.9 /etc/python2.7 /etc/python3.8 /usr/local/lib/python2.7 /usr/local/lib/python3.8 /usr/include/python3.8 /usr/share/python
root@tenney:/www/wwwroot/mdreader.yeyeziblog.eu.org# rm /usr/bin/python
root@tenney:/www/wwwroot/mdreader.yeyeziblog.eu.org# ln -s /usr/bin/python3.8 /usr/bin/python
RuntimeError: failed to find interpreter for Builtin discover of python_spec='python3.6'
ERROR: Cannot uninstall 'certifi'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。