文本预处理:分词、停用词处理和向量化 (TF-IDF)
文本预处理:分词、停用词处理和向量化 (TF-IDF)
本文将介绍如何使用 Python 对文本数据进行预处理,包括分词、停用词处理和向量化。我们将使用 TF-IDF 方法进行向量化,并展示预处理后的结果。
数据集
假设我们有一个数据集 corpus,其目录结构如下:
corpus
├── neg
│ ├── 1.txt
│ ├── 2.txt
│ └── ...
└── pos
├── 1.txt
├── 2.txt
└── ...
其中 neg 和 pos 分别代表负面和正面情感的文本数据。每个文本文件包含一段文本。
代码实现
import os
import jieba
from collections import Counter
from sklearn.feature_extraction.text import TfidfVectorizer
# 读取停用词表
stopwords = []
with open('stopwords.txt', 'r', encoding='utf-8') as f:
for line in f:
stopwords.append(line.strip())
# 定义文本预处理函数
def preprocess_text(text):
# 分词
words = jieba.cut(text)
# 去除停用词
words = [word for word in words if word not in stopwords]
return words
# 定义向量化函数
def vectorize(corpus, method='tf-idf'):
if method == 'tf-idf':
vectorizer = TfidfVectorizer(tokenizer=preprocess_text)
else:
raise ValueError('Invalid vectorization method.')
X = vectorizer.fit_transform(corpus)
return X, vectorizer
# 读取数据集
corpus = []
labels = []
root_dir = 'E:/Learning/大三下/自然语言处理/corpus'
for label, sub_dir in enumerate(['neg', 'pos']):
for file_name in os.listdir(os.path.join(root_dir, sub_dir)):
with open(os.path.join(root_dir, sub_dir, file_name), 'r', encoding='utf-8') as f:
text = f.read().strip()
corpus.append(text)
labels.append(label)
# 向量化
X, vectorizer = vectorize(corpus, method='tf-idf')
# 输出向量化结果
print('Vocabulary size:', len(vectorizer.vocabulary_))
print('Sample document:', corpus[0])
print('Sample vector:', X[0].toarray())
print('Sample label:', labels[0])
说明
- 上述代码中的停用词表文件为
stopwords.txt,需要先下载哈工大停用词表,或者使用其他停用词表。 - 向量化方法可选
tf-idf,也可以替换为其他方法,例如one-hot、Word2Vec等。 - 输出结果中,
Vocabulary size表示词汇表大小,Sample document表示样本文本,Sample vector表示样本文本的向量表示,Sample label表示样本标签(0 表示neg,1 表示pos)。
总结
本文介绍了如何使用 Python 对文本数据进行预处理,包括分词、停用词处理和向量化。代码示例使用 TF-IDF 方法进行向量化,并展示了预处理后的结果。希望本文对您有所帮助。
原文地址: https://www.cveoy.top/t/topic/ocZi 著作权归作者所有。请勿转载和采集!