首页 > 解决方案 > 带有外来符号的 Countvectorizer 在词汇词典中提供交换的键值

问题描述

我正在使用CountVectorizer

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
series = pd.Series(["abc", "aaa"])
CountVectorizer(analyzer='char').fit(series).vocabulary_

这会产生一个词汇表,其中字母作为键,词汇表中的索引作为值:

{'a': 0, 'b': 1, 'c': 2}

现在让我们添加一些外国(阿拉伯?)字符:

series = pd.Series(["d'ا'ر'م'ی'ن'abc", "aaa"])
CountVectorizer(analyzer='char').fit(series).vocabulary_

{'d': 4,
 "'": 0,
 'ا': 5,
 'ر': 6,
 'م': 7,
 'ی': 9,
 'ن': 8,
 'a': 1,
 'b': 2,
 'c': 3}

看看键和值是如何交换外来字符的,所以字符和索引是交换的。发生了什么?看起来是因为在某些语言中人们从右到左阅读?这是 Python 字典行为的一部分吗?

标签: pythonscikit-learntext-mining

解决方案


键和值实际上没有交换。打印字典时,这只是一个视觉“错误”。

当您定义这样的字典时:

dict = {'d': 4,
 "'": 0,
 'ا': 5,
 'ر': 6,
 'م': 7,
 'ی': 9,
 'ن': 8,
 'a': 1,
 'b': 2,
 'c': 3}

您仍然可以使用相应的键访问其中一个元素的值:

dict['م']

这给了你预期的结果:

7


推荐阅读