购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 文本数据清洗与标准化

文本数据清洗与标准化是自然语言处理的重要步骤,旨在为模型提供一致且准确的数据输入。本节首先介绍如何使用正则表达式对文本中的标点符号和字母大小写进行统一处理,同时去除停用词以减小数据噪声。然后介绍词干提取与词形还原技术,通过SnowballStemmer和WordNetLemmatizer实现词的标准化,将词简化至核心形式,有助于模型识别词的根本含义。

2.1.1 正则表达式在文本清洗中的应用

在自然语言处理中,正则表达式广泛用于去除无关标点,将文本统一转为小写以降低数据噪声,删除停用词或进行特定模式的文本过滤。正则表达式就像一个万能筛子,可以快速从一堆文字中挑选符合特定规则的内容。无论是查找电话号码,清除多余的空格,还是删除特殊符号,正则表达式都可以帮上大忙。

正则表达式通过一系列符号(如\d、[a-z]、+等)定义规则,告诉程序如何筛选或替换文本内容。以下是一些常见的规则:

(1)\d:匹配任何数字(如0到9)。

(2)\w:匹配字母、数字或下画线。

(3)\s:匹配空格。

(4).:匹配任意字符。

(5)+:表示前面的规则可以重复一次或多次。

(6)[]:表示匹配中括号内的任意字符。

例如,当我们在数据预处理过程中遇到了如下文本时:

     "欢迎使用我们的服务!!!请联系@12345或发送邮件到service#example.com"

通过正则表达式[^\w\s],可以匹配所有非字母、数字、空格的字符,并把这些符号清理掉:

运行结果如下:

     欢迎使用我们的服务请联系12345或发送邮件到serviceexamplecom

此外,正则表达式也可用于统一格式。例如,有些日期格式是2024/01/15,有些是2024-01-15,可以用正则表达式把斜杠替换成短横线:

     text="今天的日期是2024/01/15,明天是2024-01-16"
     cleaned_text=re.sub(r"(\d{4})/(\d{2})/(\d{2})", r"\1-\2-\3", text)
     print(cleaned_text)

运行结果如下:

     今天的日期是2024-01-15,明天是2024-01-16

有时候文本中可能有多余的空格,比如:

     "  欢迎  使用  服务  "

通过正则表达式r"\s+"可以把多个空格替换成单个空格:

     text="  欢迎   使用    服务   "
     cleaned_text=re.sub(r"\s+", " ", text).strip()
     print(cleaned_text)

输出结果如下:

     欢迎 使用 服务

以下示例将演示正则表达式在多步骤清洗过程中的应用,包括清除标点符号、转换大小写、去除停用词等操作。

代码说明如下:

(1)首先定义停用词列表stop_words,用于后续清洗操作。

(2)使用re.sub(r'[^\w\s]', '', text)移除所有标点符号,保留文字和空格。

(3)将字母统一转换为小写,确保大小写一致。

(4)利用re.sub(r'\s+', ' ', text).strip()将多余空格替换为单个空格,并移除开头和结尾的空格。

(5)最后分割文本,并剔除其中的停用词,以精简内容。

运行结果如下:

     清洗前的文本: 这是一个测试文本!它包含标点符号,以及一些多余的空格。希望将其清洗干净,并转为小写。
     清洗后的文本: 这是一个测试文本 它包含标点符号 多余 空格 希望清洗干净 并转为小写

此结果展示了正则表达式在文本清洗中的功能,通过一系列步骤,文本中的标点、字母大小写和停用词均得到有效处理,为后续的文本分析提供了清晰、标准化的数据。

以下是另一个使用正则表达式进行文本清洗的示例:针对URL、数字和电子邮件地址进行过滤,以进一步简化数据内容。在许多自然语言处理任务中都需要去除这些信息,以防止它们对模型的学习产生干扰。

代码说明如下:

(1)使用re.sub(r'http\S+|www\.\S+', '', text)删除文本中的URL,以避免冗余信息。

(2)re.sub(r'\S+@\S+\.\S+', '', text)用于移除电子邮件地址。

(3)re.sub(r'\d+', '', text)用于将文本中的数字替换为空,防止数字对模型产生干扰。

(4)re.sub(r'[^\w\s]', '', text)用于清除标点符号,仅保留文字和空格。

(5)re.sub(r'\s+', ' ', text).strip()用于清理多余空格,并移除首尾空格。

运行结果如下:

此结果展示了正则表达式在处理URL、电子邮件和数字信息时的效果,去除这些信息后,文本变得更简洁,适用于进一步的文本分析和特征提取。

下面给出一个完整示例,涵盖多种正则表达式清洗方法,包括URL、电子邮件、数字、标点符号、特定停用词的移除,并提供更详细的注解。代码长度和复杂性严格符合要求,确保全面展示文本清洗的流程和正则表达式的实际应用。

代码说明如下:

(1)使用re.sub(r'http\S+|www\.\S+', '', text)移除URL,确保文本中不包含网页链接。

(2)使用re.sub(r'\S+@\S+\.\S+', '', text)移除电子邮件地址,避免出现特定格式的干扰项。

(3)使用re.sub(r'[^\w\s]', '', text)移除标点符号,仅保留文字和空格。

(4)使用re.sub(r'\d+%?', '', text)删除数字及带有百分号的百分比,避免数字干扰文本表示。

(5)使用re.sub(r'\s+', ' ', text).strip()移除多余空格,并统一为单个空格。

(6)将字母转换为小写,以确保文本的一致性。

(7)使用列表去除停用词,过滤分词后的文本,最终输出干净的文本数据。

运行结果如下;

此结果展示了正则表达式在多步骤文本清洗中的功能,通过逐步清理URL、电子邮件、标点、数字等无关信息,使文本更加整洁,适合用于下游的自然语言处理任务。

2.1.2 词干提取与词形还原技术

词干提取(Stemming)与词形还原(Lemmatization)是自然语言处理中两种常用的文本标准化方法,通过去掉单词的词缀,将其缩减为词根形式,这种方法适用于归一化具有相似含义的单词。词形还原则通过词汇知识库,将单词恢复为其原始词形,如将动词还原为原形,将名词还原为单数形式。

简单来说,词干提取通过去掉单词的后缀(比如英语单词中的-ing、-ed),把单词切成一个“核心部分”,而不管这个核心部分是不是一个真实的单词。

想象有一棵树,上面有很多树枝,每根树枝代表一个单词(比如running、runs、runner)。词干提取就像用修剪机直接把树枝砍断,让树只剩下“树干”(比如run)。词干提取虽然过程简单,但有时候可能会“砍过头”或者“砍错地方”,比如把relational砍成了relat,而这并不是一个真实的单词。词干提取示例如下:

(1)"playing" → "play"

(2)"played" → "play"

(3)"happily" → "happili"

词形还原更像是一位语言学家,它通过查词典或规则分析的方式,找到单词的词根(词典中存在的标准形式)。这种方式比词干提取更精确,因为它考虑了单词的词性和语法结构。

这一过程就像园艺师精心修剪树木,不会随便砍断树枝,而是按照植物的生长特点合理修剪。例如,它知道running和runs都应该还原为run,而不会像词干提取那样砍成错误的形式。词形还原示例如下:

(1)"playing" → "play"(动词形式)

(2)"better" → "good"(形容词形式,还原到词典形式)

(3)"wolves" → "wolf"(考虑了复数的规则)

在Python中,可以通过nltk库实现这两种技术:使用SnowballStemmer进行词干提取,使用WordNetLemmatizer进行词形还原。以下代码将展示它们的具体应用。

代码说明如下:

(1)使用SnowballStemmer("english")初始化词干提取器,适用于多种语言,此处指定为英语。

(2)使用WordNetLemmatizer实现词形还原,并将词性指定为动词,以提高词形还原的准确度。

(3)定义函数stem_and_lemmatize对输入的词列表逐一进行词干提取和词形还原处理。

(4)使用stemmer.stem(word)进行词干提取,返回简化的词干。

(5)使用lemmatizer.lemmatize(word, pos=wordnet.VERB)进行词形还原,将不同形式的词还原为标准词形。

运行结果如下:

     原始文本: ['running', 'happier', 'boxes', 'studies', 'easily', 'flying']
     词干提取结果: ['run', 'happier', 'box', 'studi', 'easili', 'fli']
     词形还原结果: ['run', 'happier', 'boxes', 'study', 'easily', 'fly']

此结果展示了词干提取和词形还原的不同效果。词干提取更注重简化词形,直接去除后缀;而词形还原基于词义,将词还原为标准词典形式,从而增强模型对词的理解力。

词干提取适用于速度要求高、对精确性要求不太高的场景,比如快速生成搜索索引;而词干还原更加适用于对语言处理要求高的任务,比如机器翻译、情感分析,或者需要更精确的语义分析场景。 4VjV7OmSWjUAZzImsyulMUY0fQp5y77nkMGdQ1i6oyX+iNVvdc6cfMgBpCECkW4f

点击中间区域
呼出菜单
上一章
目录
下一章
×