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

如何从包含复杂重复变体的列表中提取各分类最短有效名称

原始数据分类提取最短有效名称解决方案

实现思路

  • 先过滤原始数据中的nan空值,仅保留有效字符串
  • 用正则将所有有效字符串按非字母字符拆分,提取出所有独立的单词片段,统计每个片段的出现频次
  • 按长度从小到大遍历所有单词片段,排除被更短有效词包含的重复片段,同时过滤仅出现1次的杂音片段,最终得到各分类的最短有效名称

完整代码

import re
import math
from collections import defaultdict

# 示例数据
data = [
    'apple',
    'apple;apple(big)',
    'apple(apple),apple',
    'banana(banana)',
    'banana',
    math.nan, 
    'cookie;cookie(cookie)',
    'cookie(choco)'
]

# 1. 过滤nan空值
valid_strs = [s for s in data if not (isinstance(s, float) and math.isnan(s))]

# 2. 拆分单词片段并统计频次
word_count = defaultdict(int)
for s in valid_strs:
    # 按所有非字母字符拆分,提取纯字母片段
    words = re.split(r'[^a-zA-Z]+', s)
    # 过滤拆分产生的空串
    words = [w for w in words if w]
    for w in words:
        word_count[w] += 1

# 3. 筛选最短有效名称
# 按单词长度从小到大排序
sorted_words = sorted(word_count.keys(), key=lambda x: len(x))
result = []
for word in sorted_words:
    # 检查当前词是否未被已选的更短有效词包含
    is_valid = True
    for existed in result:
        if existed in word:
            is_valid = False
            break
    # 过滤仅出现1次的杂音片段,阈值可根据实际数据调整
    if is_valid and word_count[word] >= 2:
        result.append(word)

print(result) # 输出 ['apple', 'banana', 'cookie']

调整说明

如果你的有效名称包含数字、下划线等特殊字符,修改正则拆分规则即可,比如允许数字就把拆分语句改为:
words = re.split(r'[^a-zA-Z0-9]+', s)
如果单分类的变体数量较多,可以调高频次阈值,比如把word_count[word] >= 2改为>=3即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:18:02