- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开展一个项目,我必须构建 SVM 分类器来根据文章标题和摘要中的单词来预测 MeSH 术语分配。我们获得了包含 1000 个 PMID 的 gzip 文件,用于标识每篇文章。下面是一个示例文件:
PMID- 22997744
OWN - NLM
STAT- MEDLINE
DCOM- 20121113
LR - 20120924
IS - 0042-4676 (Print)
IS - 0042-4676 (Linking)
IP - 3
DP - 2012 May-Jun
TI - [Value of magnetic resonance imaging in the diagnosis of recurrent colorectal
cancer].
PG - 28-33
AB - To diagnose recurrent colorectal cancer is an urgent problem of oncoproctology.
Eighty patients with suspected recurrent colon tumor were examined. All the
patients underwent irrigoscopy, colonoscopy, magnetic resonance imaging of the
abdomen and small pelvis. The major magnetic resonance symptoms of recurrent
colon tumors were studied; a differential diagnosis of recurrent processes and
postoperative changes at the site of intervention was made.
FAU - Dan'ko, N A
MH - Aged
MH - Colon/pathology/surgery
MH - Colorectal Neoplasms/*diagnosis/pathology/surgery
MH - Diagnosis, Differential
MH - Female
MH - Humans
MH - Magnetic Resonance Imaging/*methods
MH - Male
MH - Middle Aged
MH - Neoplasm Recurrence, Local/*diagnosis
MH - Postoperative Complications/*diagnosis
MH - Rectum/pathology/surgery
MH - Reproducibility of Results
我正在尝试弄清楚如何创建一个具有以下功能的字典:
{PMID: {Title (TI): Title words},
{Abstract (AB): Abstract words},
{MeSH (MH): MeSH terms}}.
有没有简单的方法可以做到这一点?到目前为止,我知道下面的代码很接近,但它并不完美。
class Node:
def __init__(self, indented_line):
self.children = []
self.level = len(indented_line) - len(indented_line.lstrip())
self.text = indented_line.strip()
def add_children(self, nodes):
childlevel = nodes[0].level
while nodes:
node = nodes.pop(0)
if node.level == childlevel: # add node as a child
self.children.append(node)
elif node.level > childlevel: # add nodes as grandchildren of the last child
nodes.insert(0,node)
self.children[-1].add_children(nodes)
elif node.level <= self.level: # this node is a sibling, no more children
nodes.insert(0,node)
return
def as_dict(self):
if len(self.children) > 1:
return {self.text: [node.as_dict() for node in self.children]}
elif len(self.children) == 1:
return {self.text: self.children[0].as_dict()}
else:
return self.text
# Problem A [0 points]
def read_data(filenames):
data = None
# Begin CODE
data = {}
contents = []
for filename in filenames:
with gzip.open(filename,'rt') as f:
contents.append(f.read())
root = Node('root')
root.add_children([Node(line) for line in contents[0].splitlines() if line.strip()])
d = root.as_dict()['root']
print(d[:50])
# End CODE
return data
最佳答案
让我们将示例简化为更简单的内容:
content = """
PMID- 22997744
OWN - NLM
TI - [Value of magnetic resonance imaging in the diagnosis of recurrent colorectal
cancer].
PG - 28-33
AB - To diagnose recurrent colorectal cancer is an urgent problem of oncoproctology.
Eighty patients with suspected recurrent colon tumor were examined.
FAU - Dan'ko, N A
MH - Aged
MH - Colon/pathology/surgery"""
您可以使用regular expressions来匹配一个模式。正则表达式是一种深入而强大的工具:
>>> match = re.search('^PMID- (.*)$', content, re.MULTILINE)
模式 ^PMID- (.*)$
匹配行的开头 ^
后跟 PMID-
然后是多个字符 .
,然后是行尾 $
。括号(.*)
表示括号内匹配的结果将被放在一个组中。我们需要检查是否存在匹配:
>>> match is not None
True
我们可以查询匹配:
>>> match.groups()
('22997744',)
因此,我们可以看到有一个组(因为我们在模式中只定义了一个组),并且它与 PMID 匹配:22997744
。
我们可以通过请求匹配组 1 的值来获取该值。匹配组 0 是匹配的整个字符串:PMID- 22997744
。
>>> pmid = match.group(1)
>>> pmid
'22997744'
使用 TI
和 AB
进行多行匹配的模式要困难得多。我不是专家,也许其他人会提供更好的东西。我只是先进行文本替换,所以所有文本都在一行上。例如:
>>> text = """TI - [Value of magnetic resonance imaging in the diagnosis of recurrent colorectal
... cancer].
>>> print(text)
TI - [Value of magnetic resonance imaging in the diagnosis of recurrent colorectal
cancer].
>>> print(text.replace('\n ', ' '))
TI - [Value of magnetic resonance imaging in the diagnosis of recurrent colorectal cancer].
然后我们可以以类似的方式匹配TI
和AB
:
>>> content = content.replace('\n ', ' ')
>>> match = re.search('^TI - (.*)$', content, re.MULTILINE)
>>> ti = match.group(1)
>>> ti
'[Value of magnetic resonance imaging in the diagnosis of recurrent colorectal cancer].'
>>> match = re.search('^AB - (.*)$', content, re.MULTILINE)
>>> ab = match.group(1)
>>> ab
'To diagnose recurrent colorectal cancer is an urgent problem of oncoproctology. Eighty patients with suspected recurrent colon tumor were examined'
为了匹配 MH
,我们希望找到所有匹配项。 re.search
只会找到第一个匹配项。 re.findall
将返回多个匹配项:
>>> mh = re.findall('^MH - (.*)$', content, re.MULTILINE)
>>> mh
['Aged', 'Colon/pathology/surgery']
将所有这些放在一起:
data = {}
data[pmid] = {'Title': ti,
'Abstract': ab,
'MeSH': mh}
这给出了(使用 pprint
使其看起来更好):
>>> from pprint import pprint
>>> pprint(data)
{'22997744': {'Abstract': 'To diagnose recurrent colorectal cancer is an urgent problem of oncoproctology. Eighty patients with suspected recurrent colon tumor were examined.',
'MeSH': ['Aged', 'Colon/pathology/surgery'],
'Title': '[Value of magnetic resonance imaging in the diagnosis of recurrent colorectal cancer].'}}
关于python - 如何解析 PubMed 文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53798457/
这是 this 的后续问题问题。 同样的想法:我从 PubMed 中提取 XML 数据,并使用curl 来处理这些结果。这使我能够获取所需的信息(酒吧 ID 列表)并将其用作另一个 PubMed 抓取
在开展项目时,我需要下载和处理 PubMed 摘要的全文文章,是否有任何实现的代码或工具允许用户输入一组 PubMed id 并下载相同的免费全文文章。非常感谢任何类型的帮助或提示。 最佳答案 由于
我在从以下查询获取摘要时遇到问题 Entrez.email = "anonymous@gmail.com" esearch_query = Entrez.esearch(db="pubmed", te
我正在开展一个项目,我必须构建 SVM 分类器来根据文章标题和摘要中的单词来预测 MeSH 术语分配。我们获得了包含 1000 个 PMID 的 gzip 文件,用于标识每篇文章。下面是一个示例文件:
我正在使用 BioPython 通过 eutils API 查询 Pubmed 数据库。 esearch端点有一个排序选项,但 API 文档没有列出这个值的所有选项。 http://www.ncbi.
我有 pmids 列表我想在单个网址点击中获取他们两个的摘要 pmids=[17284678,9997] abstract_dict={} url = https://euti
我正在使用JEUtils在 Java 中获取并解析 Pubmed 结果(这是一个似乎已被放弃的工具)。 从几天前开始,该工具在某些结果中抛出异常,经过检查,Pubmed 似乎没有尊重自己的 DTD (
我正在尝试针对 Pubmed 的 Eutils 服务运行一些查询。如果我在网站上运行它们,我会返回一定数量的记录,在本例中为 13126 ( link to pubmed )。 不久前,我将一个 py
我有一些代码可以访问 PubMed 中的文章并解析每个 XML 中的一些信息。该程序在我的计算机上运行良好,但需要很多时间才能完成。因此,当我在 UNIX 机器上运行它(特别是对于此类事情)时,我发出
你能告诉我如何从PubMed 获取5 篇最新文章吗?包含“肥胖”一词并使用 Python 返回每篇论文的作者、标题、日期、doi 和 PubMed PMID?提前谢谢你 编辑: 到目前为止我的尝试。我
我的总体目标是构建一个共同作者网络图。我有一个 PubMed ID 的列表,这些是我唯一感兴趣的关于共同作者网络图表的出版物。我无法弄清楚如何使用 rentrez 在我的查询中同时获取作者姓名和各自的
我一直在使用 R 中非常有用的 rentrez 包从 Pubmed 数据库中获取有关作者、文章 ID 和作者隶属关系的信息。这工作正常,但现在我想从附属字段中提取信息。不幸的是,隶属关系字段是广泛的非
我编写了一个 PHP 脚本,它根据用户输入自动搜索 NCBI Pubmed 数据库。这是一个相当大的脚本,我不会费心把它全部放在这里。但我无法弄清楚的一个问题是,为什么当我使用 esearch(eut
我想下载所有发布的数据摘要。 有谁知道我如何轻松下载所有已发表的文章摘要? 我得到了数据的来源: ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/af/12/ 反正有没有下载所有
我最近一直在使用优秀的rplos package ,这使得搜索公共(public)科学图书馆 (PLOS) API 上托管的论文变得非常容易。我遇到了一个障碍,因为 API 本身似乎缺少一些信息 -
我正在尝试使用 PubMed API 搜索具有确切标题的文章。举个例子,我想搜索标题 The cost-effectiveness of mirtazapine versus paroxetine i
根据NCBI Help Desk 的回答之一,我们无法“批量下载”医学中心 .但是,我可以使用“NCBI E-utilities”下载吗?全部 PMC 数据库中的全文论文使用 Efetch 或者至少使
有没有人实现了一个程序,可以下载带有标题、作者、日期和内容的已发表摘要,以在给定 MESH 术语的情况下将纯文本文件分开? 最佳答案 http://www.ncbi.nlm.nih.gov/entre
我正在尝试使用 python 抓取 pubmed 并获取一篇文章被引用的所有论文的 pubmed ID。 例如本文(ID:11825149) http://www.ncbi.nlm.nih.gov/p
我手动转到 pubmed,例如搜索我的主题,例如 http://www.ncbi.nlm.nih.gov/pubmed/?term=Cancer+TFF然后从夏天开始,我得到了 PMID。然后尝试使用
我是一名优秀的程序员,十分优秀!