Python:使用给定的语料库去构建二元语法模型

该博客介绍使用Python,依据给定语料库构建二元语法模型,用MLE估计bigram概率。包含extract_data.py、generate_base.py、test.py三个程序,分别用于提取数据、生成库文件和测试。还提到未用数据平滑技术,后期可将程序片段放类方法中让主程序更易懂。

问题:写一个Python程序,使用给定的语料库(metadata.txt的第三列文本),构建二元语法模型,用MLE(最大似然估计)去估计bigram的概率,可以不使用数据平滑技术。

需要使用控制台输入法演示该语言模型:当输入一个单词后,程序自动推荐接下来最可能输入的5个单词,如果用户根据推荐或自主输入下一个单词,程序以同样的方式推荐接下来最可能输入的5个单词,以此使用户循环输入。


原始数据metadata.txt见此链接


程序1,extract_data.py:将原始数据metadata.txt的第三列摘出来放到一个新文本文件newdata.txt中。本程序无输出结果,但是会生成一个文件newdata.txt。

# 本程序功能:将原始数据的第三列摘出来放到一个新文本文件中

import os

os.chdir(r'D:\\') # 假设这是原始语料metadata.txt所在的根目录

with open('metadata.txt', 'r', encoding='utf8') as file_object:
    a = file_object.readlines() # 将文本的每一行作为一个字符串存在列表a里
    s = ''
    for i in a:
        i = i.split('|') # 每一行按'|'分开
        i = i[-1] # 取最后一项,也就是文本内容的第三列
        i = i.replace('\n', ' ') # 把换行替换为空格
        s += i
with open('newdata.txt', 'w', encoding='utf8') as file_object: # 新内容放在newdata.txt中
    file_object.write(s)

程序2,generate_base.py:根据语料库newdata.txt生成一个库文件words_base.json。本程序在运行结束后会输出成功提示,以及程序运行时间(一般需要10分钟左右),还会输出出现次数最多的五个词,另外生成一个文件words_base.json。

# 本程序功能:根据语料库newdata.txt生成一个库文件words_base.json
import os, re, json, time

start = time.time() # 程序开始运行
os.chdir(r'D:\\')

all_words = [] # 用来存放所有单词

with open('newdata.txt', 'r', encoding='utf8') as file_object:
    contents = file_object.read()  # 将文本中的全部字符作为一个字符串
    all_words 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值