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

标签 python nlp nltk

我读过一篇论文,它使用 ngram 计数作为分类器的特征,我想知道这到底是什么意思。

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

我可以根据此文本创建一元字母组、二元字母组、三元字母组等,我必须在其中定义在哪个“级别”上创建这些一元字母组。 “级别”可以是字符、音节、单词、...

那么从上面的句子中创建 unigrams 只会创建一个包含所有单词的列表?

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

因此,如果论文谈论 ngram 计数,它只是简单地从文本中创建 unigrams、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/

相关文章:

python - (Python 3) imaplib 从 .txt 文件登录

python - 是否可以预先创建一个用于 hudson 构建的 virtualenv?

python - 保存矩阵时出错

python - 手动标记的 Span 中带有 ENT_TYPE 的模式不起作用

python - 值错误 : A ELE probability distribution must have at least one bin

python - 为什么在列表理解中是 if-else before 而 just if 是 after?

java - 将类型化依赖项的集合转换为树

python-3.x - Python。自然语言处理。预处理文本

python - 最常见单词或短语的 FreqDist

python - 如何使用 NLTK 替换二元组?