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

使用正则表达式提取杂乱德语文本词汇的代码问题咨询

问题核心原因
  • 编码使用错误:你用unicode_escape编码读取普通德语文本会导致德文字符(变音äöüß、特殊重音字符等)被错误转义,文本直接乱码被切割,这就是你出现gepr这类残词、总词汇量远低于预期的核心原因。
  • 未提前清理混杂标记:原始文本包含大量维基格式标记、HTML转义字符、引用标签、注释块、外链内容,这些非正文内容没被清理就直接正则匹配,会产生大量无意义字符(比如com来自域名、X来自电影名后缀)。
  • 正则规则不完善:未限制匹配的最小长度,也没有做非词汇内容过滤,导致大量单字母垃圾内容被提取,也容易把带特殊符号的词切错。
现有代码调整方案

以下是可直接运行的修改后代码,可解决当前的全部已知问题:

import re
import html

# 提前定义文本清理规则,过滤所有非正文标记
def clean_wiki_text(raw_text):
    # 解析HTML转义字符
    text = html.unescape(raw_text)
    # 删除注释块
    text = re.sub(r'<!--.*?-->', '', text, flags=re.DOTALL)
    # 删除引用标签及内部内容
    text = re.sub(r'<ref.*?>.*?</ref>', '', text, flags=re.DOTALL)
    # 删除{{模板}}内容
    text = re.sub(r'{{.*?}}', '', text, flags=re.DOTALL)
    # 处理维基内部链接:[[xxx|yyy]]保留显示文字yyy,[[xxx]]保留xxx
    text = re.sub(r'\[\[(?:[^|]*?\|)?([^\]]*?)\]\]', r'\1', text)
    # 删除粗体、斜体标记''、'''
    text = re.sub(r"'+", '', text)
    # 删除标题标记==、===
    text = re.sub(r'=+', '', text)
    # 删除所有外部链接
    text = re.sub(r'https?://\S+', '', text)
    # 删除列表标记、数字、剩余标点符号
    text = re.sub(r'[*0-9,.!?;:()\[\]{}|/\-"#%&=+<>]', ' ', text)
    return text

with open('C:\\path\\text.txt', encoding='utf-8', errors='replace') as f, open('word_list.txt', 'w', encoding='utf-8') as f1:
    raw_content = f.read()
    cleaned_content = clean_wiki_text(raw_content)
    # 仅匹配长度≥2的德语/英语词汇,自动过滤单字母垃圾内容
    words = set(re.findall(r'[a-zA-ZäöüÄÖÜß]{2,}', cleaned_content))
    f1.write('\n'.join(sorted(words)))

核心调整点:

  • 把文件读取编码更换为utf-8,增加errors='replace'避免个别异常字符导致读取失败
  • 增加了完整的标记清理逻辑,提前过滤所有非正文的格式内容
  • 正则匹配增加长度限制{2,},自动过滤无意义的单字符结果
  • 把追加写入改为覆盖写入,避免多次运行产生重复内容
更优的过滤方案

如果需要更高的分词准确率,避免正则匹配的漏判错判,可以使用专业NLP工具处理:

  • 使用spaCy的德语预训练模型,可实现精准分词、词性标注,自动过滤标点、非词汇内容
  • 如果统计频次时需要合并同一词汇的不同形态(比如德语的名词变格、动词变位),可以增加词形还原步骤,大幅降低统计结果的冗余度

内容的提问来源于stack exchange,提问作者n.mathfreak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:42:00