我试图用作者姓名搜索蛋白质数据库,但唯一的选择是使用完整的姓氏和首字母,因此有一些错误的命中。有没有办法用python做到这一点?以下是我使用的代码:
import urllib2
#http://www.rcsb.org/pdb/software/rest.do#search
url = 'http://www.rcsb.org/pdb/rest/search'
queryText = """
<?xml version="1.0" encoding="UTF-8"?>
<orgPdbQuery>
<queryType>org.pdb.query.simple.AdvancedAuthorQuery</queryType>
<description>Author Name: Search type is All Authors and Author is Wang, R. and Exact match is true</description>
<searchType>All Authors</searchType>
<audit_author.name>Wang, R. </audit_author.name>
<exactMatch>true</exactMatch>
</orgPdbQuery>
"""
print "query:\n", queryText
print "querying PDB...\n"
req = urllib2.Request(url, data=queryText)
f = urllib2.urlopen(req)
result = f.read()
if result:
print "Found number of PDB entries:", result.count('\n')
print result
else:
print "Failed to retrieve results"enter code here
答案 0 :(得分:0)
我刚刚发布了一个Python软件包PyPDB,它可以按作者,关键字或主题区域执行RCSB蛋白质数据库的高级搜索。存储库是here,但它也可以在PyPI上找到:
pip install pypdb
对于您的应用程序,我建议首先使用作者姓名对PDB ID进行常规关键字搜索,然后在结果PDB列表中搜索元数据中包含作者姓名的条目:
关键字搜索“肌动蛋白网络”
from pypdb import *
author_name = 'J.A. Doudna'
search_dict = make_query(author_name)
found_pdbs = do_search(search_dict)
现在遍历查找作者姓名的结果
matching_results = list()
for pdb_id in found_pdbs:
desc_pdb = describe_pdb(item)
if author_name in desc_pdb['citation_authors']:
matching_results.append(pdb_id)
您可以想象使用更高级的正则表达式来改善作者姓名或首字母的使用方式的轻微变化。也许有一种更好的方法来编写捆绑请求的代码。