📜  Python中的文本预处理 |设置 2(1)

📅  最后修改于: 2023-12-03 15:34:26.755000             🧑  作者: Mango

Python中的文本预处理 | 设置 2

介绍

在机器学习中,文本预处理通常是数据分析和建模的必要前提。它涉及到将文本数据转换成适合建模的格式,包括文本清洗,文本规范化,标记化和向量化等。本文将介绍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模型

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中的一些文本预处理方法,包括文本清洗、文本规范化、标记化和向量化等。它们是在进行机器学习中文本处理时的必要步骤。