python - 如何获得句子文本中二元组的概率?
问题描述
我有一个包含很多句子的文本。我该如何使用nltk.ngrams
它来处理它?
这是我的代码:
sequence = nltk.tokenize.word_tokenize(raw)
bigram = ngrams(sequence,2)
freq_dist = nltk.FreqDist(bigram)
prob_dist = nltk.MLEProbDist(freq_dist)
number_of_bigrams = freq_dist.N()
但是,上面的代码假设所有句子都是一个序列。但是,句子是分开的,我猜一个句子的最后一个词与另一个句子的开始词无关。我怎样才能bigram
为这样的文本创建一个?我还需要prob_dist
并且number_of_bigrams
基于 `freq_dist.
有类似这样的问题What is ngram counts and how to implement using nltk? 但它们主要是关于一系列单词。
解决方案
您可以使用新nltk.lm
模块。这是一个示例,首先获取一些数据并对其进行标记:
import os
import requests
import io #codecs
from nltk import word_tokenize, sent_tokenize
# Text version of https://kilgarriff.co.uk/Publications/2005-K-lineer.pdf
if os.path.isfile('language-never-random.txt'):
with io.open('language-never-random.txt', encoding='utf8') as fin:
text = fin.read()
else:
url = "https://gist.githubusercontent.com/alvations/53b01e4076573fea47c6057120bb017a/raw/b01ff96a5f76848450e648f35da6497ca9454e4a/language-never-random.txt"
text = requests.get(url).content.decode('utf8')
with io.open('language-never-random.txt', 'w', encoding='utf8') as fout:
fout.write(text)
# Tokenize the text.
tokenized_text = [list(map(str.lower, word_tokenize(sent)))
for sent in sent_tokenize(text)]
然后是语言建模:
# Preprocess the tokenized text for 3-grams language modelling
from nltk.lm.preprocessing import padded_everygram_pipeline
from nltk.lm import MLE
n = 3
train_data, padded_sents = padded_everygram_pipeline(n, tokenized_text)
model = MLE(n) # Lets train a 3-grams maximum likelihood estimation model.
model.fit(train_data, padded_sents)
要获得计数:
model.counts['language'] # i.e. Count('language')
model.counts[['language']]['is'] # i.e. Count('is'|'language')
model.counts[['language', 'is']]['never'] # i.e. Count('never'|'language is')
要获得概率:
model.score('is', 'language'.split()) # P('is'|'language')
model.score('never', 'language is'.split()) # P('never'|'language is')
加载笔记本时,Kaggle 平台上有一些问题,但在某些时候,这个笔记本应该可以很好地概述nltk.lm
模块https://www.kaggle.com/alvations/n-gram-language-model-with-nltk
推荐阅读
- qt - Qt Quick 2、Button图标属性是不是没有颜色?
- azure - 如何在没有注册任何应用程序的情况下通过 API 访问 Azure 时间序列洞察?
- css - 如何用css改变文本前几行的颜色?
- c# - 将现有 DotnetCore WebAPI 迁移到 Azure 无服务器函数
- typescript - React Native - 不变违规:模块 AppRegistry 不是注册的可调用模块(调用 runApplication)
- ios - 更改 UITableView 中的搜索栏高度(swift 5)
- r - 在 dplyr case_when() 中使用动态变量名
- c# - 从另一个对象触发事件处理 DatagridView 数据源
- asp.net-core - 表名(如果以用户 ID 为前缀) ASP.NET Core 3.1 EF 数据库迁移
- javascript - 函数需要在顺序 Javascript 中运行代码