python - 基于词汇和正则表达式矢量化文档
问题描述
我正在尝试使用 sklearn 的 CountVectorizer 训练文本分类器。问题是我的训练文档有许多特定于文档的标记。因此,例如,CountVectorizer.fit_transform 方法可以很好地处理常规的英语单词,但是有些标记的格式适合正则表达式:'\w\d\d\w\w\d',例如作为“d84ke2”。就像现在一样,fit_transform 方法只会将“d84ke2”的面值作为特征使用。
我希望能够使用那些与特定正则表达式匹配的特定标记作为他们自己的特征,并将常规英语单词作为他们自己的特征,因为创建诸如“d84ke2”之类的特征将是无用的,因为这不会再次出现在任何其他文件中。
我还没有找到一种方法来做到这一点,更不用说“最好”的方法了。下面是我的代码示例,您可以在其中看到标记“j64ke2”、“r32kl4”、“w35kf9”和“e93mf9”都变成了它们自己的特征。为了清楚起见,我重复一遍:我想基本上将这些功能浓缩成一个并保留其他功能。
docs = ['the quick brown j64ke2 jumped over the lazy dogs r32kl4.',
'an apple a day keeps the w35kf9 away',
'you got the lions share of the e93mf9']
import numpy as np
# define target and target_names
target_names = ['zero', 'one', 'two']
target = np.array([0, 1, 2])
# Create message bunch.
from sklearn.utils import Bunch
doc_info = Bunch(data=docs, target=target, target_names=target_names)
# Vectorize training data
from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
count_vect.fit(doc_info.data)
vocab = count_vect.vocabulary_
vocab_keys = list(vocab.keys())
#vocab_vals = list(vocab.values())
X_train_counts = count_vect.transform(doc_info.data)
X = X_train_counts.toarray()
import pandas as pd
df = pd.DataFrame(X, columns=vocab_keys)
解决方案
yatu的评论是一个很好的解决方案。CountVectorizer
通过为每个匹配的正则表达式替换一个单词,我能够在输入文档之前对其进行清理 。
推荐阅读
- arrays - 如何在 Dart 中将地图添加到列表中
- c# - C# 中有 netstat 命令的替代方法吗?
- python - 没有 pycharm 重新开始
- python - 如何使用 Python 3 在 Jupyter Notebook 中过滤特定数量的行?
- javascript - 当我似乎只发送一个标头时,ExpressJS 抛出多个标头错误
- javascript - 模拟子组件 - 多个组件匹配节点与标记名错误
- asp.net - 在同一个 asp.net Web 应用程序中使用两个 Owin 身份
- python - Python 生成的 lzma 文件缺少未压缩的大小
- php - 在 PHP 中循环 fputcsv 的问题,我该如何解决?
- c++ - 复制“向量”数组:通过 memcpy 还是迭代每个?