N-gramy to sekwencje następujących po sobie elementów. N = ilość elementów występujacych w sekwencji:
- 1-gram — unigram,
- 2-gram — bigram,
- 3-gram — trigram,
- 4-gram, 5-gram, itd.
In [1]:
tokens = "W tym zdaniu jest kilka wyrazów o różnej długości".split(" ")
# bigram
n = 2
Stwórz 2 tablice, które ropoczynać będzie kolejny token sekwencji
In [2]:
sequences = [tokens[i:i+len(tokens)-n+1] for i in range(n)]
sequences
Out[2]:
[['W', 'tym', 'zdaniu', 'jest', 'kilka', 'wyrazów', 'o', 'różnej'], ['tym', 'zdaniu', 'jest', 'kilka', 'wyrazów', 'o', 'różnej', 'długości']]
Połącz tablice (pierwszy element pierwszej tablicy łączy się z pierwszym elementem drugiej tablicy, itd.)
In [3]:
[gram for gram in zip(*sequences)]
Out[3]:
[('W', 'tym'), ('tym', 'zdaniu'), ('zdaniu', 'jest'), ('jest', 'kilka'), ('kilka', 'wyrazów'), ('wyrazów', 'o'), ('o', 'różnej'), ('różnej', 'długości')]
Tworzenie n-gramów z pakietem nltk¶
In [4]:
from nltk.util import ngrams
# metoda przyjmuje argument okreslający liczbę n-gramów. w tym przypadku = 4
print(*ngrams(tokens, 4), sep="\n")
('W', 'tym', 'zdaniu', 'jest') ('tym', 'zdaniu', 'jest', 'kilka') ('zdaniu', 'jest', 'kilka', 'wyrazów') ('jest', 'kilka', 'wyrazów', 'o') ('kilka', 'wyrazów', 'o', 'różnej') ('wyrazów', 'o', 'różnej', 'długości')
In [5]:
from nltk.util import trigrams
print(*trigrams(tokens), sep="\n")
('W', 'tym', 'zdaniu') ('tym', 'zdaniu', 'jest') ('zdaniu', 'jest', 'kilka') ('jest', 'kilka', 'wyrazów') ('kilka', 'wyrazów', 'o') ('wyrazów', 'o', 'różnej') ('o', 'różnej', 'długości')
In [6]:
from nltk.util import bigrams
print(*bigrams(tokens), sep="\n")
('W', 'tym') ('tym', 'zdaniu') ('zdaniu', 'jest') ('jest', 'kilka') ('kilka', 'wyrazów') ('wyrazów', 'o') ('o', 'różnej') ('różnej', 'długości')
In [7]:
from nltk.util import everygrams
# metoda przyjmuje argument określający zakres n-gramów. w tym przypadku od 1 do 3
print(*everygrams(tokens, 1, 3), sep="\n")
('W',) ('tym',) ('zdaniu',) ('jest',) ('kilka',) ('wyrazów',) ('o',) ('różnej',) ('długości',) ('W', 'tym') ('tym', 'zdaniu') ('zdaniu', 'jest') ('jest', 'kilka') ('kilka', 'wyrazów') ('wyrazów', 'o') ('o', 'różnej') ('różnej', 'długości') ('W', 'tym', 'zdaniu') ('tym', 'zdaniu', 'jest') ('zdaniu', 'jest', 'kilka') ('jest', 'kilka', 'wyrazów') ('kilka', 'wyrazów', 'o') ('wyrazów', 'o', 'różnej') ('o', 'różnej', 'długości')