使用 Biopython 控制术语爆炸

问题描述

在对 Medline/PubMed 进行 Biopython 搜索时,我一直无法找到有关如何控制术语爆炸的文档。

例如,如果我在 PubMed 上搜索 surgery,oral [MH],它会找到 69,926 个匹配的出版物。 (据说 PubMed 会自动分解术语。)

https://pubmed.ncbi.nlm.nih.gov/?term=surgery%2C+oral+%5BMH%5D&sort=date&show_snippets=off

但是下面的代码只返回了 8561 个出版物的计数。更令人费解的是,输出中的翻译堆栈似乎声称该术语已爆炸。

import Bio.Entrez as Entrez
import pprint

search_handle = Entrez.esearch( 
                    db = "pubmed",term = "surgery,oral [MH]",rettype = 'uilist',retmax = 1,)
search_results = Entrez.read(search_handle)
search_handle.close()
pprint.pprint( search_results.items() )

输出如下:

[(u'Count','8561'),(u'RetMax','1'),(u'IdList',['33499855']),(u'TranslationStack',[{u'Count': '8561',u'Field': 'MeSH Terms',u'Term': '"surgery,oral"[MeSH Terms]',u'Explode': 'Y'},'GROUP']),(u'TranslationSet',[{u'To': '"surgery,u'From': 'surgery,oral[MH]'}]),(u'RetStart','0'),(u'QueryTranslation','"surgery,oral"[MeSH Terms]')]

我如何强制 Biopython 要求 Medline 爆炸该术语?这是 Biopython 1.75。我仅限于 Python 2.7。

谢谢。

解决方法

解决方案出奇的简单:

只需去掉搜索词中的逗号 ,:使用 term="surgery oral [MH]" 而不是 term="surgery,oral [MH]" 执行搜索。

通过之前的搜索,我目前收到的计数为 69945 - 与我在 PubMed 网页上搜索 surgery,oral[mh] 时得到的数字相同。

后一个搜索词导致当前的计数为 8561。

如果您仔细查看您的输出,您会发现您的原始搜索词被翻译成 "surgery,oral"[MeSH Terms]。在 PubMed 上输入该字符串(包括 " 引号)也会为您提供 8561 个结果 - [MeSH 术语] 只是 [mh] 的长形式。