如何用Python提取匹配特定词序列的句子分句?
多关键词(含双字词/短语)分句提取解决方案
嘿,我来帮你搞定这个从大量句子里提取匹配特定单词组合的问题!原来的代码只能匹配单个单字词,咱们把它升级成支持**任意长度关键词(单字、双字词、多字短语)**的版本,直接看下面的方案:
核心思路
- 用正则表达式的
|运算符把所有要匹配的关键词组合成一个匹配模式,同时用re.escape()处理关键词里的特殊字符(避免正则语法冲突) - 针对中文分句的特点,用
[^。!?]*匹配关键词前后的内容,确保提取的是完整的分句片段(以中文常用标点分隔) - 用Pandas的
str.extractall()或str.findall()批量提取所有匹配的片段
完整代码实现
import pandas as pd import re # 读取数据 df = pd.read_csv('text.csv') # 定义要匹配的关键词组合:支持单字、双字词、多字短语 identifiers = ('什么', '如何解决', '问题根源', '处理方法') # 构建正则匹配模式:转义关键词+匹配前后分句内容 # 解释:[^。!?]* 匹配任意非中文标点的字符,确保提取完整分句片段 pattern = r'([^。!?]*{}[^。!?]*)'.format('|'.join(map(re.escape, identifiers))) # 提取所有匹配的分句片段,生成新的结果列 df['matched_fragments'] = df['sentence'].str.findall(pattern) # 如果需要把每个匹配的片段拆成单独行(方便后续分析),可以用explode df_exploded = df.explode('matched_fragments').dropna(subset=['matched_fragments']) # 查看结果 print(df_exploded[['sentence', 'matched_fragments']])
关键细节说明
- 关键词转义:用
map(re.escape, identifiers)处理每个关键词,比如如果关键词里有+``.这类正则特殊字符,会自动转义,避免匹配出错 - 分句匹配逻辑:
[^。!?]*会匹配关键词前后所有非分句标点的内容,确保提取的是一个完整的语义片段,而不是零散的字符 - 结果处理:
str.findall()会返回每行所有匹配的片段列表,explode()可以把列表拆成单独的行,方便后续统计或分析
示例效果
假设你的text.csv里有这样的句子:
用户问如何解决系统卡顿的问题,什么原因导致的?需要快速找到问题根源。
运行代码后,matched_fragments列会提取出:
- "如何解决系统卡顿的问题"
- "什么原因导致的"
- "找到问题根源"
内容的提问来源于stack exchange,提问作者twhale
相关产品推荐
相关产品推荐

