如何在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
相关产品推荐
相关产品推荐

