基于朴素贝叶斯算法的文本单词纠错程序设计(初级)

设计背景与意义

        随着全球经济化的发展,国人使用英语的程度会再一次攀上新高,但人们在电脑上输入英文单词时可能因为各种原因输错单词,如本来想输 big 却输成pig。为解决这些问题,设计一款即时英文文本纠错软件显得十分重要,并且文本单词纠错软件领域目前才刚开始发展,其市场需求量会随时间的增加而增加。 
        课题设计了一款基于朴素贝叶斯的文本单词纠错软件,通过导入语料库、统计语料库中正确单词的词频获取正确单词的先验概率。在用户输入了错误单词后,通过计算错误单词和语料库中正确单词的编辑距离(增加、删除、更改、易位),计算似然函数,最后通过朴素贝叶斯公式完成已知错误单词对应的正确单词的后验概率计算,并从语料库中选择具有后验概率中最大的单词作为正确单词的预测进行输出,从而完成错误单词的纠正,算法采用 python 进行程序设计,借助自然语言处理相关工具完成软件开发。

贝叶斯公式

 B: 结果,A:原因, P(A/B):后验概率, P(B/A):似然函数, P(A)先验概率,P(B):某一次观测结果的概率

设计思路

1.数据预处理:读取文本字符串

2.去掉停用词:正则表达式

3.分词:一个句子拆分成单词列表

 

4.构建先验概率:统计词频,选取多篇文章作为语料库 

5.构建似然函数:编辑距离算法

6.计算后验概率:选出正确的且语料中出现频率最高的单词

 GUI界面程序设计思路

1.导入所需的PyQt5模块和其他Python标准库。

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from Ui_untitled import *
import re
from bayes import statistic_frequency, correct
import sys

 2.导入名为Ui_untitled的UI文件,并将它作为一个类的基类。

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")

3.创建一个名为Main的类,该类继承自QMainWindow和Ui_Form类, 并实现了GUI界面的所有操作,如窗口移动、按钮点击、输入输出等操作。

class Main(QMainWindow,Ui_Form):  # 总体后台管理界面
    def __init__(self, parent = None):
        super(Main, self).__init__(parent)
        self.setupUi(self)

4.定义了一些方法,例如mousePressEvent、mouseMoveEvent和 mouseReleaseEvent用于实现窗口的拖动,show_min方法用于最小 化窗口,bayesInital方法用于初始化朴素贝叶斯算法所需的语料库。

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_flag = True
            self.m_Position = event.globalPos() - self.pos()  # 获取鼠标相对窗口的位置
            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))  # 更改鼠标图标
        
    def mouseMoveEvent(self, QMouseEvent):
        if Qt.LeftButton and self.m_flag:
            self.move(QMouseEvent.globalPos() - self.m_Position)  # 更改窗口位置
            QMouseEvent.accept()
 
    def mouseReleaseEvent(self, QMouseEvent):
        self.m_flag = False
        self.setCursor(QCursor(Qt.ArrowCursor))
        
    def show_min(self):
        self.showMinimized()

5.在主程序中创建一个应用程序对象app,并创建Main类的一个实例对象 Main,并将该实例对象显示在屏幕上。最后,使用sys.exit(app.exec()) 启动应用程序事件循环,等待用户操作。

if __name__ == "__main__":
    app = QApplication(sys.argv)
    Main = Main()
    Main.show()   
    sys.exit(app.exec())

通过打包操作之后可以实现下图所示效果:

 

 

猜你喜欢

转载自blog.csdn.net/joker_man1/article/details/129800994