概要
使用质量过滤和去重过滤进行数据处理。
技术细节
- 质量过滤
使用Fasttext算法进行质量过滤,此算法会先将输入的文本转换为标签,然后判断此标签是否符合配置文件的格式,不符合的会将其删除。
然后进行清洗操作,用正则化表达式对文中的特殊字符进行删除。
import re
from fasttext import load_model
# 加载预训练好的 FastText 语言分类器
language_classifier = load_model("language_classifier.bin")
def filter_and_clean_data(input_texts, language_config):
filtered_texts = []
for text in input_texts:
# 生成语言标签
language_label = language_classifier.predict(text)[0][0]
# 判断语言是否符合配置文件中的语言类别
if language_label not in language_config:
continue
# 清洗文本
cleaned_text = clean_text(text)
# 添加到过滤后的文本列表
filtered_texts.append(cleaned_text)
return filtered_texts
def clean_text(text):
# 使用正则表达式去除特殊字符和数字
cleaned_text = re.sub('[^a-zA-Z\s]', '', text)
# 去除多余的空格
cleaned_text = re.sub('\s+', ' ', cleaned_text).strip()
return cleaned_text
# 示例输入文本列表
input_texts = ["This is a sample English sentence.", "这是一个中文句子。", "Ceci est une phrase française."]
# 配置文件中的语言类别
language_config = {"__label__en", "__label__zh", "__label__fr"}
# 过滤和清洗数据
filtered_texts = filter_and_clean_data(input_texts, language_config)
print(filtered_texts)
- 去重过滤
使用MinhashLSH算法进行去重过滤,此方法先将文本分割成句子,计算每一个句子的n元组,然后计算相邻句子的n元组Jaccard相似度,设定阈值进行过滤。
import re
from gensim.models import Word2Vec
from gensim.similarities import SoftCosineSimilarity, SparseTermSimilarityMatrix
from gensim.similarities import MinHashLSH
def sentence_level_deduplication(text, threshold=0.8):
# 将文本分割成句子
sentences = re.split('[。!?]', text)
# 计算n元组
ngrams = [sentence.split() for sentence in sentences]
# 计算Jaccard相似度
similarity_matrix = [[jaccard_similarity(ngrams[i], ngrams[j]) for j in range(len(sentences))] for i in range(len(sentences))]
# 根据阈值过滤相似度高于阈值的句子
filtered_sentences = []
for i in range(len(sentences)):
if not any(similarity_matrix[i][j] > threshold for j in range(i)):
filtered_sentences.append(sentences[i])
return ' '.join(filtered_sentences)
def jaccard_similarity(set1, set2):
intersection = len(set(set1).intersection(set(set2)))
union = len(set(set1).union(set(set2)))
return intersection / union
# 示例文本
text = "今天天气真好,我们去公园玩吧。天气不错,适合户外运动。"
# 句子级去重
filtered_text = sentence_level_deduplication(text)
print(filtered_text)