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

如何在Pandas中查找词组及目标词的后续词列表?

解决方法:提取含特定关键词的双字词组及单独关键词

看起来你之前用str.contains("sweet cat")效果不好,是因为这个方法只会精确匹配完整的词组,而你的数据里sweet后面跟着的词可能不一样(比如cats、dogs),甚至sweet可能在句尾没有后续词。下面是一套完整的解决方案,能帮你筛选出所有含sweet的文本,并生成你想要的词组列表:

步骤1:构造示例DataFrame(如果你的数据已存在可跳过)

先还原你的示例数据:

import pandas as pd

data = {
    'id': [1, 2, 3, 4],
    'date': ['1.1.20', '1.1.20', '2.1.20', '3.1.20'],
    'text': ['this is a sweet cat.', 'the cat is sweet.', 'sweet dogs are difficult to find.', 'I love sweet cats.']
}
df = pd.DataFrame(data)

步骤2:筛选所有包含"sweet"的行

先把所有包含sweet的文本行筛选出来,这里用str.contains搭配单词边界确保匹配完整单词:

sweet_texts = df[df['text'].str.contains(r'\bsweet\b')]

用\bsweet\b是为了避免匹配到类似sweeten这种包含sweet的其他单词,保证匹配的是独立的sweet。

步骤3:提取目标词组

我们用正则表达式匹配两种核心情况:

  • sweet后面紧跟一个单词(比如sweet cat、sweet dogs)
  • sweet单独出现在句尾(比如第二行的is sweet.)

用str.findall提取所有符合条件的匹配项,再整理成目标列表:

# 正则表达式:匹配sweet,以及可选的后续单词
pattern = r'\bsweet(?:\s+(\w+))?\b'
matches = sweet_texts['text'].str.findall(pattern)

# 整理成最终的目标列表
target_list = []
for groups in matches:
    for group in groups:
        if group:
            target_list.append(f'sweet {group}')
        else:
            target_list.append('sweet')

运行代码后,target_list就是你想要的结果:

print(target_list)
# 输出: ['sweet cat', 'sweet', 'sweet dogs', 'sweet cats']

为什么之前的方法效果不好?

你之前用str.contains("sweet cat")只能精确匹配这个固定词组,但你的数据里sweet后面的词是变化的,还有sweet单独出现的情况,自然会遗漏大量行。而我们的方法先定位所有含sweet的行,再提取所有sweet相关的可能组合,就不会遗漏了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:32:33