Python 带json数组的单词包

Python 带json数组的单词包,python,classification,document-classification,Python,Classification,Document Classification,为了制作一个自定义的单词包,我正在尝试按照本教程进行操作 from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'All my cats in a row', 'When my cat sits down, she looks like a Furby toy!', 'The cat from outer space', 'Sunshine loves to sit like thi

为了制作一个自定义的单词包,我正在尝试按照本教程进行操作

from sklearn.feature_extraction.text import CountVectorizer

corpus = [
'All my cats in a row',
    'When my cat sits down, she looks like a Furby toy!',
    'The cat from outer space',
    'Sunshine loves to sit like this for some reason.'
]
vectorizer = CountVectorizer()
print( vectorizer.fit_transform(corpus).todense() )
print( vectorizer.vocabulary_ )
此脚本将打印以下内容:

[[1 0 1 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0]
 [0 1 0 1 0 0 1 0 1 1 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 1]
 [0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0]
 [0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 1 0 1 1 0 0]]
{u'all': 0, u'sunshine': 20, u'some': 18, u'down': 3, u'reason': 13, u'looks': 9, u'in': 7, u'outer': 12, u'sits': 17, u'row': 14, u'toy': 24, u'from': 5, u'like': 8, u'for': 4, u'space': 19, u'this': 22, u'sit': 16, u'when': 25, u'cat': 1, u'to': 23, u'cats': 2, u'she': 15, u'loves': 10, u'furby': 6, u'the': 21, u'my': 11}
我的问题是:我有一个json文件,它的数据结构如下:

[
    {
        "id": "1",
        "class": "positive",
        "tags": [
            "tag1",
            "tag2"
        ]
    },
    {
        "id": "2",
        "class": "negative",
        "tags": [
            "tag1",
            "tag3"
        ]
    }
]
因此,我尝试对标记数组进行矢量化,但没有成功

我试过这样的方法:

data = json.load(open('data.json'));
print( vectorizer.fit_transform(data).todense() )
此外:

for element in data:
print( vectorizer.fit_transform(element).todense() ) 
#or 
print( vectorizer.fit_transform(element['tags']).todense() ) 
没有人工作。有什么想法吗

一,。使用pandas将json文件读入
DataFrame
这是您的
数据帧
的外观:

Out[]:       
      class  id          tags
0  positive   1  [tag1, tag2]
1  negative   2  [tag1, tag3]
2.将标签列从
list
转换为
str
这将导致将
标记
转换为空格分隔的字符串:

Out[]:       
class  id       tags
0  positive   1  tag1 tag2
1  negative   2  tag1 tag3
3.将
标记
列/pandas
系列
插入
计数向量器
这将产生您想要的输出:

Out[]:       
[[1 1 0]
 [1 0 1]]
{'tag1': 0, 'tag2': 1, 'tag3': 2}

我无法要求一个更好更详细的答案。非常感谢,没问题!很乐意回答其他小问题。如果我想包含类作为向量的第一个位置?更具体地说,在我的示例中,类只有两个(正类和负类),但实际上我有两个以上的类。再次感谢你
Out[]:       
class  id       tags
0  positive   1  tag1 tag2
1  negative   2  tag1 tag3
vectorizer = CountVectorizer()
print(vectorizer.fit_transform(df['tags']).todense())
print(vectorizer.vocabulary_)
Out[]:       
[[1 1 0]
 [1 0 1]]
{'tag1': 0, 'tag2': 1, 'tag3': 2}