如何寻找与列表中所有字符串部分匹配度最高的目标字符串
解决方案
针对你的需求,我们可以通过统计高频token+保留原序列顺序的方式生成目标字符串,以下是具体实现步骤和Python代码:
步骤说明
- 拆分所有字符串为单个token(按空格分割),统计每个token在列表中的出现次数;
- 筛选出在多数字符串中出现的token(比如3个字符串中至少出现2次);
- 从每个原字符串中提取这些高频token,保留它们在原字符串中的顺序,生成候选序列;
- 选择长度最长、出现次数最多的候选序列作为最终结果。
代码实现
from collections import Counter # 输入列表 A = ['assembly eye tow top', 'tow eye bolts', 'tow eye bolts need me'] # 统计所有token的出现频率 all_tokens = [] for string in A: all_tokens.extend(string.split()) token_freq = Counter(all_tokens) # 筛选出至少在2个字符串中出现的token high_freq_tokens = {token for token, count in token_freq.items() if count >= 2} # 生成每个字符串对应的高频token序列(保留原顺序) candidate_seqs = [] for string in A: filtered_tokens = [t for t in string.split() if t in high_freq_tokens] candidate_seqs.append(' '.join(filtered_tokens)) # 选择最长且出现次数最多的序列 seq_counter = Counter(candidate_seqs) # 按序列长度降序、出现次数降序排序 sorted_seqs = sorted(seq_counter.items(), key=lambda x: (-len(x[0]), x[1])) # 最终结果 strA = sorted_seqs[0][0] print(strA) # 输出: tow eye bolts
代码解释
- 统计token频率后,
tow、eye(3次)和bolts(2次)被筛选为高频token,其余仅出现1次的token被排除; - 从原字符串提取高频token后,得到三个候选序列:
eye tow、tow eye bolts、tow eye bolts; - 最后选择长度最长的
tow eye bolts作为结果,完全符合你的预期。
内容的提问来源于stack exchange,提问作者Parsh
相关产品推荐
相关产品推荐

