我在数据帧中有一列看起来像这样:
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
只会考虑此特定模式的令牌。