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

基于Python Pandas实现特定词汇句子提取与标记的高效类编写需求

高效实现文本匹配与格式化的Python类

需求说明

  • 提取包含指定词汇的句子
  • 在匹配到的特定词汇前后添加*标记
  • 单条文本中若有多句匹配,拆分后每行保留一句
  • 过滤掉完全没有匹配词汇的文本行

数据集

text
I like to eat bananas. I like to eat apples. I like to eat pears.
I like to eat apples. I like to eat almonds. I like to eat fruits.
I like to eat walnuts. I like to eat fruits.
I like walnuts. I like figs.

需匹配的词汇列表

words = ['apples','fruits']

期望输出格式

final_text
I like to eat *apples*.
I like to eat *apples*.
I like to eat *fruits*.
I like to eat *fruits*.

现有实现的问题

原代码需要逐个指定词汇处理,步骤繁琐且效率低下,无法批量处理词汇列表,还需要额外的空值过滤步骤。

解决方案:批量处理类实现

import pandas as pd
import re

class TextMatcherFormatter:
    def __init__(self, target_words):
        # 构建匹配任意目标词汇的正则模式,确保匹配完整单词
        self.pattern = re.compile(
            r'([^.]*?\b(' + '|'.join(map(re.escape, target_words)) + r')\b[^.]*)\.',
            re.IGNORECASE
        )
        # 构建用于替换词汇为带星号格式的函数
        self.replace_func = lambda m: m.group(1).replace(m.group(2), f'*{m.group(2)}*') + '.'

    def process_text(self, text):
        # 提取所有匹配的句子并格式化词汇
        matched_sentences = self.pattern.findall(text)
        # 对每个匹配结果应用替换,得到格式化后的句子
        formatted = [self.replace_func(re.match(r'([^.]*?\b' + re.escape(word) + r'\b[^.]*)', sent[0])) 
                     for sent in matched_sentences]
        return formatted

# 示例使用
if __name__ == "__main__":
    # 构造测试数据集
    data = {
        'text': [
            'I like to eat bananas. I like to eat apples. I like to eat pears.',
            'I like to eat apples. I like to eat almonds. I like to eat fruits.',
            'I like to eat walnuts. I like to eat fruits.',
            'I like walnuts. I like figs.'
        ]
    }
    df = pd.DataFrame(data)
    
    # 初始化处理器
    matcher = TextMatcherFormatter(['apples', 'fruits'])
    
    # 处理文本并展开为每行一句
    df['final_text'] = df['text'].apply(matcher.process_text)
    df = df.explode('final_text').dropna(subset=['final_text']).reset_index(drop=True)
    
    # 输出结果
    print(df[['final_text']])

代码说明

  1. 初始化阶段:将目标词汇列表转为正则模式,确保匹配完整单词(避免部分匹配,比如不会把'applesauce'误判为'apples'),同时构建词汇替换函数。
  2. 文本处理:使用正则提取所有包含目标词汇的句子片段,然后对每个句子中的目标词汇添加星号标记。
  3. DataFrame处理:用explode将单列表中的多个句子拆分为单独行,过滤空值后得到最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:50:39