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

R语言拆分PubMed抓取数据中格式复杂的cite列

拆分PubMed爬取的cite字段为多列的解决方案

针对你爬取PubMed得到的cite字段格式不规整的问题,可以通过正则表达式定向提取的方式拆分目标字段,以下是R和Python的具体实现方案:

核心思路

观察cite字段的结构,各目标字段有明显的特征:

  • 期刊名(Reference):字段开头到第一个. 的内容
  • 出版日期(Date of publication):4位年份 + 3字母月份的组合
  • 页码(Page):卷号(可选期号):起始页码-结束页码的格式
  • doi:以doi: 开头的连续字符
  • Epub日期:以Epub 开头的完整日期
  • PMID:以PMID: 开头的数字串
  • Review:若字段包含Review关键词则标记为综述

R 实现(基于tidyverse)

# 加载依赖包
library(tidyverse)

# 提取并清理各字段
result_cleaned <- result %>%
  # 提取原始内容
  mutate(
    Reference = str_extract(cite, "^[^\\.]+\\."),
    `Date of publication` = str_extract(cite, "\\d{4} [A-Z][a-z]{2}"),
    Page = str_extract(cite, "\\d+(?:\\(\\d+\\))?:\\d+-\\d+"),
    doi = str_extract(cite, "doi: \\S+"),
    Epub = str_extract(cite, "Epub \\d{4} [A-Z][a-z]{2} \\d+"),
    PMID_cite = str_extract(cite, "PMID: \\d+"),
    Review = ifelse(str_detect(cite, "Review"), "Yes", "No")
  ) %>%
  # 清理多余前缀/标点
  mutate(
    Reference = str_remove(Reference, "\\.$"),
    doi = str_remove(doi, "doi: "),
    Epub = str_remove(Epub, "Epub "),
    PMID_cite = str_remove(PMID_cite, "PMID: ")
  )

Python 实现(基于Pandas)

import pandas as pd
import re

# 定义各字段的正则匹配模式
pattern_map = {
    "Reference": r"^[^\.]+\.",
    "Date of publication": r"\d{4} [A-Z][a-z]{2}",
    "Page": r"\d+(?:\(\d+\))?:\d+-\d+",
    "doi": r"doi: \S+",
    "Epub": r"Epub \d{4} [A-Z][a-z]{2} \d+",
    "PMID_cite": r"PMID: \d+"
}

# 批量提取字段
for col_name, pattern in pattern_map.items():
    result[col_name] = result["cite"].str.extract(pattern, expand=False)

# 清理字段内容
result["Reference"] = result["Reference"].str.rstrip(".")
result["doi"] = result["doi"].str.replace("doi: ", "", regex=False)
result["Epub"] = result["Epub"].str.replace("Epub ", "", regex=False)
result["PMID_cite"] = result["PMID_cite"].str.replace("PMID: ", "", regex=False)

# 标记Review字段
result["Review"] = result["cite"].str.contains("Review").map({True: "Yes", False: "No"})

特殊情况处理

如果存在少量格式异常的cite条目,可以通过以下方式排查:

  1. 用str_detect(R)或str.contains(Python)筛选出不匹配核心模式的记录
  2. 针对这类记录调整正则表达式,或者手动补全字段内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:52:36