我读过一篇论文,它使用ngram计数作为分类器的特征,我想知道这究竟意味着什么.
示例文本:"Lorem ipsum dolor sit amet,consetetur sadipscing elitr,sed diam"
我可以在本文中创建unigrams,bigrams,trigrams等,在这里我必须定义创建这些unigrams的"级别"."级别"可以是字符,音节,单词,......
因此,从上面的句子中创建unigrams只会创建所有单词的列表?
创建双字母组合会导致单词对将相互跟随的单词组合在一起吗?
因此,如果论文讨论ngram计数,它只会在文本中创建unigrams,bigrams,trigrams等,并计算ngram发生的频率?
python的nltk包中是否存在现有方法?或者我必须实现自己的版本?
roo*_*oot 17
我发现了我的旧代码,也许它很有用.
import nltk
from nltk import bigrams
from nltk import trigrams
text="""Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam ornare
tempor lacus, quis pellentesque diam tempus vitae. Morbi justo mauris,
congue sit amet imperdiet ipsum dolor sit amet, consectetur adipiscing elit. Nullam ornare
tempor lacus, quis pellentesque diam"""
# split the texts into tokens
tokens = nltk.word_tokenize(text)
tokens = [token.lower() for token in tokens if len(token) > 1] #same as unigrams
bi_tokens = bigrams(tokens)
tri_tokens = trigrams(tokens)
# print trigrams count
print [(item, tri_tokens.count(item)) for item in sorted(set(tri_tokens))]
>>>
[(('adipiscing', 'elit.', 'nullam'), 2), (('amet', 'consectetur', 'adipiscing'), 2),(('amet', 'imperdiet', 'ipsum'), 1), (('congue', 'sit', 'amet'), 1), (('consectetur', 'adipiscing', 'elit.'), 2), (('diam', 'tempus', 'vitae.'), 1), (('dolor', 'sit', 'amet'), 2), (('elit.', 'nullam', 'ornare'), 2), (('imperdiet', 'ipsum', 'dolor'), 1), (('ipsum', 'dolor', 'sit'), 2), (('justo', 'mauris', 'congue'), 1), (('lacus', 'quis', 'pellentesque'), 2), (('lorem', 'ipsum', 'dolor'), 1), (('mauris', 'congue', 'sit'), 1), (('morbi', 'justo', 'mauris'), 1), (('nullam', 'ornare', 'tempor'), 2), (('ornare', 'tempor', 'lacus'), 2), (('pellentesque', 'diam', 'tempus'), 1), (('quis', 'pellentesque', 'diam'), 2), (('sit', 'amet', 'consectetur'), 2), (('sit', 'amet', 'imperdiet'), 1), (('tempor', 'lacus', 'quis'), 2), (('tempus', 'vitae.', 'morbi'), 1), (('vitae.', 'morbi', 'justo'), 1)]
Run Code Online (Sandbox Code Playgroud)