You need to enable JavaScript to run this app. 如何从Pandas DataFrame文本中匹配双词表并提取冒号分隔的配对结果
优惠活动
大模型
产品
解决方案
定价
更多

如何从Pandas DataFrame文本中匹配双词表并提取冒号分隔的配对结果

实现方案

核心逻辑

  • 先预编译两个词表的正则表达式,避免重复编译提升效率,可添加单词边界避免子串误匹配
  • 复用你已完成的spaCy分句结果,逐句分别匹配两个词表的所有命中元素
  • 按最大长度对齐两个词表的命中结果,生成对应配对,空值位置保留冒号空位
  • 所有配对结果用逗号拼接后存入DataFrame新列

完整可运行代码

import pandas as pd
import re
import spacy

# 1. 初始化spacy分句器,如果你已经完成分句可跳过这部分
nlp = spacy.load("en_core_web_sm", disable=["ner", "tagger", "parser"])
nlp.add_pipe('sentencizer')

# 2. 预编译正则匹配规则,可根据需求调整是否忽略大小写、是否加单词边界
ANATOMY_PATTERN = r'\b(oesophagus|stomach|duodenum)\b'
EVENT_PATTERN = r'\b(clip|RFA|balloon|biopsy)\b'
anatomy_re = re.compile(ANATOMY_PATTERN, flags=re.IGNORECASE)
event_re = re.compile(EVENT_PATTERN, flags=re.IGNORECASE)

# 3. 单条文本处理函数
def match_term_pairs(text):
    doc = nlp(text)
    pairs = []
    for sent in doc.sents:
        sent_content = sent.text
        # 提取当前句所有命中的解剖词、事件词
        hit_anatomies = [m.group(1).lower() for m in anatomy_re.finditer(sent_content)]
        hit_events = [m.group(1).lower() for m in event_re.finditer(sent_content)]
        # 对齐长度生成配对
        max_length = max(len(hit_anatomies), len(hit_events))
        for idx in range(max_length):
            anatomy = hit_anatomies[idx] if idx < len(hit_anatomies) else ""
            event = hit_events[idx] if idx < len(hit_events) else ""
            pairs.append(f"{anatomy}:{event}")
    return ",".join(pairs)

# 4. 批量处理DataFrame的文本列
# 替换为你的DataFrame名称、文本列名称
df['pair_result'] = df['your_text_column'].apply(match_term_pairs)

常见问题修复

你之前正则运行失败大概率是以下原因:

  • 没有逐句处理,导致跨句的两个词被误判定为同句配对
  • 没有同时提取两个词表的匹配结果,仅处理了单个词表
  • 未做长度对齐逻辑,无法生成带空位的配对结果

测试验证

拿示例文本测试:

输入文本:"The patient had oesophagus clip placement, then biopsy was performed. Stomach balloon was used, duodenum was checked without operation."
输出结果:oesophagus:clip,:biopsy,stomach:balloon,duodenum:,符合需求要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 07:45:02