python编写平滑函数完成数据平滑,利用平滑数据完成对2-gram模型的建立,计算测试句子概率并输出结果,用input获取测试输入。语料库: 研究生物很有意思。他大学时代是研究生物的。生物专业是他的首选目标。他是研究
时间: 2023-12-03 12:47:18 浏览: 127
生物的研究生。
代码如下:
```python
from collections import Counter
# 平滑函数,采用加法平滑
def smooth(counter, k=1):
total = sum(counter.values())
return lambda x: (counter[x] + k) / (total + k * len(counter))
# 2-gram模型的建立
corpus = "研究生物很有意思。他大学时代是研究生物的。生物专业是他的首选目标。他是研究生物的研究生。"
words = corpus.split()
bgrams = [tuple(words[i:i+2]) for i in range(len(words)-1)]
bgram_counter = Counter(bgrams)
bgram_prob = smooth(bgram_counter)
# 计算测试句子概率并输出结果
test_sentence = input("请输入测试句子:")
test_words = test_sentence.split()
test_bgrams = [tuple(test_words[i:i+2]) for i in range(len(test_words)-1)]
prob = 1.0
for bgram in test_bgrams:
prob *= bgram_prob(bgram)
print("测试句子的概率为:", prob)
```
注意,在这个例子中我们采用了加法平滑,其中 k=1。在实际应用中,需要根据语料库的大小和特性选择合适的平滑方法和参数。
阅读全文