如何从波英语码转换语料库中删除连续英文长文本块
实现方案
前置准备
- 先把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
相关产品推荐
相关产品推荐

