【问题标题】:AttributeError: getfeature_names not found ; using scikit-learnAttributeError: getfeature_names not found ;使用 scikit-learn
【发布时间】:2015-10-16 11:02:41
【问题描述】:
from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
vectorizer = vectorizer.fit(word_data)
freq_term_mat = vectorizer.transform(word_data)

from sklearn.feature_extraction.text import TfidfTransformer

tfidf = TfidfTransformer(norm="l2")
tfidf = tfidf.fit(freq_term_mat)
Ttf_idf_matrix = tfidf.transform(freq_term_mat)

voc_words = Ttf_idf_matrix.getfeature_names()
print "The num of words = ",len(voc_words)

当我运行包含这段代码的程序时,出现以下错误:

Traceback(最近一次调用最后一次): 文件“vectorize_text.py”,第 87 行,在
voc_words = Ttf_idf_matrix.getfeature_names()
getattr
中的文件“/home/farheen/anaconda/lib/python2.7/site->packages/scipy/sparse/base.py”,第 499 行 raise AttributeError(attr + " not found")
AttributeError: get_feature_names not found

请给我一个解决方案。

【问题讨论】:

    标签: python scikit-learn tf-idf


    【解决方案1】:

    我发现您的代码存在两个问题。首先,您将 get_feature_names() 应用于矩阵输出,而不是矢量化器。您需要将其应用于矢量化器。其次,您不必要地将其分解为太多步骤。您可以使用 TfidfVectorizer.fit_transform() 在更小的空间内完成您想做的事情。试试这个:

    from sklearn.feature_extraction.text import TfidfVectorizer
    
    vectorizer = TfidfVectorizer()
    transformed = vectorizer.fit_transform(word_data)
    print "Num words:", len(vectorizer.get_feature_names())
    

    【讨论】:

      【解决方案2】:
      from sklearn.feature_extraction.text import TfidfVectorizer
      TfIdfer = TfidfVectorizer(stop_words = 'english')
      TfIdfer.fit_transform(word_data).toarray()
      names = TfIdfer.get_feature_names()
      

      【讨论】:

      • 考虑添加一些解释,说明您的代码的作用以及它回答问题的原因。
      【解决方案3】:

      不是get_feature_names(),即。 'get' 后加下划线。

      另外,我不确定您要做什么,但 get_feature_names 是一种仅对 *Vectorizer 类有效的方法,对 TfidTransformer 无效。 也许你想要 TfidVectorizer 代替?

      【讨论】:

      • 感谢您告诉我。我犯了错字错误(已更正为 get_feature_names()),但这不是问题。
      • 我已经尝试将 get_feature_names 与 Vectorizer 类一起使用。请参阅代码 vectorizer = CountVectorizer() `vectorizer = vectorizer.fit(word_data) freq_term_mat = vectorizer.transform(word_data) voc_words = freq_term_mat.get_feature_names() ` 但是有同样的错误 >AttributeError: get_feature_names not found
      • 抱歉,您的代码没有在上面显示。请修改/编辑,以便您澄清错误。从上面的 cmets 来看,您似乎没有正确使用该属性。 CountVectorizer 类的 freq_term_mat 是什么?看起来不像。
      • vectorizer = CountVectorizer()
      • vectorizer = vectorizer.fit(word_data)
      猜你喜欢
      • 2015-06-15
      • 1970-01-01
      • 2020-11-24
      • 2018-02-22
      • 2020-11-05
      • 2013-05-20
      • 2022-08-04
      • 2021-10-25
      • 1970-01-01
      相关资源
      最近更新 更多