You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Biopython通过基因名称获取NCBI Entrez摘要?

解决Entrez获取NCBI基因功能摘要的问题

问题背景

用户尝试通过Entrez获取NCBI基因的功能摘要(例如Kat2a基因的功能描述:Enables H3 histone acetyltransferase activity; chromatin binding activity; and histone acetyltransferase activity (H4-K12 specific). Involved in several processes),但现有代码无法返回目标内容,且对Entrez机制不熟悉。

原代码

from Bio import Entrez

def get_summary(gene_name):
    Entrez.email = 'x'

    query = f'{gene_name}[Gene Name]'
    handle = Entrez.esearch(db='gene', term=query)
    record = Entrez.read(handle)
    handle.close()

    NCBI_ids = record['IdList']
    for id in NCBI_ids:
        handle = Entrez.esummary(db='gene', id=id)
        record = Entrez.read(handle)
        print(record['Summary'])
    return 0

问题原因与修复方案

  1. 无效邮箱:NCBI要求填写真实有效邮箱(用于请求超限通知),使用占位符'x'可能导致请求被拦截
  2. 字段路径错误:Entrez esummary返回的基因摘要嵌套在多层结构中,原代码直接访问record['Summary']无法获取正确内容
  3. 多ID冗余输出:搜索可能返回多个基因条目,优先取第一个结果即可避免冗余

修正后的代码

from Bio import Entrez

def get_gene_summary(gene_name):
    # 替换为你的真实有效邮箱
    Entrez.email = "your_real_email@example.com"
    
    # 搜索目标基因的NCBI ID
    query = f"{gene_name}[Gene Name]"
    with Entrez.esearch(db="gene", term=query) as handle:
        search_result = Entrez.read(handle)
    
    ncbi_ids = search_result["IdList"]
    if not ncbi_ids:
        print("未找到匹配的基因条目")
        return
    
    # 获取第一个匹配基因的详细摘要
    with Entrez.esummary(db="gene", id=ncbi_ids[0]) as handle:
        summary_data = Entrez.read(handle)
    
    # 提取功能摘要字段
    functional_summary = summary_data["DocumentSummarySet"]["DocumentSummary"][0]["Summary"]
    print(functional_summary)

# 测试:获取Kat2a基因的摘要
get_gene_summary("Kat2a")

额外优化建议

如果需要指定物种(如人类/小鼠),可修改搜索query缩小范围:

  • 小鼠:f"{gene_name}[Gene Name] AND Mus musculus[Organism]"
  • 人类:f"{gene_name}[Gene Name] AND Homo sapiens[Organism]"

内容的提问来源于stack exchange,提问作者Epic Cabbage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:42:41