纠错帮【python文稿AI纠错工具】,由论坛大神制作的一个论文纠错工具,由Python语言编写,可以检查出文档内的语句,错字内容,选择好文件导入后就可以一键进行检测,能有效检查出一些基础错误,提高文章的准确率。本次放出大神制作的这个纠错帮小程序工具下载。

纠错帮工具使用

选择文件并加载

点击开始检测一键查询

查询结束后会显示错误点并自动纠正

纠错帮工具源码

import PySimpleGUI as sg

from aip import AipNlp

from docx import Document

from docx.shared import RGBColor

import os

import pickle

import random

import time

class TextAIAnalyse(object):

"""

:param

"""

def __init__(self, doc_path, app_id, api_key, secret_key):

"""

:param doc_path:文章路径

:param app_id: 应用id,自己去百度ai控制台构建一个应用,就会有id了

:param api_key:

:param secret_key:

"""

self.client = AipNlp(app_id, api_key, secret_key)

self.document = Document(doc_path)

self.doc_path = doc_path

text_list1 = self.filter_style()

self.text_list2 = self.filter_short_text(text_list1, 12)

def filter_style(self):

"""

样式过滤

:param

"""

delete_style = ['Title', 'Heading 1', 'Quote']  # 去除标题,一级标题,图表链接

list1 = [x.text for x in self.document.paragraphs if x.style.name not in delete_style]

return list1

@staticmethod

def filter_short_text(list1: list, length: int):

"""

去除短文本

:param list1: 列表格式的文本集

:param length:最短文本长度

"""

list2 = [x.strip() for x in list1]  # 去除两边空格

list3 = [x for x in list2 if len(x) > length]

return list3

def split_text(self, list1: list):

"""

对段落进行分句,粗糙分词

:param

"""

list2 = []

for x in list1:

x_list1 = x.split('。')  # 以句号进行分词,分号暂时不考虑

for xx in x_list1:

if xx[-1:] not in ['。', ';', ':']:  # 如果本局不是以句号结尾,则给它加上句号

xx += '。'

list2.append(xx)

list3 = self.filter_short_text(list2, 10)

return list3

def split_text2(self, list1: list):

"""

对段落进行分句,加上分号

:param

"""

list2 = []

for x in list1:

x_list1 = x.split('。')  # 以句号进行分词

for xx in x_list1:

x_list2 = xx.split(';')  # 以中文分号进行分词

for xxx in x_list2:

if xxx[-1:] not in ['。', ';', ':']:  # 如果本局不是以句号结尾,则给它加上句号

xxx += '。'

list2.append(xxx)

list3 = self.filter_short_text(list2, 10)

return list3

def ai_analyse(self, text1):

"""

AI对句子进行纠错

:param

"""

result1 = None

try:

result1 = self.client.ecnet(text1)

except Exception as err:

return False

vet = result1['item']['vec_fragment']  # 可替换词

score = result1['item']['score']  # 评分

if len(vet) == 0:

return False  # 没有错误

# elif score > 0.5:  # 如果可信度

else:

return result1  # 返回分析

def save_analyse(self, result):

"""

:param

"""

text = result['text']

text_encode = text.encode('gbk')

vet_list = result['item']['vec_fragment']

""" 开始写入word """

basename = os.path.basename(self.doc_path)

path = './分析结果/{}.docx'.format(basename[:6])

dir_name = './分析结果'

if not os.path.exists(dir_name):  # 如果文件夹不存在

os.mkdir(dir_name)

a = vet_list[0]['begin_pos']  # 获取第一个错误标签的开始位置

b = vet_list[-1]['end_pos']  # 获取最后一个错误的结束位置

if not os.path.exists(path):  # 如果文件不存在

doc = Document()

else:

doc = Document(path)

doc.add_paragraph('错误写法', style='heading 1')  # 一级标题

p = doc.add_paragraph()  # 创建一个空段落

p.add_run(text_encode[:a].decode('gbk'))  # 写入没有错误的部分

start_list = [x['begin_pos'] for x in vet_list]  # 记录开始的位置

end_list = [x['end_pos'] for x in vet_list]  # 记录结束的位置

if len(vet_list) == 1:  # 如果只有一个错误

run1 = p.add_run(text_encode[start_list[0]:end_list[0]].decode('gbk'))

run1.font.color.rgb = RGBColor(255, 0, 0)  # 设置红色字体

else:  # 如果有多个错误

for i in range(len(vet_list)):

run = p.add_run(text_encode[start_list:end_list[i]].decode('gbk'))

run.font.color.rgb = RGBColor(255, 0, 0)  # 设置红色字体

if i < len(vet_list) - 1 and start_list[i + 1] - end_list[i] > 1:  # 如果后面一处错误与前面一处错误存在间距

p.add_run(text_encode[end_list:start_list[i + 1]].decode('gbk'))  # 增加一个没有样式的普通字体

if len(text_encode) - b > 1:  # 如果最后一个错误后面存在正确的内容

p.add_run(text_encode[b:].decode('gbk'))  # 写入后面无错的内容

doc.add_paragraph('正确写法', style='heading 1')  # 一级标题

correct = result['item']['correct_query']  # 正确的内容

doc.add_paragraph(correct)  # 写入正确的内容

doc.save(path)

if __name__ == '__main__':

my_font = 'Deja_Vu_Sans_Mono.ttf'

my_font_style1 = (my_font, 11, "normal")

# 菜单栏

menu_def = [

['&菜单', ['使用说明', '更新记录']],

['&文件', ['载入配置', '保存配置']]

]

# 布局栏

layout1 = [

[sg.Menu(menu_def, tearoff=True)],

[sg.Text('APP_ID:', size=(12, None)), sg.Input(key='app_id')],

[sg.Text('API_KEY', size=(12, None)), sg.Input(key='api_key')],

[sg.Text('SECRET_KEY', size=(12, None)), sg.Input(key='secret_key')],

[sg.Text('文件位置'), sg.Input(key='file_name', size=(51, None))],

[sg.FileBrowse('选择文件', target='file_name'), sg.Button('开始检测'),

sg.CBox('中文分号分句', default=False, key='split_type'), sg.Button('退出')]

]

# 窗口栏

windows1 = sg.Window('纠错帮V1.1', layout=layout1, font=my_font_style1)

for i in range(10):

event1, value1 = windows1.read()

if event1 in ('退出', None):

break

elif event1 == '使用说明':

sg.popup('1.搜索百度AI开放平台', '2.点击控制台,注册并登录', '3.选择自然语音处理', '4.创建应用',

'5.填写appid, api_key, secret_key', '6.选择需要纠错的文件', '7.点击开始检测', title='使用说明',

font=my_font_style1)

elif event1 == '更新记录':

sg.popup(

'V1.1更新记录'

'1.增加了分号分句功能',

'2.增加了导出word对比功能',

title='提示', font=my_font_style1)

elif event1 == '保存配置':

APP_ID = windows1['app_id'].get()

API_KEY = windows1['api_key'].get()

SECRET_KEY = windows1['secret_key'].get()

file_path = windows1['file_name'].get()

split_type = windows1['split_type'].get()

if len(APP_ID) > 3 and len(API_KEY) > 5 and len(SECRET_KEY) > 5:

dict1 = {

'app_id': APP_ID,

'api_key': API_KEY,

'secret_key': SECRET_KEY,

'split_type': split_type

}

with open('info.pkl', 'wb') as f:

pickle.dump(dict1, f)

sg.popup('保存完毕', '已经生成一个info.pkl文件到本地', title='提示', auto_close=True,

auto_close_duration=3, font=my_font_style1)

else:

sg.popup('请检查你的api相关信息是否填写完成', title='错误提示', font=my_font_style1)

elif event1 == '载入配置':

if not os.path.exists('info.pkl'):

sg.popup('没有找到你的配置文件info.pkl', '请检查你的文件是否在当前路径', title='错误提示',

font=my_font_style1)

else:

with open('info.pkl', 'rb') as f:

dict2 = pickle.load(f)

windows1['app_id'].update(dict2['app_id'])

windows1['api_key'].update(dict2['api_key'])

windows1['secret_key'].update(dict2['secret_key'])

windows1['split_type'].update(dict2['split_type'])

sg.popup('配置文件载入完毕', title='提示', auto_close_duration=3, auto_close=True, font=my_font_style1)

elif event1 == '开始检测':

APP_ID = windows1['app_id'].get()

API_KEY = windows1['api_key'].get()

SECRET_KEY = windows1['secret_key'].get()

file_path = windows1['file_name'].get()

split_type = windows1['split_type'].get()

if len(APP_ID) > 3 and len(API_KEY) > 5 and len(SECRET_KEY) > 5:

doc = TextAIAnalyse(file_path, APP_ID, API_KEY, SECRET_KEY)

text_list2 = doc.text_list2

if split_type:  # 如果选择的True,也就是支持分号

text_list3 = doc.split_text(text_list2)

else:

text_list3 = doc.split_text2(text_list2)

sg.popup('开始检测,共有{}句'.format(len(text_list3)),

'预计用时{}秒'.format(len(text_list3)*2), auto_close_duration=5, auto_close=True)

layout2 = [

[sg.Text('处理进度条', font=my_font_style1),

sg.ProgressBar(len(text_list3), orientation='h', key='bar', size=(50, 20))],

[sg.Button('取消', font=my_font_style1)]

]

windows2 = sg.Window(title='进度条', layout=layout2, font=my_font_style1)

bar = windows2['bar']

for ii in range(len(text_list3)):

event2, value2 = windows2.read(timeout=10)

if event2 in ('取消', None):

break

result2 = doc.ai_analyse(text_list3[ii])

print(text_list3[ii])

if bool(result2):

print(result2)

doc.save_analyse(result2)

time.sleep(0.5 + random.random() / 10)

bar.UpdateBar(ii + i)

windows2.close()

sg.popup('已经检测完成', '并且生成了一个“分析结果”文件夹到本地', title='提示', font=my_font_style1)

elif len(file_path) < 5:

sg.popup('亲!', '你还没有选择检测的文件', title='提示', font=my_font_style1)

else:

sg.popup('请输入你的api信息', '详情请查看使用说明', title='提示',font=my_font_style1)

windows1.close()

相关新闻

文本纠错

文本纠错目前可以做到纠正形近字、音近字、成语使用、量词搭配、语法这些错误。

形近字纠错

就比如把“时候”写成了“时侯”,“领域”写成“领城”。如果自己检查的时候,很难发现形近字错误。

有了秘塔写作猫,直接把word文档上传到里面,有什么错误直接就智能查找并显示出来了。

python程序纠错_纠错帮【python文稿AI纠错工具】相关推荐

  1. python程序执行时间_用于在Python中查找程序执行时间的程序

    python程序执行时间 The execution time of a program is defined as the time spent by the system to execute t ...

  2. 高校邦python程序设计基础_高校邦Python程序设计基础【实境编程】答案

    高校邦Python程序设计基础[实境编程]答案 更多相关问题 乙肝病毒A.杯状病毒 B.嗜肝DNA病毒 C.缺陷病毒 D.黄病毒 E.微小RNA病毒 T<39℃,中毒症状轻,仅见少许出血点,无休 ...

  3. 以下对python程序设计风格_以下对 Python 程序设计风格描述正确的选项是( )

    [单选题]Python关系运算符中表示"不等于"的是哪个?________ [单选题]下面________不是Python合法的标识符 [其它]自选某一主题查阅文献(必须有英文文献 ...

  4. 缩进是用来格式美化python程序的_以下对 Python 程序缩进格式描述错误的选项是...

    [单选题]以下程序的输出结果是:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬ def ...

  5. python程序分析_如何分析Python脚本?

    如Chris Lawlor所示cProfile是一个很棒的工具,可以很容易地用于打印到屏幕上:python -m cProfile -s time mine.py 或提交:python -m cPro ...

  6. python程序员编辑器_5款Python程序员高频使用开发工具推荐

    很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头.后来工作中深刻体会到,合理使用开发的工具的便利和高效.今天,我就把Python程序员使用 ...

  7. Python代写CSSE1001/7030 python程序作业、代做python CSSE1001/7030程序作业、 代写CSSE1001/7030 python 作业...

    Python代写CSSE1001/7030 python程序作业.代做python CSSE1001/7030程序作业. 代写CSSE1001/7030 python 作业 Uno++ Assignm ...

  8. Python程序员的圣经——《Python编程快速上手:让繁琐工作自动化》尾末附下载地址

    一.前言 如今,人们面临的大多数任务都可以通过编写计算机软件来完成.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.通过Python编程,我们能够解决现实生活中的很多任务. 今天给 ...

  9. python 生成器 原理_你知道python中的函数、生成器的工作原理吗?

    1.python中函数的工作原理 python的解释器,也就是python.exe(c编写)会用PyEval_EvalFramEx(c函数)运行foo()函数 首先会创建一个栈帧(stack Fram ...

  10. python 编程效率_五个Python编程Tips,帮你提高编码效率

    无论你是一位高级的AI工程师还是学生,你都会在工作或学习过程中需要用到 Python.自 1991 年首次发布后,Python 很快就成为了程序员和技术人员最喜欢的语言.作为一种拥有相对简单语法的高级 ...

最新文章

  1. 交换机配置软件_如何配置远程登陆交换机?最简单的解释方式,一看就懂
  2. ubuntu sun-jdk
  3. HDFS异常:last block does not have enough number of replicas
  4. 素数表的获取 O(nloglogn)复杂
  5. C# 实现自定义的USB设备与上位机进行通信(上位机部分)
  6. 原来体检报告是这么看的,赶紧收藏!
  7. EasyRecovery,拯救那些遗失的文件
  8. vue项目整合aliplayer阿里云视频
  9. 医学图像处理眼科检查
  10. Ecshop系统框架分析之二次开发重点结构介绍
  11. ubuntu18.0.4 无线网卡无法上网解决!
  12. INS/GNSS组合导航(五)惯性器件的主要误差
  13. http+flv+java,制作一个全功能的FLV播放器
  14. 视频转码流ffmpeg
  15. 采药问题 c语言程序,采药-动态规划题解(C语言代码)
  16. 2019春第十二周 编程总结
  17. Linux下使用 shell 脚本实现ftp文件下载
  18. 兰亭集势收购美国社交购物网站Ador,收购的是人才
  19. 修改app应用程序图标
  20. jQuery图片播放器 1.3

热门文章

  1. 关于tp框架token
  2. 软件开发合同模板范本
  3. 【BLE蓝牙学习开发笔记】安利一款简单好用且高性价比的BLE蓝牙抓包器
  4. 《Java就业培训教程》_张孝祥_书内源码_05
  5. keil交通灯c语言,用Keilc软件设计一个交通灯程序C程序
  6. 从零开始学习makefile(8) gcc -MM的作用
  7. 使用 PC 做 FTP/TFTP 服务器,上传和下载文件
  8. python图形界面实践_python开发利器之ulipad的使用实践
  9. Java图书管理系统(代码及详解)
  10. e-HR推动知识型企业人力资源管理提升