数据清洗技术在自然语言处理中的应用

自然语言处理(NLP)领域,数据清洗是一项基础且关键的工作。本文将详细介绍几种常用的数据清洗技术,包括去除HTML标签、URL和电子邮件地址,去除停用词,标准化和拼写检查,聊天词汇转换,以及去除高频和低频词汇。这些技术对于提高文本数据的质量,进而提升NLP任务的性能至关重要。

在从不同网站提取数据时,经常遇到包含HTML标签的文本。这些标签包括标题、正文、段落、加粗等。可以使用正则表达式轻松地从文本中去除这些HTML标签。以下是一个Python代码示例,展示了如何去除文本中的HTML标签:

import re text = """ “对这条裙子抱有很高的期望,希望15号尺码(通常的尺码)能适合。” without_html = re.sub(pattern=r"<[^>]*>", repl=' ', string=text) print(f”{without_html}”)

这段代码首先定义了一个包含HTML标签的字符串,然后使用正则表达式替换掉所有的HTML标签,并将结果打印出来。

在手动从网站、维基百科页面或博客中收集数据时,经常遇到URL链接。有时这些链接是重要的,但有时可能不需要它们。可以使用spaCy库来检测文本中是否包含URL链接,并将其去除。以下是一个Python代码示例,展示了如何检测和去除文本中的URL链接:

import spacy nlp = spacy.load("en_core_web_sm") text = '电子邮件地址是 http://abcgmail.com' doc = nlp(text) for token in doc: if token.like_url: print(token)

这段代码首先加载了spaCy的英文模型,然后定义了一个包含URL链接的字符串。通过遍历文档中的每个token,可以检测到URL链接并将其打印出来。

停用词是自然语言处理中的常用技术。停用词是指在一种语言中经常出现的词,例如“和”、“或”、“但”等。这些词在文本中没有特定的意义,即使从文本中去除它们,也不会降低文本的质量。以下是一个Python代码示例,展示了如何从文本中去除停用词:

import nltk from nltk.corpus import stopwords nltk.download('stopwords') text = "对这条裙子抱有很高的期望,希望1-5号尺码能适合。" STOPWORDS = set(stopwords.words('english')) ans = " ".join([word for word in str(text).split() if word not in STOPWORDS]) ans

这段代码首先下载了NLTK库中的停用词包,然后定义了一个包含停用词的字符串。通过遍历字符串中的每个词,并检查它是否在停用词列表中,可以去除停用词并得到清洗后的文本。

经常遇到格式不正确或拼写错误的数据。为了解决这个问题,可以使用autocorrect库来进行拼写检查。以下是一个Python代码示例,展示了如何对文本进行标准化和拼写检查:

!pip install autocorrect import itertools from autocorrect import Speller text="一个农民会喜欢这种食物" text_correction = ''.join(''.join(s)[:2] for _, s in itertools.groupby(text)) print("正常文本:{}".format(text_correction)) spell = Speller(lang='en') ans = spell(text_correction) print("纠正后的文本:{}".format(ans))

这段代码首先安装了autocorrect库,然后定义了一个包含拼写错误的字符串。通过使用autocorrect库,可以对文本进行拼写检查并纠正错误。

chat_words_str = """ AFAIK=据所知 AFK=离开键盘 ASAP=尽快 ATK=在键盘前 ATM=此刻 A3=随时,随地,随便""" chat_words_map_dict = {} chat_words_list = [] for line in chat_words_str.split("\n"): if line != "": cw = line.split("=")[0] cw_expanded = line.split("=")[1] chat_words_list.append(cw) chat_words_map_dict[cw] = cw_expanded chat_words_list = set(chat_words_list) def chat_words_conversion(text): new_text = [] for w in text.split(): if w.upper() in chat_words_list: new_text.append(chat_words_map_dict[w.upper()]) else: new_text.append(w) return " ".join(new_text) chat_words_conversion("一分钟后A3") import pandas as pd from collections import Counter df = pd.read_csv('NLP清洗第二部分.csv') df[:3] cnt = Counter() for text in df["text"].values: for word in text.split(): cnt[word] += 1 cnt.most_common(10) FREQWORDS = set([w for (w, wc) in cnt.most_common(10)]) def remove_freqwords(text): """自定义函数,用于去除高频词汇""" return " ".join([word for word in str(text).split() if word not in FREQWORDS]) df["text_wo_stopfreq"] = df["text"].apply(lambda text: remove_freqwords(text)) df.head()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485