Python中如何进行中文文本分类
发布时间:2024-01-08 07:34:25
在Python中进行中文文本分类可以使用各种机器学习和自然语言处理的库和算法。下面是一个简单的基于朴素贝叶斯算法的中文文本分类例子。
1. 数据预处理:
首先,需要准备一个中文文本分类的数据集。可以是已经标注好分类的文本数据集。在数据预处理阶段,需要对文本进行一些常见的处理步骤,如去除停用词、分词和构建特征向量等。
import jieba
import re
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
# 加载停用词表
def load_stopwords(file_path):
stopwords = []
with open(file_path, 'r', encoding='utf-8') as f:
for line in f:
stopwords.append(line.strip())
return stopwords
# 分词
def cut_words(text):
text = re.sub(r'\s+', ' ', text) # 去除多余空格
words = jieba.lcut(text)
return ' '.join(words)
# 构建特征向量
def build_feature_vector(texts):
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
return X.toarray()
# 加载数据集
def load_dataset(file_path):
texts = []
labels = []
with open(file_path, 'r', encoding='utf-8') as f:
for line in f:
label, text = line.strip().split('\t')
texts.append(text)
labels.append(label)
return texts, labels
# 加载停用词表
stopwords = load_stopwords('stopwords.txt')
# 加载数据集
texts, labels = load_dataset('data.txt')
# 对文本进行预处理
texts = [cut_words(text) for text in texts]
# 构建特征向量
X = build_feature_vector(texts)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=42)
2. 模型训练与分类:
使用朴素贝叶斯算法进行文本分类。可以使用sklearn库中的MultinomialNB类。
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
# 模型训练
clf = MultinomialNB()
clf.fit(X_train, y_train)
# 模型预测
y_pred = clf.predict(X_test)
# 分类准确率评估
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)
3. 完整代码示例:
import jieba
import re
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
# 加载停用词表
def load_stopwords(file_path):
stopwords = []
with open(file_path, 'r', encoding='utf-8') as f:
for line in f:
stopwords.append(line.strip())
return stopwords
# 分词
def cut_words(text):
text = re.sub(r'\s+', ' ', text) # 去除多余空格
words = jieba.lcut(text)
return ' '.join(words)
# 构建特征向量
def build_feature_vector(texts):
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
return X.toarray()
# 加载数据集
def load_dataset(file_path):
texts = []
labels = []
with open(file_path, 'r', encoding='utf-8') as f:
for line in f:
label, text = line.strip().split('\t')
texts.append(text)
labels.append(label)
return texts, labels
# 加载停用词表
stopwords = load_stopwords('stopwords.txt')
# 加载数据集
texts, labels = load_dataset('data.txt')
# 对文本进行预处理
texts = [cut_words(text) for text in texts]
# 构建特征向量
X = build_feature_vector(texts)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=42)
# 模型训练
clf = MultinomialNB()
clf.fit(X_train, y_train)
# 模型预测
y_pred = clf.predict(X_test)
# 分类准确率评估
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)
以上是一个简单的中文文本分类的例子,使用了朴素贝叶斯算法进行分类。这只是一个示例,实际中可以根据具体需求选择适合的算法和进行更多的特征工程处理。
