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

如何在文本列表中查找指定字符串并提取其前后N个词存入data frame

实现思路与代码

首先通过正则的非捕获组限定前后词数,搭配finditer遍历全文所有匹配项,最终汇总为DataFrame即可。

前置依赖

需要用到Python标准库re和数据处理库pandas,中文场景额外需要jieba分词库。

完整代码示例

1. 基础实现(适配英文/已分词文本)

默认以空白字符作为词的分隔依据,自动适配关键词在文档开头/结尾的边界场景:

import re
import pandas as pd

# 配置项
doc_list = ["你的文档1内容", "你的文档2内容"]  # 替换为你的文档列表
target_keyword = "要检索的关键词"  # 替换为你的目标关键词

# 构建匹配正则:前后最多捕获20个词
match_pattern = re.compile(
    rf'(?P<pre_context>(?:\S+\s){{0,20}}){re.escape(target_keyword)}(?P<post_context>(?:\s\S+){{0,20}})',
    flags=re.UNICODE
)

# 遍历文档收集匹配结果
result_list = []
for doc_idx, content in enumerate(doc_list):
    for match_item in match_pattern.finditer(content):
        result_list.append({
            "文档序号": doc_idx,
            "匹配关键词": target_keyword,
            "前20词内容": match_item.group("pre_context").strip(),
            "后20词内容": match_item.group("post_context").strip(),
            "匹配起始位置": match_item.start(),
            "匹配结束位置": match_item.end()
        })

# 转为DataFrame
result_df = pd.DataFrame(result_list)

2. 中文场景适配

中文文本没有天然空格分隔,需要先分词再执行匹配:

import jieba

# 中文文档分词处理函数
def doc_cut(doc: str) -> str:
    return " ".join(jieba.lcut(doc))

# 预处理所有文档
processed_doc_list = [doc_cut(doc) for doc in doc_list]
# 后续把processed_doc_list替换到基础实现的doc_list位置即可

关键逻辑说明

  • 前后词数统计:正则中(?:\S+\s){0,20}是非捕获组,最多匹配20个「非空白字符+分隔符」的组合,自动适配不足20词的边界场景,不需要手动计数。
  • 全文持续匹配:用finditer方法返回所有匹配项的迭代器,遍历即可拿到同一文档中所有命中的关键词结果,不会只返回第一个匹配项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:06:05