2016-12-23 4 views
2

私は文章でいっぱいのテキストファイルに対してデータクリーニング作業を行っています。これらの文章を間違えた後、私はその単語の出現頻度を私の出てきたリストに入れたいと思っています。しかし、私は、茎のリストを印刷するときのような問題に遭遇stem_listています、私はそうのように、すべての文のためのリストを取得しています:Pythonでステミングした後の単語の頻度を調べる

[u'anyon', u'think', u'forgotten', u'day', u'parti', u'friend', u'friend', u'paymast', u'us', u'longer', u'memori'] 

[u'valu', u'friend', u'bought', u'properti', u'actual', u'relev', u'repres', u'actual', u'valu', u'properti'] 

[u'monster', u'wreck', u'reef', u'cargo', u'vessel', u'week', u'passeng', u'ship', u'least', u'24', u'hour', u'upload', u'com'] 

私はすべての単語の頻度を取得したいと思いますが、私は唯一取得しています以下のコードを使用して、文あたり周波数:

fdist = nltk.FreqDist(stem_list) 
    for word, frequency in fdist.most_common(50): 
     print(u'{};{}'.format(word, frequency)) 

これは以下の出力を生成している。 友人; 2 paymast 1 もう1 memori 1 パルティ。 1 たち; 1 日; 1 エニオン;忘れて1 ; 1つの と思うが、実際に1 ; 2 properti; 2 VALU; 2 友人; 1 repres; 1 relev; 1 買いました。 1 週1つの 貨物1つの モンスター1 時間; 1つの 残骸; 1つの アップロード1 passeng;少なくとも1 1つの リーフ1 24; 1つの 容器1 船; 1 COM; 1 内; 1 エリア; 1 territori; 1 カスタム; 1 水; 1 3;それが2であるので、1

は、単語 '友人' を二度カウントされています異なる文章。私はそれを友人に一度カウントさせて友人を表示させるにはどうすればいいのですか?

stem_list = [inner for outer in stem_list for inner in outer] 

を、あなたが行うのと同じ方法で処理する:

+2

あなたはdefinitvelyユーザーが定義 –

+0

道をhttps://docs.python.org/2/library/collections.html#collections.Counterを見ている必要があります'stem_list'の構文が無効です。有効な定義を入力してください。 – trincot

答えて

0

ちょうど1つのリストですべてを連結できます。

それ以外の場合は、同じコードを使用することもできますが、印刷する代わりにdictを作成して、値を入力してください。新しい言葉を得るたびに、キーを作成してから値を追加します。

all_words_count = dict() 
for word, frequency in fdist.most_common(50): 
    if word in all_words_count : # Already found 
     all_words_count[word] += frequency 
    else : # Not found yet 
     all_words_count[word] = frequency 

for word in all_words_count : 
    print(u'{};{}'.format(word, all_words_count[word])) 
+0

私はそれをやろうとしましたが、それぞれの文字を別々に印刷することになりました。[u'a '、u'n'、u'y '、u'o'、u'n '、u't'ええ、ええ、ええ、ええ、ええ、ええ、あなたには、あなたのために、私たちは、 'u'i'、u'f '、u'r'、u'i '、u'e'、u'n '、u'd'、u'f '、u'r'、u'i 'あなたには、あなたの人生を変えることができます。私は、あなたには、あなたの恋人と一緒に、 、u'o '、u'r'、u'i '] –

+0

stem_listとは何ですか?それはリストのリストですか?あなたの投稿の構造ははっきりしていません。 – iFlo

+0

申し訳ありませんが、前にテキストファイル(文章を含む)をトークン化していたので、それらは単語ベクトルです。 –

0

最も簡単な方法は、配列を関数に渡す前に組み合わせることです。

allwords = [inner for outer in stem_list for inner in outer] 

fdist = nltk.FreqDist(allwords) 
    for word, frequency in fdist.most_common(50): 
     print(y'{};{}'.format(word, frequency)) 

または短い:そうあなたは二つの配列持ち

stem_list = [[u'anyon', u'think', u'forgotten', u'day', u'parti', u'friend', u'friend', u'paymast', u'us', u'longer', u'memori'], 

      [u'valu', u'friend', u'bought', u'properti', u'actual', u'relev', u'repres', u'actual', u'valu', u'properti'], 

      [u'monster', u'wreck', u'reef', u'cargo', u'vessel', u'week', u'passeng', u'ship', u'least', u'24', u'hour', u'upload', u'com'], 

      [.....], etc for the other sentences ] 

- 最初sentenc内の単語のための文章と第二のために:

fdist = nltk.FreqDist([inner for outer in stem_list for inner in outer]) 
    for word, frequency in fdist.most_common(50): 
     print(y'{};{}'.format(word, frequency)) 

私はあなたの入力がどのように見えると思います。 allwords = [inner in outer for stem_listの外側のインナー]を使用すると、文章を実行して単語の1つの配列として結合します。

+0

'allwords = [sent in stem_list]'は何もしません。内側のリストを取得し、それをリストに入れます。 'stem_list'は' allwords'でも参照されている点を除いて同じです。 – iFlo

+1

ありがとう、iFloで修正しました - それをチェックしてはいけません。 –

関連する問題