Python NLTK: Bigrams trigrams fourgrams

前端 未结 4 1137
被撕碎了的回忆
被撕碎了的回忆 2020-12-25 14:16

I have this example and i want to know how to get this result. I have text and I tokenize it then I collect the bigram and trigram and fourgram like that

im         


        
相关标签:
4条回答
  • 2020-12-25 15:00

    Try everygrams:

    from nltk import everygrams
    list(everygrams('hello', 1, 5))
    

    [out]:

    [('h',),
     ('e',),
     ('l',),
     ('l',),
     ('o',),
     ('h', 'e'),
     ('e', 'l'),
     ('l', 'l'),
     ('l', 'o'),
     ('h', 'e', 'l'),
     ('e', 'l', 'l'),
     ('l', 'l', 'o'),
     ('h', 'e', 'l', 'l'),
     ('e', 'l', 'l', 'o'),
     ('h', 'e', 'l', 'l', 'o')]
    

    Word tokens:

    from nltk import everygrams
    
    list(everygrams('hello word is a fun program'.split(), 1, 5))
    

    [out]:

    [('hello',),
     ('word',),
     ('is',),
     ('a',),
     ('fun',),
     ('program',),
     ('hello', 'word'),
     ('word', 'is'),
     ('is', 'a'),
     ('a', 'fun'),
     ('fun', 'program'),
     ('hello', 'word', 'is'),
     ('word', 'is', 'a'),
     ('is', 'a', 'fun'),
     ('a', 'fun', 'program'),
     ('hello', 'word', 'is', 'a'),
     ('word', 'is', 'a', 'fun'),
     ('is', 'a', 'fun', 'program'),
     ('hello', 'word', 'is', 'a', 'fun'),
     ('word', 'is', 'a', 'fun', 'program')]
    
    0 讨论(0)
  • 2020-12-25 15:13
    from nltk.util import ngrams
    
    text = "Hi How are you? i am fine and you"
    
    n = int(input("ngram value = "))
    
    n_grams = ngrams(text.split(), n)
    
    for grams in n_grams :
    
       print(grams)
    
    0 讨论(0)
  • 2020-12-25 15:20

    I do it like this:

    def words_to_ngrams(words, n, sep=" "):
        return [sep.join(words[i:i+n]) for i in range(len(words)-n+1)]
    

    This takes a list of words as input and returns a list of ngrams (for given n), separated by sep (in this case a space).

    0 讨论(0)
  • 2020-12-25 15:21

    If you apply some set theory (if I'm interpreting your question correctly), you'll see that the trigrams you want are simply elements [2:5], [4:7], [6:8], etc. of the token list.

    You could generate them like this:

    >>> new_trigrams = []
    >>> c = 2
    >>> while c < len(token) - 2:
    ...     new_trigrams.append((token[c], token[c+1], token[c+2]))
    ...     c += 2
    >>> print new_trigrams
    [('are', 'you', '?'), ('?', 'i', 'am'), ('am', 'fine', 'and')]
    
    0 讨论(0)
提交回复
热议问题