2017-09-21 2 views
-3

テキスト文書から特徴抽出を学習しており、this tutorialが見つかりました。 3行目の末尾にあるnp.asarray(doc_counts.sum(axis=0)).ravel()が返ってくるのを理解できませんでした。私はこれをチェックし、数字のリストを返しました。私はそれが用語 - 頻度だと思うが、私は確信していない。Pythonのlambda関数で何が起こっていますか?

そして、idx: -1 * idx[1]が何をしているのですか?特に-1を掛けてください。 zip()関数にアクセス要素に関連付けられた.idxがあるが、見つからなかったかどうかを確認しました。

コード:

import numpy as np 
from sklearn.feature_extraction.text import CountVectorizer 

docs = <load your docs as an iterable> 

count_vect = CountVectorizer() 
doc_counts = count_vect.fit_transform(docs) 

word_counts = zip(count_vect.get_feature_names(), np.asarray(doc_counts.sum(axis=0)).ravel()) 
word_counts = sorted(word_counts, key=lambda idx: -1 * idx[1]) 

# Display top 100 words by frequency 
word_counts[:100] 

誰かがこれら二つのラインを説明してもらえます。

ありがとうございます。

+0

'word_counts'の各項目' idx'は '-1 * idx [1]'のようにソートされます。 – timgeb

+0

私は本当にこの質問に投票して下さった動機を理解していません。それは***の投票ボタン****をクリックすることが質問に答えるよりも簡単で、初心者をSOから遠ざけることができるからですか? –

+0

@OmPrakashあなたが単純なGoogle検索で簡単に答えられる質問でこのサイトを混乱させているので、下落はあります。 ["lambdaはソートされたpythonで何をするのですか"](https://stackoverflow.com/questions/8966538/syntax-behind-sortedkey-lambda) – gobrewers14

答えて

3

これは、基本的にソートの基礎として使用されるキーが-1*idx[1]であることを指定しています。 word_countの各要素には、それに続く頻度が続く単語が含まれています。だから、idx[1]と書くと、配列をソートするための基準として使用されている周波数にアクセスしています。私はそれに-1を掛けている理由は、デフォルトでは昇順にソートされているため、sorted()は+ veのリストに-1を掛けて昇順に並べ替えると、元のリストが降順で得られ、それはあなたが望むものであり、頻度の高い順に単語のリストです。

ラムダとキーの使い方については、ソートon this pageで詳しく読むことができます。

+1

良い説明! +1 –

関連する問題