开发数据解析器需求:移除键值对相似文本并简化输出
针对你要开发数据解析器来简化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
相关产品推荐
相关产品推荐

