2017-08-01 2 views
1

A partir d'un document, je veux générer tous les n-grammes qui contiennent un certain mot.Trouver tous les n-grammes qui contiennent un certain mot efficacement

Exemple:

document: i am 50 years old, my son is 20 years old 
word: years 
n: 2 

Sortie:

[(50, years), (years, old), (20, years), (years, old)] 

Je sais que nous pouvons générer tous les n-grammes possibles et filtrer ceux avec le mot, mais je me demandais s'il y a un plus moyen efficace de le faire. Je prévoyais d'utiliser PySpark pour les générer.

+1

Regardez dans les outils. – perigon

+0

Salut! plus efficace que quoi? que faites-vous actuellement? – arturomp

Répondre

0
from nltk.util import ngrams 

DOC = 'i am 50 years old, my son is 20 years old' 


def ngram_filter(doc, word, n): 
    tokens = doc.split() 
    all_ngrams = ngrams(tokens, n) 
    filtered_ngrams = [x for x in all_ngrams if word in x] 
    return filtered_ngrams 


ngram_filter(DOC, 'years', 2)