语料的读取与处理
import pandas as pd
df_news= pd. read_table( r'C:\Users\CDAer\Desktop\data\car.txt' ,
names= [ 'category' , 'theme' , 'url' , 'content' ] )
import jieba
content_list= df_news[ 'content' ] . values. tolist( )
stopwords= pd. read_csv( r'C:\Users\CDAer\Desktop\data\stopwords.txt' , sep= '\t' ,
quoting= 3 , names= [ 'stopword' ] )
stopwords_list= stopwords[ 'stopword' ] . values. tolist( )
contents_clean= [ ]
for line in content_list:
seg= jieba. lcut( line)
line_clean= ''
for word in seg:
if word == '\n' or len ( word) <= 1 :
continue
elif word in stopwords_list:
continue
else :
line_clean= line_clean+ ' ' + word
contents_clean. append( line_clean)
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\CDAer\AppData\Local\Temp\jieba.cache
Loading model cost 1.112 seconds.
Prefix dict has been built succesfully.
df_data= pd. DataFrame( { 'contents_clean' : contents_clean, 'category' : df_news[ 'category' ] } )
df_data. head( )
contents_clean category 0 经销商 电话 试驾 订车 杭州 滨江区 江陵 保常 自魄 白云 大道北 广州市 天河区 黄... 汽车 1 呼叫 热线 服务 邮箱 汽车 2 品牌 二月 公布 最新 概念车 效果图 日内瓦 车展 品牌 带来 全新 概念车 性能 车型... 汽车 3 清仓 甩卖 一汽 夏利 威志 低至 启新 中国 一汽 强势 推出 一汽 夏利 威志 清仓 ... 汽车 4 日内瓦 车展 见到 高尔夫 家族 成员 高尔夫 敞篷版 全新 敞篷车 众多 高尔夫 车迷 ... 汽车
数据的整理
df_data. category. unique( )
array(['汽车', '财经', '科技', '健康', '体育', '教育', '文化', '军事', '娱乐', '时尚'],
dtype=object)
label_map= { '汽车' : 1 , '财经' : 2 , '科技' : 3 , '健康' : 4 , '教育' : 5 , '文化' : 6 , '军事' : 7 , '娱乐' : 8 , '体育' : 9 , '时尚' : 10 }
df_data[ 'category' ] = df_data[ 'category' ] . map ( label_map)
df_data. head( )
contents_clean category 0 经销商 电话 试驾 订车 杭州 滨江区 江陵 保常 自魄 白云 大道北 广州市 天河区 黄... 1 1 呼叫 热线 服务 邮箱 1 2 品牌 二月 公布 最新 概念车 效果图 日内瓦 车展 品牌 带来 全新 概念车 性能 车型... 1 3 清仓 甩卖 一汽 夏利 威志 低至 启新 中国 一汽 强势 推出 一汽 夏利 威志 清仓 ... 1 4 日内瓦 车展 见到 高尔夫 家族 成员 高尔夫 敞篷版 全新 敞篷车 众多 高尔夫 车迷 ... 1
训练集与测试集的划分
vec= TfidfVectorizer( analyzer= 'word' , max_features= 2000 , lowercase= False )
vec. fit( df_data[ 'contents_clean' ] . values)
TfidfVectorizer(analyzer='word', binary=False, decode_error='strict',
dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',
lowercase=False, max_df=1.0, max_features=2000, min_df=1,
ngram_range=(1, 1), norm='l2', preprocessor=None, smooth_idf=True,
stop_words=None, strip_accents=None, sublinear_tf=False,
token_pattern='(?u)\\b\\w\\w+\\b', tokenizer=None, use_idf=True,
vocabulary=None)
new_data
<5000x2000 sparse matrix of type '<class 'numpy.float64'>'
with 214219 stored elements in Compressed Sparse Row format>
X_train, X_test, y_train, y_test= train_test_split( df_data[ 'contents_clean' ] . values,
df_data[ 'category' ] , test_size= 0.2 , random_state= 1 )
type ( X_train)
numpy.ndarray
len ( X_train[ 1 ] )
593
将训练集与测试集特征向量化
from sklearn. feature_extraction. text import TfidfVectorizer
TfidfVectorizer?
vec= TfidfVectorizer( analyzer= 'word' , max_features= 2000 , lowercase= False )
vec. fit( X_train)
TfidfVectorizer(analyzer='word', binary=False, decode_error='strict',
dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',
lowercase=False, max_df=1.0, max_features=2000, min_df=1,
ngram_range=(1, 1), norm='l2', preprocessor=None, smooth_idf=True,
stop_words=None, strip_accents=None, sublinear_tf=False,
token_pattern='(?u)\\b\\w\\w+\\b', tokenizer=None, use_idf=True,
vocabulary=None)
TfidfVectorizer. fit?
x= vec. transform( X_train)
x_test= vec. transform( X_test)
贝叶斯分类器的训练与测试
from sklearn. naive_bayes import MultinomialNB
cls= MultinomialNB( )
cls. fit( x, y_train)
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
cls. score( x_test, y_test)
0.806