SVM - 将字符串传递给 Python 中的 CountVectorizer 以矢量化每个字符?

SVM - passing a string to the CountVectorizer in Python vectorizes each character?

我有一个工作的 SVM,当 transform 函数的输入是一个字符串列表时,CountVectorizer 工作正常。但是,如果我只将一个字符串传递给它,向量化器会遍历字符串中的每个字符并对每个字符进行向量化,即使我在构造 CountVectorizer 时将 analyzer 参数设置为 word .

for x in range(0,3):
        test=raw_input("Type a message to classify: ")
        v=vectorizer.transform(test).toarray()
        print(v)
        print(len(v))
        print(svm.predict(vectorizer.transform(test).toarray()))

我可以通过将上面代码中的第二行更改为来解决此问题:

test=[raw_input("Type a message to classify: ")]

但是有一个单项列表似乎很奇怪。有没有更好的方法不用构造列表就可以做到这一点?

它需要一个文档列表或数组,因此当您传入单个字符串时,它假定该字符串的每个元素都是一个文档(即:一个字符)。

尝试将 svm.predict(vectorizer.transform(test).toarray()) 更改为 svm.predict(vectorizer.transform([test]).toarray())

PS:当您使用 real-world 语料库时,toarray() 部分无法很好地扩展。 sklearn 中的 SVM 可以在稀疏矩阵上运行,所以我会把那部分放在一起。