如何快速了解某个细胞的亚型的种类?

发布于:2025/10/23 作者:沈大力 浏览量:70 评论:0

标签: 生物信息 Python



当我们做细胞注释时,最头疼的就是细胞亚型注释。常见的几个亚型还好,但有的时候我们想知道这类细胞还有哪些别的亚型,或许这些亚型更符合自己目前的发现。结果我们在各种网站上搜,东凑凑西凑凑可能也凑不全,还花了不少时间精力。那有没有效率点的方法呢?

想要知道细胞亚型有哪些,我们当然还是看PubMed了。但问题在于,我们如果在PubMed中直接搜索相关关键词,比如:macrophage[tiab] AND (single cell[tiab] OR scRNA[tiab]) ,直接给你蹦出上万篇文献,这得看到猴年马月啊...那咋办呢?那肯定只能让机器来替你“读文献”呐。不过咱不用上LLM,有点杀鸡用牛刀的感觉了。直接写个简单的python脚本即可。

思路很简单,我们的需求是从PubMed中先检索相关信息,然后直接用正则表达式提取相关语句中的内容,进而得到最终的结果。我们想象一下如果我们自己从文献中获取相关的信息,我们是先打开这篇文献的摘要看看,然后直接看有没有xxx+ 细胞。这个操作让机器来做就是:1. 获取摘要;2. 通过你设置的正则表达式在摘要中搜索;3. 记录相关信息。知道这个操作了,代码就好写了:

from Bio import Entrez, Medline
import re
import pandas as pd
import time
from tqdm import tqdm

Entrez.email = "你的邮箱"

query = '"macrophage"[Title/Abstract] AND ("2020/01/01"[PDAT] : "2025/12/31"[PDAT]) AND (single cell[tiab] OR single-cell[tiab] OR scRNA[tiab])'
handle = Entrez.esearch(db="pubmed", term=query, retmax=10000)
record = Entrez.read(handle)
ids = record["IdList"]

print(f"共找到 {len(ids)} 篇含有macrophage的文献")

batch_size = 200
results = []

for i in tqdm(range(0, len(ids), batch_size)):
    id_batch = ids[i:i + batch_size]
    handle = Entrez.efetch(db="pubmed", id=",".join(id_batch),
                           rettype="medline", retmode="text")
    records = Medline.parse(handle)

    for rec in records:
        pmid = rec.get("PMID", "")
        title = rec.get("TI", "")
        abstract = rec.get("AB", "")
        text = f"{title}. {abstract}"
        journal = rec.get("JT", "")
        year = rec.get("DP", "").split(" ")[0]

        # 按句切分
        sentences = re.split(r'(?<=[.!?])\s+', text)
        for sent in sentences:
            matches = re.findall(r'\b([A-Z0-9\-]{2,10})\s*\+\s*macrophage', sent)
            if matches:
                for m in matches:
                    results.append({
                        "PMID": pmid,
                        "Year": year,
                        "Journal": journal,
                        "Title": title,
                        "Marker": m,
                        "Sentence": sent.strip()
                    })
    handle.close()
    time.sleep(0.5)

# 保存结果
df = pd.DataFrame(results)
df = df.drop_duplicates()
df.to_csv("macrophage_marker_sentences_2020_2025.csv", index=False)

print(f"共提取 {len(df)} 条句子,涉及 {df['Marker'].nunique()} 个不同marker。")
print(df.head(10))

以上这个示例代码非常通用,你还可以自己修改query搜索关键词内容进行更精细化的搜索。总之,只需几行 Python 代码,就能让 PubMed 自动帮你整理出所有被命名过的细胞亚型,既高效又系统。

-END-

评论:


该博文评论功能已关闭。


苏公网安备 32050602011302号
苏ICP备2020062135号-1
Copyright© Li Shen. All rights reserved.