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

如何清理DataFrame中德语文本的重复段落与残缺重复句?

德语文本清理方案:解决残缺重复句问题

问题根源

残留的残缺重复句本质是原始文本存在空格缺失(如derFusion应为der Fusion)、换行断句、标点不规范等问题,导致分句后的句子与完整句存在细微差异,普通完全匹配去重无法识别。

分步解决方案

1. 文本预处理:修复格式缺陷

先统一处理文本中的格式问题,消除残缺句的产生基础:

import re
import pandas as pd
from nltk.tokenize import sent_tokenize

def preprocess_german_text(text):
    # 替换HTML引号为标准引号
    text = text.replace('"', '"')
    # 合并非句末换行(避免换行导致的断句)
    text = re.sub(r'(?<!\.)\n', ' ', text)
    # 在小写词后的大写字母前加空格,修复单词连写(如derFusion → der Fusion)
    text = re.sub(r'(?<=[a-zäöüß])([A-ZÄÖÜ])', r' \1', text)
    # 在小写词后的标点前加空格,修复连写(如SüddeutschenZeitung → Süddeutschen Zeitung)
    text = re.sub(r'(?<=[a-zäöüß])([.,:;!?])', r' \1', text)
    # 移除无意义的结尾标记
    text = re.sub(r'Jetzt teilen auf:$', '', text).strip()
    return text

2. 精准分句

预处理后再用nltk德语分句工具,大幅减少残缺句产生:

# 假设你的DataFrame名为df,文本列名为text_column
df['cleaned_text'] = df['text_column'].apply(preprocess_german_text)
# 分句处理生成句子列表
df['sentences'] = df['cleaned_text'].apply(lambda x: sent_tokenize(x, language='german'))

3. 智能去重:覆盖格式差异的重复句

仅完全匹配去重无法处理格式差异,需先对句子规范化,再基于核心语义去重:

def normalize_sentence(sent):
    # 转小写、去多余空格、去句末标点,保留核心语义
    sent = sent.lower().strip()
    sent = re.sub(r'\s+', ' ', sent)
    sent = re.sub(r'[.,:;!?]$', '', sent)
    return sent

def deduplicate_sentences(sent_list):
    seen = set()
    unique_sents = []
    for s in sent_list:
        norm_s = normalize_sentence(s)
        if norm_s not in seen:
            seen.add(norm_s)
            unique_sents.append(s)
    return unique_sents

# 对每行的句子列表去重
df['unique_sentences'] = df['sentences'].apply(deduplicate_sentences)

4. 最终过滤:移除无效残缺句

若仍有少量残缺句,通过长度、语义完整性过滤:

def filter_invalid_sents(sent_list):
    valid_sents = []
    for s in sent_list:
        # 过滤过短句子(少于5个单词)
        if len(s.split()) < 5:
            continue
        # 过滤不含动词的句子(匹配德语常见动词后缀)
        if not re.search(r'(e|en|n|t|st|t)$', s.strip().split()[-1]):
            continue
        valid_sents.append(s)
    return valid_sents

df['final_cleaned_sents'] = df['unique_sentences'].apply(filter_invalid_sents)

效果验证

针对你提供的示例文本,预处理后会修复derFusion→der Fusion、Monsantowill→Monsanto will等问题,分句后完整句与重复句完全一致,结合规范化去重可彻底移除重复内容,无残缺句残留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:07:31