Sklearn の TfidfVectorizer オブジェクトを使用して取得した疎行列があります。
vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word', vocabulary=my_vocab, stop_words='english')
tfidf = vect.fit_transform([my_docs])
疎行列は次のとおりです(一般性のために数字を取り出しています):
<sparse matrix of type '<type 'numpy.float64'>'
with stored elements in Compressed Sparse Row format>]
各行の数値を取得して、探している用語がドキュメントにどの程度含まれているかを確認しようとしています。どの単語が含まれているかはあまり気にしません。含まれている単語の数を知りたいだけです。だから、それぞれのノルムまたはrow*row.Tを取得したい. ただし、これを取得するために numpy を使用するのは非常に困難です。
私の最初のアプローチは、単に行うことでした:
tfidf[i] * numpy.transpose(tfidf[i])
ただし、numpy は明らかに 1 次元未満の配列を転置しないため、ベクトルが 2 乗されます。だから私はやってみました:
tfidf[i] * numpy.transpose(numpy.atleast_2d(tfidf[0]))
しかし、 numpy.transpose(numpy.atleast_2d(tfidf[0])) はまだ行を転置しません。
私は行のノルムを取得しようとしました(とにかくそのアプローチの方がおそらく優れています)。私の最初のアプローチは、numpy.linalg を使用することでした。
numpy.linalg.norm(tfidf[0])
しかし、それは私に「寸法の不一致」エラーを与えました。そこで、手動でノルムを計算しようとしました。変数を疎行列の numpy 配列バージョンに等しく設定し、最初の行の len を出力することから始めました。
my_array = numpy.array(tfidf)
print my_array
print len(my_array[0])
my_array は正しく出力されますが、len にアクセスしようとすると、次のように表示されます。
IndexError: 0-d arrays can't be indexed
fit_transform によって返される疎行列の各行の数値を取得したいだけです。規範を取得するのが最善でしょう。ここで何か助けていただければ幸いです。