小编典典

什么是ngram计数以及如何使用nltk实现?

python

我读过一篇使用ngram计数作为分类器功能的论文,我想知道这到底意味着什么。

示例文本:“ Lorem ipsum dolor sit amet,consetetur sadipscing elitr,sed diam”

我可以根据本文创建单字组,双字母组,三字组等,在这里我必须定义在哪个“级别”上创建这些单字组。“级别”可以是字符,音节,单词,…

那么从上面的句子中创建字母组合会简单地创建所有单词的列表吗?

创建二元组会导致单词对将彼此跟随的单词组合在一起?

因此,如果本文讨论的是ngram计数,它只是从文本中创建unigram,bigrams,trigrams等,并计算哪个ngram出现的频率?

python的nltk包中是否存在现有方法?还是我必须实现自己的版本?


阅读 215

收藏
2020-12-20

共1个答案

小编典典

我发现了我的旧代码,也许有用。

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)]
2020-12-20