2017-11-02 6 views
2

私はまだPythonに関する知識が増えていますが、TfidfVectorizerに固執しています。私は他のいくつかの質問を見てきましたが、今まで私を助けてくれたものは見つかりませんでした。フィッティングTfidfVectorizer - AttributeError/TypeError

私は製品の説明のリストのためにtfidf_matrixを作成しようとしていますが、私は失敗しています。ここで

は私のコードです:

import nltk 
import numpy as np 
import pandas as pd 
from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.feature_extraction.text import TfidfVectorizer 

# Make tokens per line 

dataset = pd.read_csv('Cleansed Data.csv', delimiter=';', encoding='latin1') 
tokens = dataset['Description'].apply(nltk.word_tokenize) 
tokens_line = pd.DataFrame(np.array(tokens).reshape(len(tokens), 1), 
columns=['tokens']) 
tokens_line_lists = tokens_line.values.tolist()  

# Get unique tokens 

Filename = open('descriptions for tokens.txt') 
vectorizer = CountVectorizer() 
dtm = vectorizer.fit_transform(Filename) 
vocab = vectorizer.get_feature_names() 
tokens_unique = pd.DataFrame(np.array(vocab).reshape(len(vocab), 1), 
columns=['tokens']) 

#TF-IDF Vectoriser 

tfidf_vectoriser = TfidfVectorizer(max_df=0.8, max_features=20000, 
min_df=0.2, use_idf=True, tokenizer=tokens_unique, ngram_range=(1,3)) 

tfidf_matrix = tfidf_vectoriser.fit_transform(tokens_line) 

私は(トークン)でfit_transformをやってみました、私は次のエラーを取得する:(tokens_line)とfit_transformで

AttributeError: 'list' object has no attribute 'lower' 

私が手:

TypeError: 'DataFrame' object is not callable 

(tokens_line_lists)を使用してfit_transformを取得しました。

AttributeError: 'list' object has no attribute 'lower' 
+0

「tokens.txtの説明」はどの形式ですか? – Peter

+0

Cleaned Data.csvとtokens.txtの説明は同じテキストです。どちらも文字と数字の混合物です。 –

答えて

0

なぜこれだけではないのですか?

import numpy as np 
import pandas as pd 
from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.feature_extraction.text import TfidfVectorizer 

dataset = pd.read_csv('Cleansed Data.csv', encoding='latin1') 
tokenlinelist = dataset['Description'].tolist() 

tfidf_vectoriser = TfidfVectorizer(max_df=0.8, max_features=20000, 
min_df=0.2, use_idf=True, ngram_range=(1,3)) 

tfidf_matrix = tfidf_vectoriser.fit_transform(tokenlinelist) 
+0

ありがとうございますが、私はまだKeyError: 'Description'を取得しています。私はTfidfVecotorizerにそれに与えられた別個のトークンを持たせる必要があると思ったのですか? –

+0

KeyError:説明は、あなたのデータに、スクリプトが参照しようとしているdescriptionという名前のフィールドがないことを意味します。私は自分のデータを持っていないので、あなたが読んでいるものを見ることができません。あなたのコードの10行目で 'Description'を使ったので、私は、あなたのデータには、その権利があるコラムがあると仮定しました。ドキュメントから。デフォルトのトークナイザを使いたくない場合は、トークンを与える必要があると思います。 – Peter

+0

これは奇妙なことですが、Descriptionという列があります。データを共有することはできませんが、「部品番号」と「説明」の2つの列を持つCSVファイルです。 –

関連する問題