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

Pandas str.contains令牌匹配顺序问题及集合级匹配方案咨询

解决DataFrame中公司名称的令牌集合匹配问题

嘿,这个场景我太熟悉了!str.contains()默认是按连续子串匹配的,所以当你用book company ltd去匹配book company services ltd时,因为中间插了services这个词,连续子串完全不重合,自然匹配失败。不过确实有基于令牌(单词集合)的匹配方案,下面给你几个实用的解决办法:

方法1:拆分令牌后检查子集匹配

把原字符串和目标匹配串都拆成独立的单词(令牌),然后检查目标串的所有令牌是否都存在于原字符串的令牌集合中——不管单词顺序如何。

示例代码:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'company_name': ['book company services ltd', 'tech solutions inc', 'book ltd company']
})

# 目标匹配串
target = "book company ltd"
target_tokens = set(target.split())

# 执行匹配
df['is_match'] = df['company_name'].apply(
    lambda x: target_tokens.issubset(set(x.split()))
)

print(df)

这个方法的好处是简单直接,不需要依赖额外库,适合纯基于单词存在性的匹配。

方法2:正则表达式实现任意顺序的令牌匹配

用正则的正向预查语法,构造一个能匹配所有目标令牌(顺序无关)的正则表达式,这样str.contains()就能支持令牌集合匹配了。

示例代码:

import pandas as pd

df = pd.DataFrame({
    'company_name': ['book company services ltd', 'tech solutions inc', 'book ltd company']
})

# 构造正则模式:每个令牌都用正向预查
target = "book company ltd"
pattern = ''.join([f'(?=.*{token})' for token in target.split()])

# 执行匹配(可以加case=False忽略大小写)
df['is_match'] = df['company_name'].str.contains(pattern, case=False)

print(df)

如果你的公司名称里有标点符号(比如逗号、句号),可以先预处理清理:

df['cleaned_name'] = df['company_name'].str.lower().str.replace(r'[^\w\s]', '')

方法3:进阶模糊匹配(适合有拼写/语序差异的场景)

如果公司名称存在拼写变体、缩写或者语序混乱的情况,推荐用fuzzywuzzy库的token_set_ratio方法——它本质就是基于令牌集合的模糊匹配,会自动忽略冗余词和语序差异。

示例代码:

import pandas as pd
from fuzzywuzzy import fuzz

df = pd.DataFrame({
    'company_name': ['book company services ltd', 'book co ltd', 'tech solutions inc']
})

target = "book company ltd"

# 计算令牌集合相似度(分数越高越匹配)
df['match_score'] = df['company_name'].apply(
    lambda x: fuzz.token_set_ratio(x, target)
)

# 设置阈值筛选匹配结果(比如分数≥80就算匹配)
df['is_match'] = df['match_score'] >= 80

print(df)

注意:需要先安装库pip install fuzzywuzzy python-Levenshtein(python-Levenshtein是可选的,用来加速匹配)。

额外提示

  • 统一大小写:匹配前把所有字符串转成小写(str.lower()),避免大小写导致的匹配失败。
  • 清理冗余词:比如常见的公司后缀(ltd、inc、co等)可以统一处理,减少干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:38:50