提示:以下是本篇文章正文内容,下面案例可供参考
一、任务说明
论⽂分类(数据建模任务),利⽤已有数据建模,对新论⽂进⾏类别分类。
二、使用步骤
1.引入库
代码如下(示例):
import re
import pandas as pd
import json
from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.multioutput import MultiOutputClassifier
2.读入数据
代码如下(示例):
data = []
with open('arxiv-metadata-oai-snapshot.json','r') as f:
for idx,line in enumerate(f):
if idx > 50000:
break
d = json.loads(line)
d = {'title': d['title'],'categories':d['categories'],'abstract':d['abstract']}
data.append(d)
data = pd.DataFrame(data)
3.数据预处理
## 字段合并
data['text'] = data['title'] + data['abstract']
## 运用正则化去换行和将所有字母转成小写
data['text'] = data['text'].apply(lambda x: x.replace('\n',''))
data['text'] = data['text'].apply(lambda x:x.lower())
print(data.head())
data = data.drop(['title','abstract'],axis=1)
print(data.head())
## 对论文类别字段做处理
### 多类别
data['categories'] = data['categories'].apply(lambda x: x.split(' '))
print(data.head())
### 单个类别
data['categories_big'] = data['categories'].apply(lambda x : [xx.split('.')[0] for xx in x])
print(data.head())
### 多标签onthot编码MultiLabelBinarizer
mbl = MultiLabelBinarizer()
mbl.fit(data['categories_big'])
data_label = mbl.transform(data['categories_big'])
#data_label = mbl.fit_transform(data['categories_big'].iloc[:])
print(data_label[0:5])
## 文本向量化TF-IDF
tf = TfidfVectorizer(max_features=4000,lowercase = False)
tf.fit(data['text'])
data_tfidf = tf.transform(data['text'])
利用TF-IDF做文本向量化
4.划分训练集和数据集
x_train,x_test,y_train,y_test = train_test_split(data_tfidf,data_label,test_size=0.2,random_state=123)
5.建模
clf = MultiOutputClassifier(MultinomialNB()).fit(x_train, y_train)
print('准确度:',clf.score(x_test,y_test))
总结
1、文本分类一定要对文本做向量化,CountVectorizer和TF-IDF都可以做文本向量化
2、文本向量化之后可以采用降维来提高运行速度
3、多标签分类选择MultinomialNB