使用sklearn提取一个中文句子的特征时出错
get error when extracting feature of one Chinese sentense using sklearn
我想用有限的词汇提取中文句子的特征,但是我没有得到中文单词的特征,只得到了'2015'的特征,这很混乱。
这是我的代码
# -*- 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]]
虽然下面的输出是预期的,第一个'1'代表'降',第二个'1'代表'公司'
[[1 1 1]]
以上三个文件都是utf-8,在vim(:set fileencoding)
中观看
环境:
Ubuntu16.04,
Python 2.7.12,
虚拟环境 15.1.0,
刚刚安装了 scikit-learn(pip install -U scikit-learn
) 昨天
正如我评论中所建议的那样,您可能希望从 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())
return [[0 1 1]]
并且因为我怀疑 BOM 位于文件的开头 "dict.txt"
你也可以删除它,做
BOM = u'\ufeff'
[...]
pn_dict[0] = pn_dict[0].replace(BOM,'')
为了健壮性,你也应该对另一个文件做同样的事情,如下
train_sentence[0] = train_sentence[0].replace(BOM,'')
我想用有限的词汇提取中文句子的特征,但是我没有得到中文单词的特征,只得到了'2015'的特征,这很混乱。
这是我的代码
# -*- 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]]
虽然下面的输出是预期的,第一个'1'代表'降',第二个'1'代表'公司'
[[1 1 1]]
以上三个文件都是utf-8,在vim(:set fileencoding)
中观看环境:
Ubuntu16.04,
Python 2.7.12,
虚拟环境 15.1.0,
刚刚安装了 scikit-learn(pip install -U scikit-learn ) 昨天
正如我评论中所建议的那样,您可能希望从 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())
return [[0 1 1]]
并且因为我怀疑 BOM 位于文件的开头 "dict.txt"
你也可以删除它,做
BOM = u'\ufeff'
[...]
pn_dict[0] = pn_dict[0].replace(BOM,'')
为了健壮性,你也应该对另一个文件做同样的事情,如下
train_sentence[0] = train_sentence[0].replace(BOM,'')