文本预处理概述
文本处理是自然语言处理(NLP)的核心组成部分。它帮助我们清洗原始文本数据,并将其转换为适合进行分析和机器学习的格式。
- 包括大小写转换、分词和去除噪声
- 处理标点符号、停用词和多余的空格
- 提高模型的准确性和一致性
- 通常使用 Python 和 NLP 库来完成
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20250924153111948541/textprocessing.webp">textprocessingText Preprocessing
下面介绍一些在 Python 中常用的文本预处理技术。
1. 将文本转换为小写
我们将文本转换为小写,以减少文本数据的词汇表大小,从而让模型更容易学习。
Python
CODEBLOCK_419d3121
Output
hey, did you know that the summer break is coming? amazing right !! it‘s only 5 more days !!
2. 移除数字
我们可以选择移除数字,或者将数字转换为其文本表示形式。要移除数字,我们可以使用正则表达式。
Python
CODEBLOCK_5e11e53c
Output
There are balls in this bag, and in the other one.
3. 将数字转换为单词
我们也可以将数字转换为单词。这可以通过使用 inflect 库来实现。
Python
CODEBLOCK_dd323fa6
Output
> There are three balls in this bag and twelve in the other one.
4. 移除标点符号
我们移除标点符号,以免同一个单词因标点不同而被视为不同的形式。例如,如果不移除标点,"been."、"been," 和 "been!" 将被区别对待。
Python
CODEBLOCK_07f0aab7
Output
Hey did you know that the summer break is coming Amazing right Its only 5 more days
5. 移除多余的空白字符
我们可以使用 INLINECODE7a3fdc68 和 INLINECODE5708ac1d 函数来移除字符串中的所有多余空格。
Python
CODEBLOCK_97ec4e16
Output
we don‘t need the given questions
6. 移除停用词
停用词是指那些对句子语义贡献不大的词,因此可以将它们移除。NLTK 库包含了一套停用词列表,我们可以使用这些词来从文本中去除停用词。下面是 NLTK 中可用的停用词列表的一部分。
Python
CODEBLOCK_011320eb
Output
> [‘sample‘, ‘sentence‘, ‘going‘, ‘remove‘, ‘stopwords‘, ‘.‘]
7. 词干提取
词干提取是获取单词词根形式的过程。词干是附加了词缀(如 -ed, -ize, -de, -s 等)的部分。通过去除单词的前缀或后缀来创建词干。
Examples:
> books –> book
> looked –> look
> denied –> deni
> flies –> fli
词干提取主要有三种算法:Porter Stemmer、Snowball Stemmer 和 Lancaster Stemmer。其中 Porter Stemmer 是最常用的。
Python
CODEBLOCK_a8a1eee7
Output
> [‘data‘, ‘scienc‘, ‘use‘, ‘scientif‘, ‘method‘, ‘algorithm‘, ‘and‘, ‘mani‘, ‘type‘, ‘of‘, ‘process‘]
8. 词形还原
词形还原是一种 NLP 技术,旨在将单词还原为其词典中的基本形式。这有助于文本分析和搜索任务,因为它允许我们比较具有不同形式但语义相关的单词。
Python
CODEBLOCK_32bf0489
Output
> [‘The‘, ‘study‘, ‘of‘, ‘data‘, ‘science‘, ‘are‘, ‘study‘, ‘data‘, ‘.‘]
9. 词性标注 (POS Tagging)
词性标注是根据定义和上下文将单词分配到特定词性(如名词、动词、形容词等)的过程。NLTK 库提供了方便的函数来实现这一点。
Python
CODEBLOCK_6501e013
Output
> [(‘Data‘, ‘NNS‘), (‘science‘, ‘NN‘), (‘is‘, ‘VBZ‘), (‘fun‘, ‘NN‘), (‘.‘, ‘.‘)]
10. 分块
分块是找出名词短语的过程。我们可以使用词性标注的结果来进行分块。我们可以定义自己的语法规则来识别短语。
Python
CODEBLOCK_b02f8879
Output
> (S
> Apple/NNP
> is/VBZ
> looking/VBG
> at/IN
> buying/VBG
> (GPE U.K./NNP)
> startup/NN
> for/IN
> $/$
> 1/CD
> billion/CD
> ./.)
11. 命名实体识别 (NER)
命名实体识别是识别文本中特定类别(如人名、地名、组织名等)实体的过程。NLTK 提供了一个预训练的分类器来进行识别。
Python
CODEBLOCK_63e9c476
Output
> (S
> (PERSON Elon/NNP Musk/NNP)
> is/VBZ
> the/DT
> CEO/NNP
> of/IN
> (ORGANIZATION SpaceX/NNP)
> ./.)
12. 处理缩写词
处理缩写词(如 "don‘t", "I‘m")是文本预处理中重要的一步。我们可以使用字典映射或专门的库来将它们展开为完整形式("do not", "I am"),这有助于后续的词干提取或语义分析。
Python
CODEBLOCK_48a98b3f
Output
I do not think it is working.
13. 拼写纠错
拼写纠错能将错误的拼写转换为正确的拼写(例如 "cmputr" -> "computer")。我们可以使用 textblob 库来实现这一功能。
Python
CODEBLOCK_a54eccb7
Output
I love data science
14. 词袋模型
词袋模型是一种将文本转换为数字向量的常用方法。它统计文本中每个词的出现频率,忽略语法和词序,但保留多义性。
Python
CODEBLOCK_533e094e
Output
[‘and‘ ‘document‘ ‘first‘ ‘is‘ ‘one‘ ‘second‘ ‘the‘ ‘third‘ ‘this‘]
[[0 1 1 1 0 0 1 0 1]
[0 2 0 1 0 1 1 0 1]
[1 0 0 1 1 0 1 1 1]
[0 1 1 1 0 0 1 0 1]]