2016-03-20 8 views
3

Wie würde ich nach einem Bigramm in einer Liste suchen? Zum Beispiel, wenn ich dieBigrams in einer Liste von Worrs finden

bigram = list(nltk.bigrams("New York")) 

In einer Liste von Wörtern,

words = nltk.corpus.brown.words(fileids=["ca44"]) 

Ich habe versucht zu tun,

for t in bigram: 
     if t in words: 
      *do something* 

Wie auch,

if bigram in words: 
    *do something* 
finden wollte

Antwort

2

.bigrams() wird einen Generator von t zurückgeben Uples. Sie sollten die Tupel zuerst in Strings konvertieren. Zum Beispiel:

bigram_strings = [''.join(t) for t in bigram] 

dann können Sie

for t in bigram_strings: 
    if t in words: 
     *do something* 
+0

Sorry vielleicht meine Frage ist nicht klar genug: S, was ich danach bin, ist in der Lage zu finden, wo es gibt ('New', 'York') zusammen. Was Sie vorgeschlagen haben, obwohl gute Drucke 'Newyork' – seus

+0

Dann sind Sie besser mit @ L3viathan Antwort, aber ich denke, Sie sollten 'für bigram in nltk.bigrams ([" New "," York "]):' dann. – Selcuk

1

tun können Sie einen Generator schreiben, die Bigramme für Ihre Wortliste ergibt:

def pairwise(iterable): 
    """Iterate over pairs of an iterable.""" 
    i = iter(iterable) 
    j = iter(iterable) 
    next(j) 
    yield from zip(i, j) 

(zum Beispiel list(pairwise(["this", "is", "a", "test"])) wird [('this', 'is'), ('is', 'a'), ('a', 'test')] zurück.)

Und dann zip über das und das Ergebnis von .bigrams():

for pair in pairwise(words): 
    for bigram in nltk.bigrams("New York"): 
     if bigram == pair: 
      pass # found 
Verwandte Themen