使用sklearn提取一个中文句子的特征时会出错

时间:2017-04-28 14:07:18

标签: python text scikit-learn feature-extraction

我想用有限的词汇提取中文句子的特征,但我没有中文单词的功能,只有2015年的功能,它很混乱。< / p>

这是我的代码

# -*- coding:utf-8 -*-  

from sklearn.feature_extraction.text import CountVectorizer

#load dictionary
dic_file = open("/home/xcy/graduation-design/YangBen/dict.txt")
pn_dict = [ line.strip()for line in dic_file]

vectorizer = CountVectorizer(tokenizer=lambda x: x.split(), vocabulary=pn_dict, binary=True)

#load training data
train_file = open("/home/xcy/graduation-design/YangBen/1k.txt")
train_sentence = [ line.strip()  for line in train_file  if line.strip() != "" ]

X = vectorizer.transform(train_sentence)

print(X.toarray())

#print(train_sentence[0].split()[0])

#print(vectorizer.vocabulary_.get('下降'))

#for i in vectorizer.get_feature_names():
#       print(i)

/home/xcy/graduation-design/YangBen/dict.txt

下降
公司
2015

/home/xcy/graduation-design/YangBen/1k.txt

2015 年 三 季度 报 发现 , 虽然 华策 影视 等 公司 的 净利润 同比 有所 下降

我的代码输出是

[[0 0 1]]

在预期输出后,第一个&#39; 1&#39;为了&#39;下降&#39; ,第二&#39; 1&#39;为&#39;公司&#39;

[[1 1 1]]

上面的所有三个文件都是utf-8,在vim中观看(:set fileencoding)

ENV:

Ubuntu16.04,

Python 2.7.12,

virtualenv 15.1.0,

刚刚安装了scikit-learn(pip install -U scikit-learn )yeserday

1 个答案:

答案 0 :(得分:1)

根据我的评论中的建议,您可能希望从Router::connectNamed( false, // no custom named parameters array( 'default' => true, // default pagination parameters 'greedy' => false // no greediness ) ); 替换行

解码您的行
utf8

代表

pn_dict = [ line.strip()for line in dic_file]
[...]
train_sentence = [ line.strip()\
                   for line in train_file if line.strip() != "" ]

哪个应该ENC = 'utf8' pn_dict = [line.decode(ENC).strip()\ for line in dic_file] [...] train_sentence = [line.decode(ENC).strip()\ for line in train_file if line.strip() != "" ] pn_dict = [line.decode(enc).strip()\ for line in dic_file] 返回print(X.toarray())

因为我怀疑BOM位于文件的开头[[0 1 1]] 您也可以删除它,

"dict.txt"

对于健壮性,您也应该对其他文件执行操作,如下所示

BOM = u'\ufeff'
[...]
pn_dict[0] = pn_dict[0].replace(BOM,'')