sklearn+nltk
发布时间:2019-09-06 19:54

步骤:

1 有标签的数据。数据:好评文本:pos_text.txt  差评文本:neg_text.txt

2 构造特征:词,双词搭配,比如 手机 非常 , 非常 好用 , 好用 ! 这三个搭配作为分类的特征。以此类推,三词搭配,四词搭配都是可以被作为特征的.

3 特征降维:使用统计方法找到信息量丰富的特征。包括:词频、文档频率、互信息、信息熵、卡方统计等等。

4 特征表示:nltk [ { 特征1 : true, 特征2 : true, 特征n : true, }, 类标签 ]

5 构建分类器并预测:选出最佳算法后可以调整特征的数量来测试准确度。用分类算法训练里面的训练集,得出分类器。用分类器给开发测试集分类,得出分类结果。对比分类器给出的分类结果和人工标注的正确结果,给出分类器的准确度。

其中,nltk 主要负责处理特征提取和特征选择。scikit-learn 主要负责分类算法,评价分类效果,进行分类等任务。

 实验:

1.处理数据。str 是全部pos+neg的数据。类型是:str

def text:
 f1 = open 
 f2 = open
 line1 = f1.readline
 line2 = f2.readline
 str = ''
 while line1:
 str += line1
 line1 = f1.readline
 while line2:
 str += line2
 line2 = f2.readline
 f1.close
 f2.close
 return str

2.构建特征

#把单个词作为特征
def bag_of_words:
 d={}
 for word in words:
 d[word]=true
 return d
print[:5]))
{'除': true, '了': true, '电': true, '池': true, '不': true}
import nltk
from nltk.collocations import bigramcollocationfinder
from nltk.metrics import bigramassocmeasures
#把双个词作为特征,并使用卡方统计的方法,选择排名前1000的双词
def bigram:
 bigram_finder=bigramcollocationfinder.from_words #把文本变成双词搭配的形式
 bigrams = bigram_finder.nbest #使用卡方统计的方法,选择排名前1000的双词
 newbigrams = [u+v for  in bigrams] # bigrams知识个双词列表
 return bag_of_words #调用bag_of_words 变成{词:true}的字典
print[:5],score_fn=bigramassocmeasures.chi_sq,n=1000))
{'了电': true, '池不': true, '电池': true, '除了': true}
#把单个词和双个词一起作为特征
def bigram_words:
 bigram_finder=bigramcollocationfinder.from_words
 bigrams = bigram_finder.nbest
 newbigrams = [u+v for  in bigrams]
 word_dict = bag_of_words #单个字的字典
 bigrams_dict = bag_of_words#二元词组的字典
 word_dict.update #把字典bigrams_dict合并到字典word_dict中
 return word_dict
print[:10],score_fn=bigramassocmeasures.chi_sq,n=1000))
{'除': true, '了': true, '电': true, '池': true, '不': true, '给': true, '力': true, ' ': true, '都': true, '很': true, ' 都': true, '不给': true, 
'了电': true, '力 ': true, '池不': true, '电池': true, '给力': true, '都很': true, '除了': true}

import jieba
#结巴分词作为特征
def read_file: stop = [line.strip for line in open.readlines] #停用词 f = open line = f.readline str = [] while line: s = line.split#去掉换行符 #print#[' '] #print#[' '] fenci = jieba.cut #false默认值:精准模式 参数hmm=true时,就有了新词发现的能力 str.append-set)) line = f.readline return str #str 是一个整个评论的列表了


服务热线
在线咨询