python - 使用sklearn提取一个中文句子的特征时出现错误

标签 python text scikit-learn feature-extraction

我想用有限的词汇量提取中文句子的特征,但我没有得到中文单词的特征,只得到“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()) 返回 [[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,'')

关于python - 使用sklearn提取一个中文句子的特征时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43682210/

相关文章:

python - blog.Post : (models. E014) 'ordering' 必须是元组或列表(即使您只想按一个字段排序)。在 Django

qt - 如何使链接在QTextEdit中可点击?

python - 删除应用后无法删除用户

html - CSS3 文本渐变不起作用?

regex - 解析二维文本

python - 在 scikit-learn 中训练神经网络计算 'XOR'

python - 使用稀疏矩阵与 sklearn 亲和性传播

python - Scikit Learn 朴素贝叶斯

python - 为什么这段代码在虚拟机中产生不同的值?

python - 在 python 中追加表(不同的行号)以实现可视化目的