我读过一篇使用ngram计数作为分类器特征的论文,我想知道这到底意味着什么。
示例文本:“lorem ipsum dolor sit amet,consetetur sadipscing eliter,sed diam”
我可以在本文中创建unigrams、bigrams、trigrams等,在这里我必须定义在哪个“级别”上创建这些unigrams。“级别”可以是字符、音节、单词…
因此,从上面的句子中创建unigrams只会创建一个所有单词的列表?
创建bigrams会导致单词对将后面的单词组合在一起?
因此,如果本文讨论了NGRAM计数,它只需在文本中创建unigram、bigrams、trigrams等,并计算出哪一个NGRAM发生的频率?
python的nltk包中有现有的方法吗?还是必须实现自己的版本?
最佳答案
我找到了我的旧代码,也许它很有用。
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)]
关于python - 什么是ngram计数以及如何使用nltk实现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12821201/