2016-08-03 49 views
0

Ich habe ein Problem, das eigentlich sehr einfach mit NLTK lösen sollte. Ich fand eine Lösung für mein Problem, aber es verwenden sie nicht NLTK:Suche nach bestimmten Bigram mit NLTK Python 3

how can I count the specific bigram words?

Ist es möglich, mit einer NLTK Funktion zu tun?

Hier ist mein Code:

food = open("food_low.txt") 
lines = food.read().split(',')[:-1] 

raw = wordlists.words("cleaned2.txt") 
fdist = nltk.FreqDist(w.lower() for w in raw) 

with io.open('nltk1.txt', 'w', encoding="utf-8") as h: 
    for m in lines: 
     if fdist[m] > 0: 
      print(m + ':', fdist[m], end=' ', file = h) 

ich zu zählen, wie oft ich die Worte aus dem food_low.txt im cleaned2.txt erscheinen. Mein Problem ist, dass ich einige Bigram-Wörter in food_low.txt habe und sie nicht gezählt werden. Wie kann ich erreichen, dass es auch die Bigramme zählt?

Antwort

0

Sie könnten versuchen, Unigramm und Bigramm ohne NLTK und mit regulären Ausdrücken (re) zu zählen. Jetzt brauchen Sie nicht zwei separate Berechnungen, aber man kann es mit re.findall() in einem Rutsch tun:

import re 
import codecs 

# List of words and a sentence 
l = ['cow', 'dog', 'hot dog', 'pet candy'] 
s = 'since the opening of the bla and hot dog in the hot dog cow' 

# Make your own fdist 
fdist = {} 
for m in l: 
    # Find all occurrences of m in l and store the frequency in fdist[m] 
    fdist[m] = len(re.findall(m, s)) 

# Write the wordcounts for each word to a file (if fdist[m] > 0) 
with codecs.open('nltk1.txt', 'w', encoding='utf8') as out: 
    for m in l: 
     if fdist[m] > 0: 
      out.write('{}:\t{}\n'.format(m, fdist[m])) 

Inhalt des nltk1.txt:

cow: 1 
dog: 2 
hot dog: 2 

Hinweis: Wenn Sie NLTK verwenden, this answer might fulfill your needs .