2017-06-07 3 views
0

Hier ist, was meine Beispieldaten wie folgt aussieht:N-Gramm-Analyse in Python

enter image description here

I 1-2 Gramm auf Abfrage zur Durchführung benötigen, und berechnen Sie die Summe und durchschnittlich Eindruck bei den Anfragen zugeordnet . Jetzt habe ich herausgefunden, wie die Impressionen mithilfe der unten stehenden Codes aggregiert werden.

def n_grams(txt): 
grams = list() 
words = txt.split(' ') 
for i in range(len(words)): 
    for k in range(1, len(words) - i + 1): 
     grams.append(" ".join(words[i:i+k])) 
return pd.Series(grams) 


counts = df['query'].apply(n_grams).join(df) 
result = counts.drop("query", axis=1).set_index("impression").unstack() .rename("ngram").dropna().reset_index() .drop("level_0", 
axis=1).groupby("ngram")["impression"].sum() 
result = result.to_frame() 
result['query'] = result.index 
result['ngram'] =result['query'].str.split().apply(len) 
result = result.groupby(['ngram','query'])['impression'].sum() 
result = result.reset_index() 
result = result.sort_values(['ngram', 'impression'], ascending=[True, False]) 

Die Ergebnisse liefern wie:

enter image description here

Hier habe ich eine andere Spalte müssen mit dieser Abfragen zugeordnet, um die durchschnittlichen Eindruck zeigen. Zum Beispiel erscheint das Wort "Ernährung" viermal, also sollte die durchschnittliche Impression 100/4 = 25 sein. Außerdem möchte ich zeigen, wie oft diese Abfrage in einer anderen Spalte erscheint. Das Endergebnis sollte wie folgt aussehen: enter image description here

Antwort

0

Dieser Code wird Ihnen helfen, die Anzahl der Unigramme wie "Ernährung" von Bigrammen zu erhalten.

2gram=result[result['ngram']==2] 
2gram=2gram.reset_index() 
#create an empty dictionary to store count of words in bigrams 
words=dict() 
for i in range(0,len(2gram): 
    query_wrds=2gram.loc[i,'query'].split() 
     for item in query_words: 
      if item not in words: 
       words[item]=1 
      else: 
       words[item]+=1 
#to get count of word 'nutrition' 
nut_ct=words['nutrition']