用python实现n-gram模型预测语句后面出现的词语以及每个词语的概率,详细代码
时间: 2024-10-08 10:09:41 浏览: 32
在Python中实现n-gram模型通常用于自然语言处理任务,如文本生成、机器翻译等。这里是一个简单的例子,我们将使用`collections.Counter`来计算n-gram频率,并使用`itertools`生成滑动窗口来获取连续的n个词。
首先,我们需要导入所需的库:
```python
import re
from collections import Counter
from itertools import zip_longest
```
然后定义一个函数来创建n-gram模型并计算概率:
```python
def create_ngram_model(text, n=1):
# 分词
words = re.findall(r'\b\w+\b', text)
# 计算n-grams及其频率
ngram_freq = Counter(zip_longest(*[words[i:] for i in range(n)]))
# 将字典转换为可以查询概率的形式
def get_probability(gram):
return ngram_freq.get(gram, 0) / sum(ngram_freq.values()) if len(gram) == n else None
return ngram_freq, get_probability
# 使用示例
text = "这是一个句子,用于演示n-gram模型"
n = 2 # bi-gram模型
model, probability = create_ngram_model(text, n)
# 预测下一个词
def predict_next_word(current_gram, model, prob_func):
candidates = list(model.keys())
if current_gram is not None:
candidates = [c for c in candidates if current_gram + ' ' + c in model]
if candidates:
return max(candidates, key=lambda x: prob_func(current_gram + ' ' + x))
else:
return None
current_gram = "这是"
next_word = predict_next_word(current_gram, model, probability)
print(f"给定'{current_gram}',预测下一个词是'{next_word}'")
```
阅读全文