2017-09-27 4 views
2
def getWordFreq(corpus): 

    wordFreq = [] 
    for sent in corpus: 
     for word in sent: 
      wordFreq.append((word, sent.count(word))) 
    return wordFreq 

コーパス内の各単語の頻度を取得するためにこの関数を書きました。それをテストする文のリストの単語頻度を取得しますが、結合しません。 (Python)

が、私は

cc = [ ['hi','ho'], ['hee','ho']] 
getWordFreq(cc) 

を書いたが、これは代わりの
[('hi', 1), ('ho', 1), ('hee', 1), ('ho', 1)] 

を返された( 'HO'、2)。

私には何が欠けていますか?あなたはこの作業のために辞書を使用したほうが良いと思います

from collections import Counter 
def getWordFreq(corpus): 
    wordFreq = [j for i in corpus for j in i] 
    return list(Counter(wordFreq).items()) 
+0

'カウントは+ = 1 '(そう'カウントは+ = sent.count(ワード) ')?最後に最初の値を変更し、追加しません! – dsgdfg

+0

**は一体何を意味するのですか? – RomanPerekhrest

+0

'コーパス'全体に含まれていない 'sent'の各単語をカウントしています – Unni

答えて

1

希望を与えます。ここではforを使用しています。

Try this code snippet here

def getWordFreq(corpus): 
    result = {} 
    for data in corpus: 
     for word in data: 
      if word in result: 
       result[word] += 1 #adding result in the dictionary 
      else: 
       result[word] = 1 

    return result.items() #returning items 

cc = [['hi', 'ho'], ['hee', 'ho']] 
print(getWordFreq(cc)) 

出力:[('hee', 1), ('hi', 1), ('ho', 2)]

+1

このアプローチに従えば、' defaultdict'ははるかにエレガントです。 – Unni

1

あなたはこのソリューションを試すことができます対応する周波数)。この方法では、単語のマージに対処する必要がないので、頻度を把握するのが簡単かつ迅速になります。

あなたの実装では、単語とその頻度からなるタプルが文の中にの結果として追加されます。それは言葉を一緒に結合せず、あなたのための周波数を追跡しません。

Pythonのcollectionsモジュールは、このタイプのもののために設計されたCounterも提供しています。

from collections import Counter 
def getWordFrequency(corpus): 
    freq = Counter() 
    for sentence in corpus: 
     for word in sentence: 
      freq[word] += 1 
    return freq 

我々はCounterが私たちのためにそれを処理するための単語は、既にカウンターに存在しているかどうかを確認する必要がないことに注意してください。

+0

@EricDuminil ye、あなたは正しいです – AndMar

0

def getWordFrequency(corpus): 
    frequencies = {} 
    for sentence in corpus: 
     for word in sentence: 
      if word in frequencies: 
       frequencies[word] += 1 
      else: 
       frequencies[word] = 1 
    return frequencies 

辞書は(キーと値(ワード)からのマッピングを保持する

0

あなたがしたい場合は、私は私のコメントで述べたように、あなたはここで全体corpussentないで各単語を数えていることは、あなたが

def getWordFreq(corpus): 
     wordFreq = [] 
     for sent in corpus: 
      for word in sent: 
       wordFreq.append((word, sum(map(lambda x: x.count(word), corpus)))) 
     return wordFreq 


cc = [ ['hi','ho'], ['hee','ho']] 
getWordFreq(cc) 

を行うために必要なものである

[('hi', 1), ('ho', 2), ('hee', 1), ('ho', 2)] 

を与えます各単語を1度だけ印刷する場合は、wordFreqsetに変更し、append

の代わりに addを使用してください
def getWordFreq(corpus): 

    wordFreq = set() 
    for sent in corpus: 
     for word in sent: 
      wordFreq.add((word, sum(map(lambda x: x.count(word), corpus)))) 
    return wordFreq 

cc = [ ['hi','ho'], ['hee','ho']] 
getWordFreq(cc) 

は、この最も簡単な1が参考になります

{('hee', 1), ('hi', 1), ('ho', 2)} 
関連する問題