【AIGC】大模型面试高频考点-数据清洗篇
【AIGC】大模型面试高频考点-数据清洗篇
- (一)常用文本清洗方法
- 1.去除无用的符号
- 2.去除表情符号
- 3.文本只保留汉字
- 4.中文繁体、简体转换
- 5.删除 HTML 标签和特殊字符
- 6.标记化
- 7.小写
- 8.停用词删除
- 9.词干提取和词形还原
- 10.处理缺失数据
- 11.删除重复文本
- 12.处理嘈杂的文本
- 13.处理编码问题
- 14.空白删除
- 15.处理数字数据
- 16.处理文本语言识别
- 17.处理不平衡数据
- 18.处理文本长度变化
- 19.处理偏见和公平
- 20.处理大文本语料库
- 21.处理多语言文本数据
- 22.使用特定领域的术语处理文本数据
- 23.处理长文档的文本数据
- 24.处理带有时间参考的文本数据
- (二)用于文本清洗的工具和库
- (1)用于文本清洗的 Python 库
- 1.NLTK(自然语言工具包)
- 2.spaCy
- (2)用于文本清洗的正则化表达式(Regex)
- (3)OpenRefine用于文本清洗
- (4)文本清洗Beautiful Soup
- (5)用于文本清洗的 DataWrangler
- (6)用于文本清洗的 OpenNLP
- (三)有效文本清洗的最佳实践
- (四)文本清洗的挑战和陷阱
- (五)结论
文本清洗是什么?
文本清洗,也称为文本预处理或文本数据清理,正在准备原始文本数据并将其转换为更干净、更结构化的格式,以用于分析、建模或其他自然语言处理(NLP) 任务。它涉及各种技术和程序,从文本文档中去除噪声、不一致和不相关信息,使数据更适合文本分析、情感分析、文本分类和机器学习等下游任务。
文本清洗的主要目标是什么?
- 数据质量改进:文本数据通常包含错误、不一致和不相关的内容。清理有助于确保数据准确、可靠和一致。
- 降噪:文本数据中的噪声可能包括特殊字符、HTML 标签、标点符号和其他对分析或建模目标无益的元素。清洁可以消除或减少这种噪音。
- 标准化:文本清洗通常包括标准化文本,例如将所有文本转换为小写,以确保一致性并防止与案例相关的问题影响分析或建模。
- 标记化:标记化是文本清洗的关键部分。它涉及将文本分解为单独的单词或标记,从而使分析或处理文本数据变得更加容易。
- 停用词删除:停用词是诸如“the”、“and”或“in”之类的常见单词,在文本清洗过程中经常被删除,因为它们对许多任务来说没有重要意义。
- 词干提取和词形还原:这些技术将单词简化为其词根形式,有助于对相似的单词进行分组。词干提取和词形还原对于文本分析任务特别有用,其中单词变体应被视为同一个单词。
- 处理缺失数据:文本数据可能包含缺失值或不完整的句子。文本清洗可能涉及填充缺失数据或解决不完整文本的策略。
- 重复数据删除:删除重复或接近重复的文本条目对于确保数据完整性并防止分析或建模中的偏差至关重要。
- 处理嘈杂的文本:嘈杂的文本数据可能包括拼写错误、缩写或非标准语言用法。文本清洗策略有助于减轻此类噪音的影响。
文本清洗是任何文本分析或 NLP 项目中的关键步骤。清洗后的文本数据的质量直接影响后续分析或建模任务的准确性和有效性。因此,理解和应用适当的文本清洗技术对于从文本数据中获取有意义的见解至关重要。
(一)常用文本清洗方法
1.去除无用的符号
使用正则匹配re去除文本中的无用符号:
import redef clean_txt_1(sentence):remove_chars = '[·’!"\#$%&\'()#!()*+,-./:;<=>?\@,:?¥★、….>【】[]《》?“”‘’\[\\]^_`{|}~]+'string = re.sub(remove_chars, "", sentence)return stringif __name__ == '__main__':print('********************测试clean_text_1****************************')test_txt = '#【郭美美申请低保,居然获准通过!】郭美美对记者说,她其实就是一个失业人员,并不是大家想象的那样。她还说:她已经向政府申请了低保,目前已经获批。'test_txt_clean = clean_txt_1(test_txt)print('原文本:', test_txt)print('处理后文本:', test_txt_clean)
原文本: #【郭美美申请低保,居然获准通过!】郭美美对记者说,她其实就是一个失业人员,并不是大家想象的那样。她还说:她已经向政府申请了低保,目前已经获批。处理后文本: 郭美美申请低保居然获准通过郭美美对记者说她其实就是一个失业人员并不是大家想象的那样。她还说她已经向政府申请了低保目前已经获批。
还有一种方法是使用replace()这个方法也可以去掉所有不需要的符号或者把文本中的某些字符串替换:
import redef clean_txt_2(txt): # 定义函数# 删除所有空格result = txt.replace(' ', '') # 去掉文本中的空格return resultif __name__ == '__main__':print('********************测试clean_text_2****************************')contents = ' 【郭美 美申请低保,居然获准 通过! 】 !'print('原文本:' + contents)result = clean_txt_2(contents)print('处理后文本:', result)
原文本:【郭美 美申请低保,居然获准 通过! 】 !
处理后文本:【郭美美申请低保,居然获准通过!】!
import redef clean_txt_3(txt):# 替换指定字符串,把省略号转为句号result = txt.replace('...', '。') # 去掉文本中的空格return resultif __name__ == '__main__':print('********************测试clean_text_3****************************')contents = '郭美美申请低保,居然获准通过...'print('原文本:' + contents)result = clean_txt_3(contents)print('处理后文本:', result)
原文本:郭美美申请低保,居然获准通过…
处理后文本:郭美美申请低保,居然获准通过。
2.去除表情符号
我们的文本数据中经常会带有很多表情,这些表情不仅仅会降低我们对文本处理的质量,它们有时是无法utf-8编码的,可以使用正则匹配删除这些表情符号。
import redef clean(desstr, restr=''):# 过滤表情try:co = re.compile(u'['u'\U0001F300-\U0001F64F' u'\U0001F680-\U0001F6FF'u'\u2600-\u2B55]+')except re.error:co = re.compile(u'('u'\ud83c[\udf00-\udfff]|'u'\ud83d[\udc00-\ude4f\ude80-\udeff]|'u'[\u2600-\u2B55])+')return co.sub(restr, desstr)if __name__ == '__main__':text = '郭美美申请低保,居然获准通过!🙌🏻💗🚩'result = clean(text)print('原文本:', text)print('处理后文本:', result)
原文本:郭美美申请低保,居然获准通过!🙌🏻💗🚩
处理后文本:郭美美申请低保,居然获准通过!
代码中的正则编码解释如下:
<U+1F300> - <U+1F5FF> # 符号和象形字
<U+1F600> - <U+1F64F> # 表情符号
<U+1F680> - <U+1F6FF> # 交通符号和地图符号
<U+2600> - <U+2B55> # 其它符号
3.文本只保留汉字
我们在处理文本时通常只针对文字,而符号、数字等是没有意义的,所以想只留下汉字时:
import redef is_chinese(uchar):if uchar >= u'\u4e00' and uchar <= u'\u9fa5': # 判断一个uchar是否是汉字return Trueelse:return Falsedef allcontents(contents):content = ''for i in contents:if is_chinese(i):content = content + ireturn contentif __name__ == '__main__':content = '#【郭美美申请低保,居然获准通过!】郭美美对记者说,她其实就是一个失业人员,并不是大家想象的那样。'result = allcontents(content)print('原文本:', content)print('处理后文本:', result)
原文本:#【郭美美申请低保,居然获准通过!】郭美美对记者说,她其实就是一个失业人员,并不是大家想象的那样。
处理后文本:郭美美申请低保居然获准通过郭美美对记者说她其实就是一个失业人员并不是大家想象的那样
4.中文繁体、简体转换
如果文本中既有繁体也有简体,那处理起来有些不方便,需要进行繁体中文与简体中文的转换。首先安装OpenccPy,OpenccPy是一款 python 中文繁简体转换工具:
pip install opencc
pip install opencc-python-reimplemented
from opencc import OpenCCdef Simplified(sentence):new_sentence = OpenCC('t2s').convert(sentence) # 繁体转为简体return new_sentencedef Traditional(sentence):new_sentence = OpenCC('s2t').convert(sentence) # 简体转为繁体return new_sentenceif __name__ == '__main__':sentence = '這裡是繁體'print('原文本', sentence)sentence_s = Simplified(sentence)sentence_t = Traditional(sentence)print('处理后文本(简体):', sentence_s)print('处理后文本(繁体):', sentence_t)
原文本 這裡是繁體
处理后文本(简体): 这里是繁体
处理后文本(繁体): 這裡是繁體
5.删除 HTML 标签和特殊字符
HTML 标签和特殊字符在基于 Web 的文本数据中很常见。删除这些元素对于确保文本的可读性和可分析性至关重要。正则表达式可用于识别和消除 HTML 标签,而标点符号、符号或表情符号等特殊字符可被删除或替换为空格。
import redef remove_html_tags(text):"""Remove html tags from a string"""clean_text = re.sub(r'<.*?>', '', text)return clean_textdef remove_special_characters(text):"""Remove special characters from a string"""clean_text = re.sub(r'[^a-zA-Z0-9\s]', '', text)return clean_textif __name__ == '__main__':text = '<html><body><p>This is a test paragraph.</p></body></html>'print(f'原文本:\n{text}')print(f'删除HTML标签后:\n{remove_html_tags(text)}')print(f'删除特殊字符后:\n{remove_special_characters(text)}')
原文本:
<html><body><p>This is a test paragraph.</p></body></html>
删除HTML标签后:
This is a test paragraph.
删除特殊字符后:
htmlbodypThis is a test paragraphpbodyhtml
6.标记化
标记化是将文本分割成单个单词或标记的过程。这是大多数文本分析任务的基本步骤。标记化将文本分解为其组成部分,并促进单词的计数和分析。
7.小写
将所有文本转换为小写是一种常见做法,以确保一致性并避免将不同大小写的单词视为不同的实体。此步骤有助于标准化文本数据。
# 用正则化将全部文本转小写
import redef to_lower_case(text):return re.sub(r'[A-Z]', lambda x: x.group(0).lower(), text)if __name__ == '__main__':text = 'Hello, World!'print(f'原文本: {text}')print(f'处理后文本: {to_lower_case(text)}')
原文本: Hello, World!
处理后文本: hello, world!
8.停用词删除
停用词是诸如“the”、“and”或“in”之类的常见词,在许多 NLP 任务中几乎没有携带有意义的信息。删除停用词可以减少噪音并提高文本分析的效率。
from nltk.tokenize import word_tokenize
import nltk
nltk.download('punkt')def tokenize_text(text):tokens = word_tokenize(text)return tokensif __name__ == '__main__':text = "This is a sample sentence. It contains multiple words."tokens = tokenize_text(text)print(tokens)
9.词干提取和词形还原
词干提取和词形还原是将单词还原为词根形式的技术,有助于对相似的单词进行分组。词干提取更具侵略性,可能会产生非字典单词,而词形还原则产生有效单词。
from nltk.stem import WordNetLemmatizer
from nltk.stem import PorterStemmer
import nltk
nltk.download('wordnet')def stem_text(tokens):stemmer = PorterStemmer()stemmed_text = [stemmer.stem(word) for word in tokens]return stemmed_textdef lemmatize_text(tokens):lemmatizer = WordNetLemmatizer()lemmatized_text = [lemmatizer.lemmatize(word) for word in tokens]return lemmatized_textif __name__ == '__main__':tokens = "This is a sample sentence. It contains multiple words."stemmed_text = stem_text(tokens)lemmatized_text = lemmatize_text(tokens)print("Original Text:", tokens)print("Stemmed Text:", stemmed_text)print("Lemmatized Text:", lemmatized_text)
10.处理缺失数据
文本数据可能包含缺失值或不完整的句子。使用占位符填充缺失值或优雅地处理缺失数据等策略对于完整的管道至关重要。
这些基本的文本清洗技术是更高级预处理步骤的构建块,并且是为分析、建模和其他自然语言处理任务准备文本数据的基础。选择应用哪种技术取决于文本数据的具体要求和特征以及分析或建模项目的目标。
11.删除重复文本
重复或接近重复的文本条目可能会扭曲分析和建模结果并引入偏差。识别和删除重复项对于维护数据完整性至关重要。
def remove_duplicate_text(text):"""Remove duplicate text from a string"""unique_text = list(set(text))return unique_textif __name__ == '__main__':text = "This is a sample sentence. It contains multiple words. This is a duplicate sentence."unique_text = remove_duplicate_text(text)print(f'原文本:{text}')print(f'处理后文本:{unique_text}')
原文本:This is a sample sentence. It contains multiple words. This is a duplicate sentence.
处理后文本:['i', 'a', 't', 'd', '.', 'T', 'w', 'o', 's', 'p', 'r', ' ', 'c', 'h', 'm', 'n', 'l', 'u', 'e', 'I']
12.处理嘈杂的文本
嘈杂的文本数据可能包括拼写错误、缩写、非标准语言用法和其他不规则行为。解决此类噪音对于确保文本分析的准确性至关重要。可以应用拼写检查、更正和针对特定噪声模式的自定义规则等技术。
# pip install pyspellchecker
from spellchecker import SpellCheckerdef correct_spellchecker(text):spell = SpellChecker()tokens = spell.split_words(text)corrected_tokens = [spell.correction(token) for token in tokens]return " ".join(corrected_tokens)if __name__ == '__main__':text = "This is a sampl sentence. It contains multiple words."print(f'原文本:{text}')print(f'处理后的文本:{correct_spellchecker(text)}')
原文本:This is a sampl sentence. It contains multiple words.
处理后的文本:This is a sample sentence It contains multiple words
除了拼写检查和更正之外,还有其他几种处理嘈杂文本的策略:
正则表达式模式:制作正则表达式(regex)来识别、替换或删除嘈杂文本的特定模式。例如,你可以使用正则表达式来查找和更正标准日期格式、电子邮件地址或 URL。
自定义规则:定义自定义规则或字典来解决特定于域的噪音。例如,如果你正在处理医学文本,你可能会制定法规来规范医学缩写。
异常值检测:识别并标记明显偏离预期分布的文本数据,这可能表明异常值或错误。然后可以根据需要审查和纠正异常值。
import redef clean_custom_text(text):"用[email]代替email地址"clean_text = re.sub(r'\S+@\S+', '[email]', text)return clean_textif __name__ == '__main__':text = 'This is a sample text with an email address: example@example.com'result = clean_custom_text(text)print(f'原文本:{text}')print(f'处理后的文本:{result}')
原文本:This is a sample text with an email address: example@example.com
处理后的文本:This is a sample text with an email address: [email]
13.处理编码问题
编码问题可能会导致文本处理过程中出现不可读的字符或错误。确保文本正确编码(例如,UTF-8)对于防止与字符编码相关的问题至关重要。
def fix_encoding(text):try:decoded_text = text.encode('utf-8').decode('utf-8')except:decoded_text = "Encoding Error"return decoded_text
14.空白删除
额外的空白(包括前导空格和尾随空格)可能会影响文本分析,删除多余的空格有助于保持文本数据的一致性
def remove_blank_lines(text):"""Remove blank lines from a string"""clean_text = '\n'.join([line for line in text.split('\n') if line.strip()])return clean_textdef remove_whitespace(text):"""Remove whitespace from a string"""clean_text = ' '.join(text.split())return clean_textif __name__ == '__main__':text = """This is a sample text with multipleIt also has some blank lines at the end."""print(f'原文本:\n{text}')print(f'删除空白行:\n{remove_blank_lines(text)}')print(f'删除空白格:\n{remove_whitespace(text)}')
原文本:This is a sample text with multipleIt also has some blank lines at the end.删除空白行:This is a sample text with multipleIt also has some blank lines at the end.
删除空白格:
This is a sample text with multiple It also has some blank lines at the end.
15.处理数字数据
根据你的分析目标,你可能需要处理文本数据中的数字。选项包括将数字转换为单词(例如,“5”到“five”)或用占位符替换数字以专注于文本内容。
这些附加技术扩展了你的文本清洗工具箱,使你能够解决现实世界文本数据中可能出现的更广泛的挑战。有效的文本清洗需要结合使用这些技术,并仔细考虑数据的特征以及文本分析或 NLP 项目的目标。定期测试和验证你的清洁管道对于确保处理后的文本数据的质量和可靠性至关重要。
16.处理文本语言识别
在某些情况下,你的文本数据可能包含多种语言的文本。识别每个文本片段的语言对于应用适当的清理技术(例如词干提取或词形还原)至关重要,这些技术可能因语言而异。用于语言检测的库和模型,例如 Python中的langdetect库,可以自动识别每个文本的语言。
from langdetect import detectdef detect_language(text):try:language = detect(text)except:language = 'unknown'return language
17.处理不平衡数据
在文本分类任务,不平衡的数据可能是一个挑战。如果某一类别的权重明显超过其他类别,则可能会导致模型出现偏差。可能需要诸如过采样、欠采样或生成合成数据(例如,使用SMOTE等技术)等技术来平衡数据集。
from imblearn.over_sampling import SMOTEdef balance_text_data(X,y):smote = SMOTE(sampling_strategy='auto')X_resampled, y_resampled = smote.fit_resample(X,y)return X_resampled, y_resampled
这些先进的文本清洗技术解决了你在处理多样化的真实文本数据时可能遇到的更细微的挑战。应根据文本数据的具体特征和项目的目标来选择要应用的技术。有效的文本清洗、仔细的数据探索和预处理为有意义的文本分析和建模奠定了基础。根据需要定期检查和完善文本清洗管道对于保持数据质量和结果的可靠性至关重要。
18.处理文本长度变化
文本数据的长度通常会有所不同,极端的变化会影响文本分析算法的性能。根据你的分析目标,你可能需要规范文本长度。技术包括:
Padding:向较短的文本样本添加标记,使它们的长度与较长的样本相等。这通常用于文本分类等需要固定输入长度的任务。
文本摘要:通过生成简洁的摘要来减少较长文本的长度对于信息检索或摘要任务非常有用。
from tensorflow.keras.preprocessing.sequence import pad_sequencesdef pad_text_sequences(text_sequences,max_length):padded_sequences = pad_sequences(text_sequences,maxlen=max_length,padding='post',truncating='post')return padded_sequences
19.处理偏见和公平
在文本数据中,可能存在与性别、种族或其他敏感属性相关的偏见。解决这些偏见对于确保NLP应用的公平性至关重要。技术包括消除词嵌入偏见和使用重新加权损失函数来解决偏差。
def debias_word_embeddings(embedding,gender_specific_words):pass
20.处理大文本语料库
在处理大型文本语料库时,内存和处理时间变得至关重要。数据流、批处理和并行化可用于高效地清理和处理大量文本数据。
from multiprocessing import Pooldef parallel_process_text(data,cleaning_function,num_workers):with Pool(num_workers) as pool:cleaned_data = pool.map(cleaning_function, data)return cleaned_data
21.处理多语言文本数据
文本数据可以是多语言的,这增加了一层复杂性。处理多语言文本时,应用特定于语言的清理和预处理技术非常重要。spacy和NLTK等库支持多语言,可用于对多种语言的文本进行分词、词性还原和清理。
import spacydef clean_multilingual_text(text,language_code):nlp = spacy.load(language_code)doc = nlp(text)cleaned_text = ' '.join([token,lemma_ for token in doc])return cleaned_text
22.使用特定领域的术语处理文本数据
文本数据通常包含医学、法律或金融等专业领域的特定领域术语。考虑到领域知识来处理此类文本数据至关重要。创建用于处理特定领域术语的自定义词典和规则可以提高文本数据的质量。
def handle_domain_specific_terms(text,domain_dictionary):pass
23.处理长文档的文本数据
长文档(例如研究论文或法律文档)由于其长度可能会给文本分析带来挑战。文本摘要或文档分块等技术可以提取关键信息或将长文档分解为可管理的部分以进行分析。
from gensim.summarization import summarizedef summarize_long_document(text,ratio=0.2):summary = summarize(text, ratio=ratio)return summary
24.处理带有时间参考的文本数据
包含时间引用(例如日期和时间戳)的文本数据可能需要特殊处理。可以提取和标准化与时间相关的信息。将其转换为标准格式,或使用它创建时间序列数据以进行时间分析。
def extract_datas_and_times(text):pass
这些先进的文本清洗技术解决了不同文本数据场景中的特定挑战。技术的选择应由文本数据的特征和项目的目标决定。请记住,有效的文本清洗是一个迭代过程,持续评估和调整清理管道对于保持数据质量并在文本分析和 NLP 工作中取得有意义的结果至关重要。
(二)用于文本清洗的工具和库
文本清洗可能很复杂且耗时,但你不必从头开始构建所有内容。有各种工具和库可以简化文本清洗过程并使其更加高效。下面,我们将探讨一些常用于文本清洗的基本工具和库:
(1)用于文本清洗的 Python 库
1.NLTK(自然语言工具包)
NLTK是Python中用于自然语言处理的综合库。它提供了用于文本清洗、标记化、词干提取、词形还原等的各种模块。
import nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import PorterStemmernltk.download('stopwords')
nltk.download('punkt')stop_words = set(stopwords.words('english'))
tokens = word_tokenize(text)
filtered_tokens = [word for word in tokens if word not in stop_words]
stemmer = PorterStemmer()
stemmed_tokens = [stemmer.stem(word) for word in filtered_tokens]
2.spaCy
spaCy是一个强大的NLP库,提供高效的标记化、词性还原、词性标注和命名实体识别。它以其速度和精确性而闻名。
import spacytext = '中华女子学院与南京长江大桥'
nlp = spacy.load('en_core_web_sm')
doc = nlp(text)
cleaned_text = ' '.join([token,lemma_ for token in doc if not token.is_stop])
(2)用于文本清洗的正则化表达式(Regex)
正则化表达式是模式匹配和文本操作的强大工具。它们对于删除特殊字符、提取特定模式和清理文本数据非常有用。
import recleaned_text = re.sub(r'[^a-zA-Z0-9\s]','',text)
(3)OpenRefine用于文本清洗
OpenRefine是一个开源工具,用于处理混乱的数据,包括文本数据。它提供了一个用户友好的界面,用于清理、转换和协调数据。它对于清理大型数据集很方便。
(4)文本清洗Beautiful Soup
Beautiful Soup是一个用于网页抓取和解析HTML和XML文档的Python库。它从网页中提取文本内容并清理HTML标签。
from bs4 import BeautifulSoupsoup = BeautifulSoup(html_text,'html.parser')
cleaned_text = soup.get_text()
(5)用于文本清洗的 DataWrangler
DataWrangler 是斯坦福大学的一款工具,提供基于 Web 的界面,用于清理和转换杂乱的数据(包括文本)。它通过可视化方法提供交互式数据清理。
(6)用于文本清洗的 OpenNLP
Apache OpenNLP 是一个用于自然语言处理的开源库。它包括用于标记化、句子分割和词性标记的预训练模型和工具。
这些工具和库可以显着加快文本清洗过程,并提高数据预处理管道的效率和准确性。工具或库的选择取决于你的具体项目要求、对工具的熟悉程度以及你必须执行的文本清洗任务的复杂性。
(三)有效文本清洗的最佳实践
文本清洗是准备用于分析的文本数据的关键步骤,遵循最佳实践可确保清理后的数据准确、可靠且适合下游任务。以下是有效文本清洗的一些基本最佳实践:
了解你的数据:
- 数据探索:在清理之前,彻底探索你的文本数据。了解其结构、模式以及特定于你的数据集的潜在挑战。
- 领域知识:熟悉文本数据的领域或上下文。这些知识对于识别特定领域的噪音、行话或首字母缩写词非常宝贵。
开发文本清洗管道:
- 顺序步骤:创建明确定义的文本清洗步骤序列。从基本的预处理步骤开始,并根据需要逐步应用更先进的技术。
- 版本控制:维护清理过程中所做更改的记录。使用 Git 等版本控制系统来跟踪和记录修改。
测试和验证:
- 对样本数据进行测试:首先,在小型数据集样本上测试你的清理管道,以确保其按预期工作。
- 验证指标:建立验证指标来评估已清理数据的质量。这可能包括文本长度分布、词汇量或错误率等度量。
一致性问题:
- 小写:考虑将所有文本转换为小写以确保大小写一致性。但是,这可能并不总是适合特定任务,例如命名实体识别。
- 标准化:标准化日期格式、测量单位以及整个文本中应保持一致的任何其他元素。
处理缺失数据:
- 缺失值策略:决定如何处理缺失数据。根据上下文,你可以删除缺少文本的记录、使用占位符填充缺失值或使用插补技术。
- 记录缺失数据:记录数据集中是否存在缺失数据。这些信息对于分析和建模至关重要。
处理噪音:
- 噪声识别:制定识别和解决文本数据中的噪声的策略,例如拼写错误、缩写或非标准语言使用。
- 自定义规则:创建自定义清理规则或字典来处理数据集特有的特定类型的噪声。
平衡效率和质量:
- 效率注意事项:考虑文本清洗所需的计算资源,尤其是在处理大型数据集时。优化你的清洁管道以提高效率。
- 权衡:请注意,某些清理技术可能涉及数据质量和处理时间之间的权衡。选择与你的项目优先级相符的技术。
文档和透明度:
- 文档:记录清理过程的每个步骤,包括决策背后的基本原理、应用的转换以及使用的任何自定义规则。
- 可重复性:确保你的清洁过程可重复。其他团队成员或合作者应该能够理解和复制你的清洁管道。
可扩展性:
- 扩展策略:如果你预计要处理越来越大的数据集,请设计你的清洁管道以有效扩展。考虑分布式计算或并行化。
- 批处理:实施批处理技术来处理块中的文本清洗,特别是对于大量语料库。
迭代方法:
- 持续改进:文本清洗通常是一个迭代过程。当你从分析或建模中获得见解时,重新审视和完善你的清洁管道以提高数据质量。
- 反馈循环:在文本清洗和下游任务之间建立反馈循环,以确定需要改进的领域。
使用真实用例进行测试:
- 用例测试:在特定分析或建模任务的上下文中测试清理后的数据,以确保其满足用例的要求。
- 适应:准备根据不同分析或应用的需求来适应你的清洁管道。
通过遵循这些最佳实践,你可以提高已清理文本数据的质量和可靠性。有效的文本清洗是任何文本分析或自然语言处理项目的基础步骤,执行良好的文本清洗过程为有意义的见解和准确的模型奠定了基础。
(四)文本清洗的挑战和陷阱
文本清洗是数据预处理中至关重要且复杂的部分,但也面临着挑战和潜在的陷阱。意识到这些挑战可以帮助你有效地应对它们。以下是文本清洗中的一些常见挑战和陷阱:
(1)过度清洁与清洁不足
- 过度清洁:过度清洁可能会导致重要信息丢失。删除太多停用词或应用过多的词干提取可能导致上下文丢失。
- 清洁不足:另一方面,清洁不充分可能会在数据中留下噪音,影响分析和模型的质量。找到正确的平衡至关重要。
(2)处理特定领域的文本
- 领域术语:在专业领域中,文本数据可能包含标准清洁技术可能无法解决的特定领域的术语或术语。可能需要自定义规则或字典。
- 歧义:一些特定领域的术语可能不明确,需要上下文感知的清理。
(3)平衡资源
- 计算资源:文本清洗可能需要大量计算,尤其是对于大型数据集。在清洁彻底性与可用资源之间取得平衡具有挑战性。
- 处理时间:清理过程可以显著延长数据准备所需的时间。找到有效的方法来清理文本至关重要,尤其是在处理大数据时。
(4)特定于语言的细微差别
- 多语言数据:多种语言的文本数据可能需要特定于语言的清理技术,例如词干提取或停用词删除。
- 语言模型:某些语言在现有自然语言处理库中的支持有限,这使得应用标准技术具有挑战性。
(5)嘈杂的文本数据
- 打字错误和拼写错误:处理打字错误和拼写错误可能具有挑战性,特别是当这些错误在文本中很常见时。
- 缩写词和首字母缩写词:文本数据通常包含可能需要扩展或规范化的缩写词和首字母缩略词。
(6)文本长度变化
- 长文档:清理长文档可能会消耗更多资源,并且可能需要做出有关摘要或分块的决定。
- 短文本:短文本,如推文或标题,由于上下文有限,给清理和分析带来了挑战。
(7)文本数据中的偏差
- 偏见语言:文本数据可能包含与性别、种族或其他敏感属性相关的偏见。这些偏差可能需要去偏差技术。
- 数据采样偏差:如果文本数据收集过程存在偏差,则可能会引入在清理过程中必须考虑的采样偏差。
(8)版本控制和文档
- 缺乏文档:清洁过程的文档不充分可以使重现或理解所做的决定变得更加容易。
- 版本控制:维护清洁过程的版本控制历史对于透明度和可重复性至关重要。
(9)可扩展性问题
- 处理大量文本:处理大量文本语料库时可能会出现可扩展性挑战。必须采用有效的清洁策略。
- 并行处理:可能需要实施并行化或分布式计算技术才能在合理的时间范围内清理大型数据集。
(10)质量评价
- 定义质量指标:定义用于评估文本清洗有效性的质量指标可能具有挑战性。指标可能会根据项目目标而有所不同。
- 影响评估:评估文本清洗如何影响分析或建模等下游任务需要仔细考虑。
(11)迭代性质
- 迭代过程:文本清洗通常是一个迭代过程,随着你获得更多见解而不断发展。持续细化对于提高数据质量是必要的。
- 反馈循环:在清洁和分析/建模之间建立反馈循环对于调整清洁策略至关重要。
应对这些挑战和陷阱需要结合领域知识、仔细的规划以及适当的文本清洗技术的应用。深思熟虑和迭代的文本清洗方法可以为有意义的分析和建模带来更干净、更可靠的数据。
(五)结论
从原始文本数据到富有洞察力的分析和有效的自然语言处理 (NLP) 应用程序,文本清洗是一个不可或缺且通常很复杂的阶段。这个过程虽然很重要,但也并非没有复杂性和细微差别。本指南探讨了与文本清洗相关的基本原则、基本技术、工具、最佳实践和挑战。
文本清洗很重要,因为它直接影响为数据驱动的世界提供动力的数据的质量、可靠性和实用性。它是构建强大的 NLP 模型、准确的情感分析、信息丰富的文本分类和全面的文本摘要的基础。从本质上讲,你的见解的质量和模型的可靠性取决于清理后的文本数据的质量。
我们首先定义文本清洗并认识到其重要性。从那时起,我们深入研究了基本的文本清洗技术,从 HTML 标签删除和标记化等基本操作到处理多语言文本或解决特定领域挑战等更高级的方法。我们探索了可用于简化文本清洗过程的工具和库,重点介绍了 NLTK、spaCy 和 TextBlob 等 Python 库,以及正则表达式的强大功能。
详细讨论了有效文本清洗的最佳实践,强调了理解数据、开发清晰的清理管道以及测试和验证结果的重要性。我们强调了保持一致性、妥善处理缺失数据以及平衡效率与质量的重要性。
此外,我们还研究了文本清洗从业者可能遇到的挑战和潜在陷阱,例如过度清理和清理不足之间的微妙平衡、特定领域的细微差别以及可扩展性问题。
最后,文本清洗并不是一种万能的方法。这是一个动态和迭代的过程,需要适应性、仔细考虑和领域专业知识。通过遵循最佳实践、意识到潜在的陷阱并不断完善你的方法,你可以确保你的文本清洗工作产生干净、高质量的数据,从而释放有价值的见解并为下一代自然语言处理应用程序提供动力。文本清洗是打开文本数据中隐藏宝藏的准备和关键旅程。
相关文章:
【AIGC】大模型面试高频考点-数据清洗篇
【AIGC】大模型面试高频考点-数据清洗篇 (一)常用文本清洗方法1.去除无用的符号2.去除表情符号3.文本只保留汉字4.中文繁体、简体转换5.删除 HTML 标签和特殊字符6.标记化7.小写8.停用词删除9.词干提取和词形还原10.处理缺失数据11.删除重复文本12.处理嘈…...
Java基于SSM框架的跑腿平台小程序【附源码、文档】
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...
数据库连接池
在Java的多线程中,有线程池负责线程管理,类似线程池,在数据库中也有数据库连接池,负责数据库连接的管理。数据库连接池是一个容器。负责分配、管理数据库连接(Connection)。它允许应用程序重复使用一个现有…...
本地部署 WireGuard 无需公网 IP 实现异地组网
WireGuard 是一个高性能、极简且易于配置的开源虚拟组网协议。使用路由侠内网穿透使其相互通讯。 第一步,服务端(假设为公司电脑)和客户端(假设为公司外的电脑)安装部署 WireGuard 1,点此下载(…...
Educator头歌:离散数学 - 图论
第1关:图的概念 任务描述 本关任务:学习图的基本概念,完成相关练习。 相关知识 为了完成本关任务,你需要掌握:图的概念。 图的概念 1.一个图G是一个有序三元组G<V,R,ϕ>,其中V是非空顶点集合&am…...
axios的认识与基本使用
axios简介 Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 主要特点 从浏览器创建 XML…...
springboot358智慧社区居家养老健康管理系统(论文+源码)_kaic
毕 业 设 计(论 文) 智慧社区居家养老健康管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此&…...
java-a+b 开启java语法学习
代码 (ab) import java.util.Scanner; //导入 java.util包中的Scanner 类,允许读取键盘输入数据public class Main { // 创建一个公共类 Mainpublic static void main(String[] args) {//程序入口点,main方法Scanner scanner new Scanner(…...
SpringAi整合免费大模型(NVIDIA)
接上回,发布了springAI整合本地大模型之后,我们来看看怎么去利用别人已经训练好的大模型。 如果对整合本地大模型感兴趣的,请阅读: SpringAI集成本地AI大模型ollama(调用篇)非常简单!…...
Flutter中的Future和Stream
在 Flutter 中,Future 和 Stream 都是用于处理异步操作的类,它们都基于 Dart 的异步编程模型,但是它们的使用场景和工作方式有所不同。以下是它们的区别以及各自适用的场景。 目录 一、Future1、基本使用2、异常处理1. catchError2. onError…...
Python将Excel文件转换为JSON文件
工作过程中,需要从 Excel 文件中读取数据,然后交给 Python 程序处理数据,中间需要把 Excel 文件读取出来转为 json 格式,再进行下一步数据处理。 这里我们使用pandas库,这是一个强大的数据分析工具,能够方便地读取和处理各种数据格式。需要注意的是还需要引入openpyxl库,…...
MySQL中EXPLAIN的介绍、作用、字段含义
MySQL中EXPLAIN的介绍、作用、字段含义 在MySQL中,EXPLAIN 是一个非常有用的命令,它可以帮助开发者和DBA理解查询执行计划,从而优化查询性能。EXPLAIN 可以模拟优化器执行SQL查询语句,而不真正执行这条语句,从而帮助用…...
Socket编程:UDP网络编程项目
目录 一、回显服务器 二、翻译器 三、聊天室 一、回显服务器 项目介绍:使用UDPIPv4协议进行Linux网络编程,实现回显服务器和客户端 功能介绍:客户端发送数据,经过服务端再返回到客户端,输出数据 源代码࿱…...
uniapp echarts tooltip formation 不识别html
需求: echarts 的tooltip 的域名太长,导致超出屏幕 想要让他换行 思路一: 用formation自定义样式实现换行 但是: uniapp 生成微信小程序, echart种的tooltip 的formation 识别不了html ,自定义样式没办…...
从0开始linux(39)——线程(2)线程控制
欢迎来到博主的专栏:从0开始linux 博主ID:代码小豪 文章目录 线程创建线程标识符线程参数多线程竞争资源 回收线程detach 线程退出pthread_cancel 线程创建 线程创建的函数为pthread_create。该函数是包含在posix线程库当中,posix线程是C语言…...
对载入的3dtiles进行旋转、平移和缩放变换。
使用 params: {tx: 129.75845, //模型中心X轴坐标(经度,单位:十进制度)//小左ty: 46.6839, //模型中心Y轴坐标(纬度,单位:十进制度)//小下tz: 28, //模型中心Z轴坐标(高…...
YOLO模型训练后的best.pt和last.pt区别
在选择YOLO模型训练后的权重文件best.pt和last.pt时,主要取决于具体的应用场景:12 best.pt:这个文件保存的是在训练过程中表现最好的模型权重。通常用于推理和部署阶段,因为它包含了在验证集上表现最好的模型权重&#x…...
Qt 项目中同时使用 CMAKE_AUTOUIC 和 UiTools 的注意事项
在 Qt 项目开发中,.ui 文件是界面设计的重要组成部分。开发者可以通过两种主要方式使用 .ui 文件: 编译期处理:通过 Qt 的 uic 工具将 .ui 文件转化为 C 代码(ui_xxx.h),静态绑定到项目中。运行时动态加载…...
不玩PS抠图了,改玩Python抠图
网上找了两个苏轼的印章图片: 把这两个印章抠出来的话,对于不少PS高手来说是相当容易,但是要去掉其中的水印,可能要用仿制图章慢慢描绘,图章的边缘也要慢慢勾画或者用通道抠图之类来处理,而且印章的红色也不…...
ubuntu 22.04 mini 安装,在配置网络时重启后配置文件被重置原因与解决方法
在 /etc/netplan/50-cloud-init.yaml 配置文件中有一段注释中有说明 rootlocalhost:/etc/netplan# cat 50-cloud-init.yaml # This file is generated from information provided by the datasource. Changes # to it will not persist across an instance reboot. To disab…...
【Go底层】time包Ticker定时器原理
目录 1、背景2、go版本3、源码解释【1】Ticker结构【2】NewTicker函数解释 4、代码示例5、总结 1、背景 说到定时器我们一般想到的库是cron,但是对于一些简单的定时任务场景,标准库time包下提供的定时器就足够我们使用,本篇文章我们就来研究…...
mac下Gpt Chrome升级成GptBrowser书签和保存的密码恢复
cd /Users/自己的用户名/Library/Application\ Support/ 目录下有 GPT\ Chrome/ Google/ GptBrowser/ GPT\ Chrome 为原来的chrome浏览器的文件存储目录. GptBrowser 为升级后chrome浏览器存储目录 书签所在的文件 Bookmarks 登录账号Login 相关的文件 拷贝到GptBrow…...
[Redis#6] list | 命令 | 应用 | 消息队列 | 微博 Timeline
目录 List 列表 特点 2. 命令 头插和尾插 下标 range 查询 头删和尾删 LINSERT LLEN LREM LTRIM LSET 阻塞命令 BLPOP BRPOP 操作 总结 3. 内部编码 ziplist(压缩列表) linkedlist(链表) ✔️quicklist(快速链…...
服务器数据恢复—raid6阵列硬盘被误重组为raid5阵列的数据恢复案例
服务器存储数据恢复环境: 存储中有一组由12块硬盘组建的RAID6阵列,上层linux操作系统EXT3文件系统,该存储划分3个LUN。 服务器存储故障&分析: 存储中RAID6阵列不可用。为了抢救数据,运维人员使用原始RAID中的部分…...
Xcode15(iOS17.4)打包的项目在 iOS12 系统上启动崩溃
0x00 启动崩溃 崩溃日志,只有 2 行,看不出啥来。 0x01 默认配置 由于我开发时,使用的 Xcode 14.1,打包在另外一台电脑 Xcode 15.3 Xcode 14.1 Build Settings -> Asset Catalog Compliter - Options Xcode 15.3 Build S…...
Netty的心跳机制怎么实现的?
大家好,我是锋哥。今天分享关于【Netty的心跳机制怎么实现的?】面试题。希望对大家有帮助; Netty的心跳机制怎么实现的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 的心跳机制用于维持客户端和服务器之间的…...
常用函数的使用错题汇总
目录 new/delete malloc/free1. 语言和类型2. 内存分配3. 内存释放4. 安全性和类型安全5. 其他特性总结 线程停止文件流 new/delete malloc/free malloc/free 和 new/delete 是 C/C 中用于动态内存管理的两种方式,它们有一些重要的区别。以下是这两种方式的比较&…...
使用 `aircrack-ng`扫描、获取握手包
使用 aircrack-ng 工具集来扫描 5GHz WiFi 网络的过程与扫描 2.4GHz 网络类似,但需要注意一些特定的配置和命令。以下是一个详细的步骤指南,帮助你在 5GHz 频段上扫描 WiFi 网络并捕获握手包。 ### 前提条件 1. **操作系统**:通常在 Linux 系…...
css—轮播图实现
一、背景 最近和朋友在一起讨论的时候,我们提出了这样的一个提问,难道轮播图的效果只能通过js来实现吗?经过我们的一系列的争论,发现了这是可以通过纯css来实现这一效果的,CSS轮播图也是一种常见的网页展示方式&#x…...
Ardusub源码剖析(1)——AP_Arming_Sub
代码 AP_Arming_Sub.h #pragma once#include <AP_Arming/AP_Arming.h>class AP_Arming_Sub : public AP_Arming { public:AP_Arming_Sub() : AP_Arming() { }/* Do not allow copies */CLASS_NO_COPY(AP_Arming_Sub);bool rc_calibration_checks(bool display_failure)…...
ESP32-S3模组上跑通ES8388(10)
接前一篇文章:ESP32-S3模组上跑通ES8388(9) 二、利用ESP-ADF操作ES8388 2. 详细解析 上一回解析了es8388_init函数中的第3段代码(也是实际与ES8388寄存器打交道的第1段代码),本回继续往下解析。为了便于理…...
AI/ML 基础知识与常用术语全解析
目录 一.引言 二.AI/ML 基础知识 1.人工智能(Artificial Intelligence,AI) (1).定义 (2).发展历程 (3).应用领域 2.机器学习(Machine Learning,ML) (1).定义 (2).学习方式 ①.监督学习 ②.无监督…...
【C#设计模式(15)——命令模式(Command Pattern)】
前言 命令模式的关键通过将请求封装成一个对象,使命令的发送者和接收者解耦。这种方式能更方便地添加新的命令,如执行命令的排队、延迟、撤销和重做等操作。 代码 #region 基础的命令模式 //命令(抽象类) public abstract class …...
Could not resolve com.android.tools.build:gradle:7.4.2.
Android Studio编译项目报错如下,始终无法下载解析7.4.2的gradle classpath A problem occurred configuring root project aistudyclient_questionlib. > Could not resolve all files for configuration :classpath.> Could not resolve com.android.tools…...
uniapp在App端定义全局弹窗,当打开关闭弹窗会触发onShow、onHide生命周期怎么解决?
在uniapp(App端)中实现自定义弹框,可以通过创建一个透明页面来实现。点击进入当前页面时,页面背景会变透明,用户可以根据自己的需求进行自定义,最终效果类似于弹框。 遇到问题:当打开弹窗(进入弹窗页面)就会触发当前页…...
2024 ccpc 辽宁省赛 E(构造 思维?)L(二分+一点点数论知识?)
E 题意: 可以注意到: 我的两种方格都四个方格的大小。 所以 如果存在一种摆放方式 那么 4|nm。 再考虑一种特殊的情况 22 ,此时虽然我的积是4 但是无法摆放的。 1>对于 4 | n,或者 4 | m.我直接摆放第二种方格就可以了。 如果我n 是4 的…...
IIC 随机写+多次写 可以控制写几次
verilog module icc_tx#(parameter SIZE 2 , //用来控制写多少次 比如地址是0000 一个地址只能存放8bit数据 超出指针就会到下一个地址0001parameter CLK_DIV 50_000_000 ,parameter SPEED 100_000 ,parameter LED 50 )( input wire c…...
基于SpringBoot+Vue的汽车票网上预订系统-无偿分享 (附源码+LW+调试)
目录 1. 项目技术 2. 功能菜单 3. 部分功能截图 4. 研究背景 5. 研究目的 6. 可行性分析 6.1 技术可行性 6.2 经济可行性 6.3 操作可行性 7. 系统设计 7.1 概述 7.2 系统流程和逻辑 7.3 系统结构 8. 数据库设计 8.1 数据库ER图 (1)公告信…...
net9 abp vnext 多语言通过数据库动态管理
通过数据库加载实现动态管理,用户可以自己修改界面显示的文本,满足国际化需求 如图所示,前端使用tdesign vnext 新建表TSYS_Localization与TSYS_LocalizationDetail 国旗图标下载网址flag-icons: Free Country Flags in SVG 在Shared下创建下图3个文件 …...
pip安装github上的开源软件包
1、若本机中安装的有git,可使用githttps方式安装 # 以安装pyfolio软件包为例,安装指令如下 pip install githttps://github.com/quantopian/pyfolio.git 2、若本机中没有安装git,可以直接使用软件包的zip地址进行安装 # 以安装pyfolio软件包为例,安装…...
【LeetCode刷题之路】120:三角形最小路径和的两种解法(动态规划优化)
LeetCode刷题记录 🌐 我的博客主页:iiiiiankor🎯 如果你觉得我的内容对你有帮助,不妨点个赞👍、留个评论✍,或者收藏⭐,让我们一起进步!📝 专栏系列:LeetCode…...
架构04-透明多级分流系统
零、文章目录 架构04-透明多级分流系统 1、透明多级分流系统 (1)概述 **定义:**透明多级分流系统是指在用户请求从客户端发出到最终查询或修改数据库信息的过程中,通过多个技术部件对流量进行合理分配,以提高系统的…...
云原生后端开发:构建现代化可扩展的服务
随着微服务架构的普及和容器化技术的成熟,云原生后端开发成为了构建现代化、可扩展系统的关键。本文将从云原生理念出发,结合实际案例,探讨如何使用 Kubernetes、服务网格、微服务架构等技术构建高效的云原生后端。 一、云原生的核心理念 1.…...
在Windows和Linux系统上获取网卡MAC地址及相关信息所有常用方法整理
摘要 在网络管理和故障排除中,了解如何获取网卡的MAC地址、IP地址以及网卡名称是系统管理员必备的技能。本文将介绍在Windows和Linux系统上手动获取网卡MAC地址的方法,并提供脚本以自动化获取服务器中网卡信息的过程。这些技巧和工具将帮助新手系统管理…...
制作苹果IOS.APP所使用步骤和方法-有步骤视情况待完善
1.获取开发工具 首先,您需要下载并安装Xcode。Xcode是苹果开发iOS和macOS应用程序的官方集成开发环境(IDE)。它包含了必要的工具,例如代码编辑器、调试器、编译器和界面构建器。Xcode可在Mac App Store中免费下载。 2.学习Swift或…...
【conda】全面解析 Conda 配置文件:从完整示例到最佳实践
目录 引言一、Conda 配置文件示例1.1 中英文注释示例1.2 文件编码格式 二、详细解释2.1 ssl_verify: true2.2 channels2.3 envs_dirs2.4 pkgs_dirs2.5 custom_channels2.6 remote_read_timeout_secs 和 remote_connect_timeout_secs2.7 show_channel_urls2.8 default_packages2…...
ffmpeg命令详解
原文网址:ffmpeg命令详解_IT利刃出鞘的博客-CSDN博客 简介 本文介绍ffmpeg命令的用法。 命令示例 1.mp4和avi的基本互转 ffmpeg -i D:\input.mp4 E:\output.avi ffmpeg -i D:\input.avi E:\output.mp4 -i 表示input,即输入。后面填一个输入地址和一…...
asyncio.run() 里面嵌套 asyncio.run() 可以吗?
[TOC](asyncio.run() 里面嵌套 asyncio.run() 可以吗?) 在 Python 的异步编程中,asyncio 是一个非常重要的模块,它提供了编写单线程并发代码的基础设施。asyncio.run() 是一个方便的函数,用于运行一个协程并管理事件循环的生命周…...
flutter in_app_purchase google支付 PG-GEMF-01错误
问题:PG-GEMF-01错误 flutter 使用in_app_purchase插件升降级订阅时报错PG-GEMF-01。 解决方案: 升降级订阅时,确保不调用 MethodCallHandlerImpl.java文件中的 setObfuscatedAccountId()方法、setObfuscatedProfileId()方法 原因…...
Flink 离线计算
文章目录 一、样例一:读 csv 文件生成 csv 文件二、样例二:读 starrocks 写 starrocks三、样例三:DataSet、Table Sql 处理后写入 StarRocks四、遇到的坑 <dependency><groupId>org.apache.flink</groupId><artifactId&…...