2016-06-04 17 views
0

Ich versuche zu zählen, wie oft ein Wort in einer Dict-Spalte existiert, basierend auf einer Teilmenge interessierter Wörter.Python: Anzahl der Vorkommen in dict aus einer anderen Liste

Zuerst habe ich importieren meine Daten

products = graphlab.SFrame('amazon_baby.gl/') 
products['word_count'] = graphlab.text_analytics.count_words(products['review']) 
products.head(5) 

Daten sind hier zu finden: https://drive.google.com/open?id=0BzbhZp-qIglxM3VSVWRsVFRhTWc

ich dann erstellen Liste von Wörtern Ich bin interessiert an:

words = ['awesome', 'great', 'fantastic'] 

Ich möchte zählen die Häufigkeit, mit der jedes Wort in "Wörtern" in den Produkten ['word_count'] auftritt.

Ich bin nicht mit Graphlab verheiratet. Es wurde mir nur von einem Kollegen vorgeschlagen.

+0

Willkommen bei SO. Wir würden gerne Beweise für Ihre Bemühungen sehen, Ihren Code zu vervollständigen. Wie es scheint, haben Sie die bloße Struktur und wissen nicht, wie Sie es vervollständigen, wofür SO nicht ist. Bitte lesen Sie "[fragen]" einschließlich der Links und "[mcve]". Ich würde auch empfehlen, http://meta.stackoverflow.com/q/261592/128421 zu lesen. –

Antwort

1

Nun, ich bin mir nicht sicher, was Sie mit "in einer Dict-Spalte" meinen. Wenn es eine Liste:

import operator 
dictionary={'texts':['red blue blue','red black','blue white white','red','white','black','blue red']} 
words=['red','white','blue'] 
freqs=dict() 
for t in dictionary['texts']: 
    for w in words: 
     try: 
      freqs[w]+=t.count(w) 
     except: 
      freqs[w]=t.count(w) 
top_words = sorted(freqs.items(), key=operator.itemgetter(1),reverse=True) 

Wenn es nur ein Text ist:

import operator 
dictionary={'text':'red blue blue red black blue white white red white black blue red'} 
words=['red','white','blue'] 
freqs=dict() 
for w in words: 
    try: 
     freqs[w]+=dictionary['text'].count(w) 
    except: 
     freqs[w]=dictionary['text'].count(w) 
top_words = sorted(freqs.items(), key=operator.itemgetter(1),reverse=True) 
1

Wenn Sie Vorkommen von Wörtern zu zählen, ein schneller Weg, es zu tun ist, Counter von collections Objekt zu verwenden

Zum Beispiel:

In [3]: from collections import Counter 
In [4]: c = Counter(['hello', 'world']) 

In [5]: c 
Out[5]: Counter({'hello': 1, 'world': 1}) 

Könnte y Oder zeigen Sie die Ausgabe Ihres products.head(5) Befehls?

0

Versuchen Sie folgendes:

wc = {} 
    for word in products['word_count'].values: 
     if word in words:    
      if word not in wc: wc[word] = 1 
      else:    wc[word] += 1 

    print wc 
1

Wenn Sie mit graphlab (oder SFrame) halten, verwenden Sie die SArray.dict_trim_by_keys Methode. Die Dokumentation ist hier: https://dato.com/products/create/docs/generated/graphlab.SArray.dict_trim_by_keys.html

import graphlab as gl 
sf = gl.SFrame({'review': ['what a good book', 'terrible book']}) 
sf['word_bag'] = gl.text_analytics.count_words(sf['review']) 

keywords = ['good', 'book'] 
sf['key_words'] = sf['word_bag'].dict_trim_by_keys(keywords, exclude=False) 
print sf 

+------------------+---------------------+---------------------+ 
|  review  |  word_bag  |  key_words  | 
+------------------+---------------------+---------------------+ 
| what a good book | {'a': 1, 'good':... | {'good': 1, 'boo... | 
| terrible book | {'book': 1, 'ter... |  {'book': 1}  | 
+------------------+---------------------+---------------------+ 
[2 rows x 3 columns]