2017-09-26 10 views
1

'not in stop'メソッドを追加するとソートされないリストの理解度が得られます。基本的には、このNLTKのストップワードを含めると、以前は持っていたソート機能が失われます。誰かが私が間違っていたことを指摘できますか?ソートされたキー値ラムダが動作しない

ここでは、参照のためにコードにすべてを含めました。

EDITEDは:/

('white', 'people') 4362 
('.', 'i') 3734 
('in', 'the') 2880 
('of', 'the') 2634 
('to', 'be') 2217 
('all', 'white') 1778 

'ではない停止で' なし

('or', 'irish') 3 
('put', 'one') 1 
('was', 'repealed') 1 
('please', '?') 6 
('contact', 'your') 2 
('wear', 'sweats') 1 

'ではない停止で' あなたが見ることができるようにソートwはここで

from nltk import word_tokenize 
from nltk.corpus import stopwords 
import string 

stop = stopwords.words('english') + list(string.punctuation) 
f = open('review_text_all.txt', encoding="utf-8") 
raw = f.read().lower().replace("'", "").replace("\\", "").replace(",", 
"").replace("\ufeff", "") 

tokens = nltk.word_tokenize(raw) 

bgs = nltk.bigrams(tokens) 

fdist = nltk.FreqDist(bgs) 
for (k,v) in sorted(fdist.items(), key=lambda x: (x[1] not in stop), 
reverse=True): 
    print(k,v) 

は私の結果であり、作品は、一度だけ私は '停止していない'を削除する

+2

'fdist'とどのようなご希望のソートされた出力は何ですか?最小の例を含める –

+1

あなたの入力と希望の出力を投稿してください。 – Ajax1234

+0

リストの並べ替えやフィルタリングを行いますか?ブール値の基準で並べ替えることは、あなたが期待するものをほぼ確実に生成しないためです。 – Guillaume

答えて

4

keyのパラメータthe sorted methodは、どのキー(リストの項目に関連する属性/値)をソートするかをpythonに指示する機能です。実際にソートを行うための良好な値:)

EDITではありません

あなたのケースでは、あなたの関数は、TrueまたはFalseを返します....:

私はあなたがしたいものの理解何から達成するためには、あなたの "ストップワード"リストにある項目をあなたのリストから削除するように、前に(または後に)filter methodを追加する必要があります。このような

何か:

for (k,v) in sorted(filter(lambda x: (x[1] not in stop), fdist.items()), key=lambda x: x[1], reverse=True): 
    print(k,v) 
+0

それは働いていましたが、私が必要としていた方法と正確には一致しませんでした。それはキーでソートされていましたが、実際には値を高いものから低いものにソートする必要があります。 – M4cJunk13

+0

@ M4cJunk13私は(自分の思う)正しい比較方法(単語の出現頻度に基づいて)で私の答えを更新しました –

+0

完璧、それは働いた!どうもありがとうございます。私はまだラムダの使用をよりよく理解しようとしています。 – M4cJunk13

関連する問題