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

如何合并地缘政治描述文本并去重,同时保留内部顺序?

问题分析

你当前的代码存在三个核心问题:

  • 用set()去重会彻底打乱文本原有顺序,因为集合是无序结构
  • readlines()会保留每行末尾的换行符,后续"\n".join()会导致重复换行,出现多余空行/空格
  • 原代码按单一行去重,但你需要的是按完整的地点描述块去重,不是单条行记录
改进方案

以下是适配需求的优化代码,实现按地点块去重、保留原始顺序,并清理多余空格:

import os
import glob

def read_location_blocks(file_path):
    """读取文件,按地点块分割并清理冗余格式"""
    blocks = []
    current_block = []
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            stripped_line = line.strip()
            # 以空行作为地点块的分隔符(可根据实际格式调整判断逻辑)
            if not stripped_line:
                if current_block:
                    block_str = "\n".join(current_block).strip()
                    blocks.append(block_str)
                    current_block = []
            else:
                current_block.append(stripped_line)
        # 处理文件末尾未闭合的最后一个块
        if current_block:
            block_str = "\n".join(current_block).strip()
            blocks.append(block_str)
    return blocks

# 收集并去重所有地点块
all_blocks = []
seen_blocks = set()

for file in glob.glob('*.txt'):
    blocks = read_location_blocks(file)
    for block in blocks:
        if block not in seen_blocks:
            seen_blocks.add(block)
            all_blocks.append(block)

# 写入合并后的文件,块之间用空行分隔
with open('combinedfile.txt', 'w', encoding='utf-8') as fo:
    fo.write("\n\n".join(all_blocks))
代码说明
  • read_location_blocks函数:负责将单个文件按地点块拆分,同时清理每行多余空格,把每个块整理成独立字符串
  • 去重逻辑:用seen_blocks集合记录已出现的块,all_blocks列表按顺序保存首次出现的块,既实现去重又保留原始顺序
  • 写入规则:用"\n\n".join()让不同地点块之间用空行分隔,符合阅读习惯
适配提示

如果你的地点块不是以空行分隔,而是以特定规则开头(比如行首是地点名称),可修改read_location_blocks里的分割判断逻辑,比如添加对地点名称格式的校验来识别块的起始。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:10:33