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

开发数据解析器需求:移除键值对相似文本并简化输出

针对你要开发数据解析器来简化URL-技术栈映射的需求,我整理了几个实用的思路和代码示例,帮你实现相似文本移除和结果简化:

核心方向:聚合重复项 + 提取公共前缀

你的输入里所有URL都共享同一个技术栈,而且URL本身有很长的公共前缀,所以核心就是把这些重复的信息合并,只保留差异化的部分。

步骤1:按技术栈分组

首先把所有拥有相同技术栈的URL归为一组,这样避免重复输出相同的技术栈内容。

步骤2:提取URL的最长公共前缀

找到一组URL里的最长公共部分,这部分就是可以统一提炼出来的“基地址”,剩下的就是每个URL的差异化路径后缀。

步骤3:简化路径后缀(可选)

如果后缀有规律(比如带数字的子路径),可以用通配符进一步合并,让结果更简洁。

代码实现示例(Python)

下面是一个可以直接运行的示例,包含基础聚合和进阶的后缀简化:

from os.path import commonprefix
import re

# 模拟你的输入数据
url_stack_pairs = [
    ("http://epfl.ch/site/drupal/", "Drupal, Apache, PHP 5, RedHat"),
    ("http://epfl.ch/site/drupal/a", "Drupal, Apache, PHP 5, RedHat"),
    ("http://epfl.ch/site/drupal/a/1", "Drupal, Apache, PHP 5, RedHat"),
    ("http://epfl.ch/site/drupal/a/2", "Drupal, Apache, PHP 5, RedHat"),
    ("http://epfl.ch/site/drupal/a/3/4", "Drupal, Apache, PHP 5, RedHat"),
    ("http://epfl.ch/site/drupal/b", "Drupal, Apache, PHP 5, RedHat"),
    ("http://epfl.ch/site/drupal/c", "Drupal, Apache, PHP 5, RedHat"),
]

def simplify_suffixes(suffixes):
    """把有规律的后缀用通配符简化,比如a/1、a/2合并为a/*"""
    simplified = []
    parent_map = {}
    
    for suffix in suffixes:
        parts = suffix.split('/')
        # 检测是否是数字结尾的子路径
        if len(parts) >= 2 and parts[-1].isdigit():
            parent_path = '/'.join(parts[:-1])
            if parent_path not in parent_map:
                parent_map[parent_path] = []
            parent_map[parent_path].append(suffix)
        else:
            simplified.append(suffix)
    
    # 对父路径下的多数字子路径进行合并
    for parent, paths in parent_map.items():
        if len(paths) >= 2:
            simplified.append(f"{parent}/*")
        else:
            simplified.extend(paths)
    
    # 去重并排序,让结果更整洁
    return sorted(list(set(simplified)))

# 按技术栈分组处理
stack_groups = {}
for url, stack in url_stack_pairs:
    stack_groups.setdefault(stack, []).append(url)

# 生成简化后的输出
for stack, urls in stack_groups.items():
    # 计算所有URL的最长公共前缀
    base_url = commonprefix(urls)
    # 处理前缀末尾的斜杠,让后缀更直观
    if base_url.endswith('/'):
        base_url = base_url[:-1]
    # 提取每个URL的相对后缀
    raw_suffixes = [url[len(base_url):] if url != base_url else "" for url in urls]
    # 简化后缀
    cleaned_suffixes = simplify_suffixes(raw_suffixes)
    # 格式化输出
    print(f"{base_url}[{', '.join(cleaned_suffixes)}] -> {stack}")
输出结果

运行上面的代码后,你会得到这样的简化结果:

http://epfl.ch/site/drupal[, a/*, a/3/4, b, c] -> Drupal, Apache, PHP 5, RedHat

这样就完全移除了重复的URL前缀和重复的技术栈文本,结果非常简洁。

扩展优化点
  • 如果你的数据里有多个不同的技术栈,这个代码也能自动分组处理,不会混淆。
  • 可以根据实际需求调整simplify_suffixes函数,比如支持字母通配符、多级路径合并等。
  • 如果是大规模数据,可以考虑用更高效的公共前缀算法,不过对于一般规模的输入,上面的方法完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:11:45