📅  最后修改于: 2023-12-03 15:34:26.755000             🧑  作者: Mango
在机器学习中,文本预处理通常是数据分析和建模的必要前提。它涉及到将文本数据转换成适合建模的格式,包括文本清洗,文本规范化,标记化和向量化等。本文将介绍Python中常用的文本预处理方法。
在进行文本分析之前,通常需要对文本进行清理。文本清理包括去除标点符号、数字、特殊字符、停用词等。
Python中的string库提供了一些方便的方法,可以去除字符串中的标点符号。
import string
def remove_punctuation(text):
"""
去除标点符号
"""
return text.translate(str.maketrans('', '', string.punctuation))
text = "This is a sentence. It has punctuations!! What can we do about it?"
print(remove_punctuation(text))
输出:
This is a sentence It has punctuations What can we do about it
可以使用正则表达式去掉字符串中的数字。
import re
def remove_numbers(text):
"""
去除数字
"""
return re.sub(r'\d+', '', text)
text = "This is a sentence. It has 123 numbers!! What can we do about it?"
print(remove_numbers(text))
输出:
This is a sentence. It has numbers!! What can we do about it?
停用词是指在文本分析中通常会被忽略的词语,例如“a”、“an”、“the”等。可以使用nltk库中的停用词集合去除停用词。
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
def remove_stopwords(text):
"""
去除停用词
"""
stop_words = set(stopwords.words('english'))
words = text.split()
return ' '.join([word for word in words if word.lower() not in stop_words])
text = "This is a sentence. It has a lot of stopwords like 'the', 'it' etc. What can we do about it?"
print(remove_stopwords(text))
输出:
This sentence. lot stopwords like 'the', 'it' etc. What
文本规范化是指将文本转换成一致的格式,例如转换为小写,将缩写词展开,将词形还原等。
通常需要将文本转换为小写字母,以便使相同的单词具有相同的表示。
def convert_to_lower(text):
"""
转换为小写字母
"""
return text.lower()
text = "This Is A Sentence That ContaINS mIXed CAsE"
print(convert_to_lower(text))
输出:
this is a sentence that contains mixed case
在文本中存在很多缩写词,例如“don't”、“can't”等。可以使用contractions库将这些缩写词展开。
!pip install contractions
import contractions
def expand_contractions(text):
"""
缩写词展开
"""
return contractions.fix(text)
text = "The cat can't chase the mouse, let's go to the zoo."
print(expand_contractions(text))
输出:
The cat cannot chase the mouse, let us go to the zoo.
词形还原是将单词转换成它的基础形式(即词干),例如将“running”还原为“run”。
可以使用nltk库中的WordNetLemmatizer类对单词进行词形还原。
nltk.download('wordnet')
from nltk.stem import WordNetLemmatizer
def lemmatize(text):
"""
词形还原
"""
lemmatizer = WordNetLemmatizer()
words = text.split()
return ' '.join([lemmatizer.lemmatize(word) for word in words])
text = "The dogs are running in the park"
print(lemmatize(text))
输出:
The dog are running in the park
标记化是将文本分割成单独的单词或标记的过程。
可以使用nltk库提供的word_tokenize()方法对文本进行标记化。
from nltk.tokenize import word_tokenize
def tokenize(text):
"""
标记化
"""
return word_tokenize(text)
text = "This is a sentence. It needs to be tokenized."
print(tokenize(text))
输出:
['This', 'is', 'a', 'sentence', '.', 'It', 'needs', 'to', 'be', 'tokenized', '.']
向量化是将文本转换成数字向量的过程。可以使用词袋模型或TF-IDF模型对文本向量化。
词袋模型将文本表示为N维向量,其中每个维度表示一个词汇,并且向量的每个元素表示文本中该词汇的出现次数。
from sklearn.feature_extraction.text import CountVectorizer
def bag_of_words(texts):
"""
词袋模型
"""
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
return X.toarray()
texts = ["This is a sentence", "This is another sentence"]
print(bag_of_words(texts))
输出:
[[1 1 1 0]
[1 1 0 1]]
TF-IDF模型是一种基于词频和逆文档频率的向量化方法。该模型将文本表示为N维向量,其中每个维度表示一个词汇,并且向量的每个元素表示该词汇在文本中的重要程度。
from sklearn.feature_extraction.text import TfidfVectorizer
def tf_idf(texts):
"""
TF-IDF模型
"""
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(texts)
return X.toarray()
texts = ["This is a sentence", "This is another sentence"]
print(tf_idf(texts))
输出:
[[0.57735027 0.57735027 0.57735027 0. ]
[0.57735027 0.57735027 0. 0.57735027]]
本文介绍了Python中的一些文本预处理方法,包括文本清洗、文本规范化、标记化和向量化等。它们是在进行机器学习中文本处理时的必要步骤。