目录
3.2 支持向量机(Support Vector Machine)
文本分类是NLP最常用的应用之一,这是基于文档内容将电子邮件、消息、推文或文章形式的文本文档分类为预定义类别的过程。在本章中,你将学习如何使用机器学习技术进行文本分类,并提供了代码进行实战,让我们开始吧。
首先加载所需的依赖库:
# 依赖库
import pandas as pd
import random
import time
import joblib
from sklearn.model_selection import train_test_split, RandomizedSearchCV
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.linear_model import LogisticRegression
import re
import jieba
源数据的形式:
case number | content | label |
0 | 文本内容1。。。 | 标签1 |
1 | 文本内容2。。。 | 标签2 |
一、数据预处理
在文本分类中,数据处理是一个关键的步骤,它可以影响模型的性能。以下是一些常用的数据处理技术:
1.1 数据清洗
包括去除文本中的特殊字符、标点符号、数字等,并进行大小写转换、去除HTML标签等操作,以保证文本数据的干净和一致性。
1.2 分词
将完整的句子拆分成词语,实现分词的常用库:jieba, SnowNLP, THULAC, TLNK等。
1.3 去停用词
删除对文本特征没有任何贡献作用的字词,例如语气词、人称助词等频繁表达的词语。
# 数据预处理:清洗、分词、去停用词 ##
def preprocess_text(content,words):
print('开始数据预处理...')
stopwords = pd.read_csv("C:/Users/xxx/Documents/NLP/data/Stopwords.txt", index_col=False,quoting=3, sep="\t", names=['stopword'], encoding='utf8')
stopwords = stopwords['stopword'].values
for line in range(len(content)):
try:
content[line] = content[line].lower()
# 删除提及(例如:@zhangsan);删除URL链接;删除标签(例如:#Amazing);删除记号和下一个字符(例如:he's);删除数字
content[line] = re.sub("\S+@\S+|https*\S+|#\S+|\'\w+|\d+", " ", content[line])
# 删除特殊字符
content[line] = re.sub(r'[’!"#$%&\'()*+,-./:;<=>?@,。?★、…【】《》?“”‘’!\[\\\]^_`{|}~]+', ' ',content[line])
#删除两端空格;删除2个及以上的空格
content[line] = re.sub('\s{2,}', " ", content[line])
content[line] = content[line].strip()
segs = jieba.lcut(content[line])
segs = filter(lambda x: len(x) > 1, segs)
segs = filter(lambda x: x not in stopwords, segs)
segs = list(segs)
Allsegs = " ".joi