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

如何从波英语码转换语料库中删除连续英文长文本块

实现方案

前置准备

  • 先把corpus B的英文词汇统一处理为小写集合,大幅提升匹配效率,同时规避大小写匹配偏差
  • 短信分词前先去除标点、特殊符号,避免符号附着在词汇上导致匹配失败

核心逻辑说明

对每条短信采用长度为5的滑动窗口遍历分词结果,只要存在任意一个窗口内的5个词均属于corpus B收录范围,即判定为大段英文引用内容,直接剔除该条短信,刚好匹配你要求的「5个连续英文词=4个相邻corpus B收录词汇」的判定规则。

代码实现

1. 基础Python版本(直接处理文本语料)

import re
from string import punctuation

# 第一步:加载corpus B为小写集合
with open("corpusB.txt", "r", encoding="utf-8") as f:
    # 假设corpusB每行一个词,可按需调整读取逻辑
    en_vocab = set(word.strip().lower() for word in f if word.strip())

# 第二步:加载corpus A所有短信
with open("corpusA.txt", "r", encoding="utf-8") as f:
    sms_list = [line.strip() for line in f if line.strip()]

# 第三步:过滤符合要求的短信
filtered_sms = []
for sms in sms_list:
    # 分词+去标点+转小写
    words = [word.strip(punctuation).lower() for word in re.split(r"\s+", sms) if word.strip(punctuation)]
    # 不足5个词的直接保留
    if len(words) < 5:
        filtered_sms.append(sms)
        continue
    # 滑动窗口检查
    has_long_en = False
    for i in range(len(words)-4):
        window = words[i:i+5]
        if all(w in en_vocab for w in window):
            has_long_en = True
            break
    if not has_long_en:
        filtered_sms.append(sms)

# 导出过滤后的corpus A
with open("filtered_corpusA.txt", "w", encoding="utf-8") as f:
    for sms in filtered_sms:
        f.write(sms + "\n")

2. Pandas版本(直接处理CSV格式语料)

如果你的corpus A和corpus B都是CSV文件,用这个版本处理更方便:

import pandas as pd
import re
from string import punctuation

# 加载corpus B,假设csv列名为en_word,可按需替换为实际列名
df_b = pd.read_csv("corpusB.csv")
en_vocab = set(df_b["en_word"].str.strip().str.lower())

# 加载corpus A,假设短信内容列名为sms_content,可按需替换为实际列名
df_a = pd.read_csv("corpusA.csv")

def is_valid_sms(sms):
    words = [word.strip(punctuation).lower() for word in re.split(r"\s+", str(sms)) if word.strip(punctuation)]
    if len(words) < 5:
        return True
    for i in range(len(words)-4):
        if all(w in en_vocab for w in words[i:i+5]):
            return False
    return True

# 过滤数据
df_a_filtered = df_a[df_a["sms_content"].apply(is_valid_sms)]

# 导出过滤后的csv
df_a_filtered.to_csv("filtered_corpusA.csv", index=False, encoding="utf-8")

可调优化点

  • 如果你的短信里有大量特殊符号,可提前扩展punctuation的符号列表,或者用正则直接匹配提取所有纯字母序列作为分词结果
  • 如果需要保留短信里的短英文引用,可调整滑动窗口大小(比如改为6个连续词才剔除)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 11:54:07