Prompt recovery —— 数据清洗与过滤

概要

使用质量过滤和去重过滤进行数据处理。

技术细节

  • 质量过滤

使用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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值