首页 > 解决方案 > 基于词汇和正则表达式矢量化文档

问题描述

我正在尝试使用 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)

标签: pythonscikit-learnnlpcountvectorizerre

解决方案


yatu的评论是一个很好的解决方案。CountVectorizer通过为每个匹配的正则表达式替换一个单词,我能够在输入文档之前对其进行清理 。


推荐阅读