如何使计数矢量化器不分割特征名称?



我在数据帧中有一列看起来像这样:

df = pd.DataFrame({"Receiver_email_root": ["idatta.91", "datta.indrajeet", "indiejesse.d", "idatta.91"]})

在该列上应用 CountVectorizer 然后打印出特征名称后,我得到的特征名称如下所示:

Receiver_email_root feature names:  ['91', 'datta',  'idatta', 'indiejesse', 'indrajeet', 'd']

但我希望 CountVectorizer 的特征名称考虑如下:

Receiver_email_root_feature_names : ['idatta.91', 'datta.indrajeet', 'indiejesse.d']

因为它们在列中,没有在分隔符(如".">

我该怎么做?

scikit-learn提供的CountVectorizer具有一个token_pattern参数,即

默认正则表达式选择包含 2 个或更多字母数字字符的标记(标点符号被完全忽略,并始终被视为标记分隔符(。

您可以通过指定自己的正则表达式来更改此行为:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer

count_vect = CountVectorizer(token_pattern=r'w+.w+')
df = pd.DataFrame({"Receiver_email_root": ["idatta.91", "datta.indrajeet", "indiejesse.d", "idatta.91"]})
vector = pd.DataFrame(count_vect.fit_transform(df["Receiver_email_root"]).toarray())
vector.columns = count_vect.get_feature_names()

当您检查vector.columns.values时,您将获得

['datta.indrajeet' 'idatta.91' 'indiejesse.d']

不过,您必须小心这一点,因为现在CountVectorizer只会考虑此特定模式的令牌。

最新更新