python - 如何使用管道获取 CountVectorizer 的词汇
问题描述
通常,当我CountVectorizer
只使用时,我可以拥有可以将其用作新对象的参数的词汇表,以便CountVectorizer
在预测之前处理新数据
cv = CountVectorizer()
X = cv.fit_transform(corpus).toarray()
cv_dict = cv.vocabulary_
test_cv = CountVectorizer(vocabulary = cv_dict)
test_X= test_cv.fit_transform(test_corpus).toarray()
我想知道如何使用管道做同样的事情?我写这段代码开始
text_features = dataset['corpus']
text_transformer = Pipeline(
steps=[
('count', CountVectorizer()),
]
)
preprocessor = ColumnTransformer(
transformers=[
('text', text_transformer, text_features[0])
]
)
解决方案
创建test_cv
矢量化器的第一个代码片段过于复杂且不必要。它还可能提供您期望的不同向量。让我们首先简化它,管道部分将变得更容易。您创建了cv
对象并使用了它的fit_transform
功能。此函数使矢量化器适合数据。在这种情况下,这意味着它学习数据的词汇表并将其内部存储在vocabulary
实例变量中。然后它根据拟合时学习的词汇表转换输入数据。
如果您现在简单地transform
在同一个对象上调用该函数,它也会使用存储的词汇表来转换新数据。您无需创建新对象test_cv
并将旧词汇表传递给它。
cv = CountVectorizer()
X = cv.fit_transform(corpus).toarray()
test_X= cv.transform(test_corpus).toarray()
现在这被简化了,管道部分变得更容易理解。您的管道代码已经在其当前状态下工作(只要输入正确)。processor.fit(corpus)
如果您希望矢量化器学习词汇表,您现在可以调用。然后,您可以调用processor.transform(test_corpus)
以将矢量化器应用于 test_corpus。
推荐阅读
- jestjs - 如果不在手表模式下,为什么 Jest 测试会随机失败?
- css - 使用 CSS 网格移动特定元素?
- graphql - GraphQL Relay defaultValue 用于片段参数定义中的对象数组
- google-apps-script - 在谷歌工作表脚本中,我没有得到版本中单元格的当前值
- node.js - 当节点在路径中时,npm install 抱怨“节点”不被识别为内部或外部命令
- facebook - 如何使用 facebook 浏览器滚动?
- python - 无法让 .py 程序在 Windows 10 上正常运行(它们在 Windows 7 上运行良好)。可能是权限问题
- typescript - Protractor Headless Chrome 无法下载文件
- python - 如何使用python在给定一些条件的excel中获取名称字段?
- latex - Latex:描述列表 [style=nextline] 在包含枚举列表时无法按预期工作