【问题标题】:How to make CountVectorizer not segment features names?如何使 CountVectorizer 不分割特征名称?
【发布时间】:2020-10-02 03:38:28
【问题描述】:

我在数据框中有一列如下所示:

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']

因为它们在列中而没有在分隔符处被分割,例如“。”

我该怎么做?

【问题讨论】:

    标签: python pandas dataframe machine-learning countvectorizer


    【解决方案1】:

    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 只会考虑这种特定模式的令牌。

    【讨论】:

      猜你喜欢
      • 2016-05-30
      • 2019-02-16
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 2022-11-07
      • 2015-10-12
      • 2022-11-25
      • 2012-12-17
      相关资源
      最近更新 更多