纠错帮【python文稿AI纠错工具】,由论坛大神制作的一个论文纠错工具,由Python语言编写,可以检查出文档内的语句,错字内容,选择好文件导入后就可以一键进行检测,能有效检查出一些基础错误,提高文章的准确率。本次放出大神制作的这个纠错帮小程序工具下载。
纠错帮工具使用
选择文件并加载
点击开始检测一键查询
查询结束后会显示错误点并自动纠正
纠错帮工具源码
importPySimpleGUIassg
fromaipimportAipNlp
fromdocximportDocument
fromdocx.sharedimportRGBColor
importos
importpickle
importrandom
importtime
classTextAIAnalyse(object):
"""
:param
"""
def__init__(self,doc_path,app_id,api_key,secret_key):
"""
:paramdoc_path:文章路径
:paramapp_id:应用id,自己去百度ai控制台构建一个应用,就会有id了
:paramapi_key:
:paramsecret_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)
deffilter_style(self):
"""
样式过滤
:param
"""
delete_style=['Title','Heading1','Quote']?#去除标题,一级标题,图表链接
list1=[x.textforxinself.document.paragraphsifx.style.namenotindelete_style]
returnlist1
@staticmethod
deffilter_short_text(list1:list,length:int):
"""
去除短文本
:paramlist1:列表格式的文本集
:paramlength:最短文本长度
"""
list2=[x.strip()forxinlist1]?#去除两边空格
list3=[xforxinlist2iflen(x)length]
returnlist3
defsplit_text(self,list1:list):
"""
对段落进行分句,粗糙分词
:param
"""
list2=[]
forxinlist1:
x_list1=x.split('。')?#以句号进行分词,分号暂时不考虑
forxxinx_list1:
ifxx[-1:]notin['。',';',':']:?#如果本局不是以句号结尾,则给它加上句号
xx+='。'
list2.append(xx)
list3=self.filter_short_text(list2,10)
returnlist3
defsplit_text2(self,list1:list):
"""
对段落进行分句,加上分号
:param
"""
list2=[]
forxinlist1:
x_list1=x.split('。')?#以句号进行分词
forxxinx_list1:
x_list2=xx.split(';')?#以中文分号进行分词
forxxxinx_list2:
ifxxx[-1:]notin['。',';',':']:?#如果本局不是以句号结尾,则给它加上句号
xxx+='。'
list2.append(xxx)
list3=self.filter_short_text(list2,10)
returnlist3
defai_analyse(self,text1):
"""
AI对句子进行纠错
:param
"""
result1=None
try:
result1=self.client.ecnet(text1)
exceptExceptionaserr:
returnFalse
vet=result1['item']['vec_fragment']?#可替换词
score=result1['item']['score']?#评分
iflen(vet)==0:
returnFalse?#没有错误
#elifscore0.5:?#如果可信度
else:
returnresult1?#返回分析
defsave_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='./分析结果'
ifnotos.path.exists(dir_name):?#如果文件夹不存在
os.mkdir(dir_name)
a=vet_list['begin_pos']?#获取第一个错误标签的开始位置
b=vet_list[-1]['end_pos']?#获取最后一个错误的结束位置
ifnotos.path.exists(path):?#如果文件不存在
doc=Document()
else:
doc=Document(path)
doc.add_paragraph('错误写法',style='heading1')?#一级标题
p=doc.add_paragraph()?#创建一个空段落
p.add_run(text_encode[:a].decode('gbk'))?#写入没有错误的部分
start_list=[x['begin_pos']forxinvet_list]?#记录开始的位置
end_list=[x['end_pos']forxinvet_list]?#记录结束的位置
iflen(vet_list)==1:?#如果只有一个错误
run1=p.add_run(text_encode[start_list:end_list].decode('gbk'))
run1.font.color.rgb=RGBColor(255,0,0)?#设置红色字体
else:?#如果有多个错误
foriinrange(len(vet_list)):
run=p.add_run(text_encode[start_list:end_list[i]].decode('gbk'))
run.font.color.rgb=RGBColor(255,0,0)?#设置红色字体
ifi<len(vet_list)-1andstart_list[i+1]-end_list[i]1:?#如果后面一处错误与前面一处错误存在间距
p.add_run(text_encode[end_list:start_list[i+1]].decode('gbk'))?#增加一个没有样式的普通字体
iflen(text_encode)-b1:?#如果最后一个错误后面存在正确的内容
p.add_run(text_encode[b:].decode('gbk'))?#写入后面无错的内容
doc.add_paragraph('正确写法',style='heading1')?#一级标题
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)
foriinrange(10):
event1,value1=windows1.read()
ifevent1in('退出',None):
break
elifevent1=='使用说明':
sg.popup('1.搜索百度AI开放平台','2.点击控制台,注册并登录','3.选择自然语音处理','4.创建应用',
'5.填写appid,api_key,secret_key','6.选择需要纠错的文件','7.点击开始检测',title='使用说明',
font=my_font_style1)
elifevent1=='更新记录':
sg.popup(
'V1.1更新记录'
'1.增加了分号分句功能',
'2.增加了导出word对比功能',
title='提示',font=my_font_style1)
elifevent1=='保存配置':
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()
iflen(APP_ID)3andlen(API_KEY)5andlen(SECRET_KEY)5:
dict1={
'app_id':APP_ID,
'api_key':API_KEY,
'secret_key':SECRET_KEY,
'split_type':split_type
}
withopen('info.pkl','wb')asf:
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)
elifevent1=='载入配置':
ifnotos.path.exists('info.pkl'):
sg.popup('没有找到你的配置文件info.pkl','请检查你的文件是否在当前路径',title='错误提示',
font=my_font_style1)
else:
withopen('info.pkl','rb')asf:
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)
elifevent1=='开始检测':
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()
iflen(APP_ID)3andlen(API_KEY)5andlen(SECRET_KEY)5:
doc=TextAIAnalyse(file_path,APP_ID,API_KEY,SECRET_KEY)
text_list2=doc.text_list2
ifsplit_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']
foriiinrange(len(text_list3)):
event2,value2=windows2.read(timeout=10)
ifevent2in('取消',None):
break
result2=doc.ai_analyse(text_list3[ii])
print(text_list3[ii])
ifbool(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)
eliflen(file_path)<5:
sg.popup('亲!','你还没有选择检测的文件',title='提示',font=my_font_style1)
else:
sg.popup('请输入你的api信息','详情请查看使用说明',title='提示',font=my_font_style1)
windows1.close()
相关新闻
文本纠错
文本纠错目前可以做到纠正形近字、音近字、成语使用、量词搭配、语法这些错误。
形近字纠错
就比如把“时候”写成了“时侯”,“领域”写成“领城”。如果自己检查的时候,很难发现形近字错误。
有了秘塔写作猫,直接把word文档上传到里面,有什么错误直接就智能查找并显示出来了。
Tags:纠错帮,论文,文章工具.
小编点评:永恒之蓝病毒给我们带来的损失还未恢复,又来.
下载小编点评:DropBox就是一款非常好用的免费.
下载小编点评:u盘坏块检测工具,USBFlash.
下载小编点评:软件介绍《Win7主题:法拉利》微软官方推荐.
下载小编点评:软件介绍FreeUSBGuard提.
下载小编点评:软件介绍鼠标指针使用方法:1、压缩.
下载小编点评:软件介绍包含多张精美主题图片的系列壁纸包。该系列.
下载小编点评:软件介绍WinXDVDRipper.
下载小编点评:软件介绍JumplistLaunc.
下载小编点评:软件介绍《Win7主题:维利奇卡》微软官方推.
下载小编点评:软件介绍HugeCalc是一款高精度.
下载小编点评:梦幻英雄是一款魔幻题材卡牌对战类手机游戏。
下载小编点评:王者信条手游是一款射击题材的魔性闯.
下载白夜极光日服下载-白夜极光日服官方版下载v1.14.0 安卓版
女巫构想世界官方下载-女巫构想世界手游下载v0.9.23.0818 安卓版
主公快跑官方版下载-主公快跑游戏下载v2.81 安卓服
罕见病新进展客户端下载-罕见病新进展APP下载v2.0.7 安卓版
枪手袭击兄弟最新版下载-枪手袭击兄弟游戏(bombastic brothers)下载v1.2.22 安卓版
斗罗大陆乐玩兔版本下载-乐玩兔斗罗大陆下载v9.5.0 安卓版
葫芦侠三国杀下载-三国杀葫芦侠版下载v3.7.7 安卓版
苍之女武神手游红包版下载-苍之女武神红包版下载v1.0 安卓版
解神者小米版下载-解神者小米服下载v2.0 安卓版
百战三界2手游果盘版下载-百战三界2果盘游戏下载v1.53.0.021801 安卓版
王与异界骑士小米商店下载-王与异界骑士小米版下载v1.4.0 安卓版
新水浒大官人安卓下载-新水浒大官人手游下载v1.1.0 安卓官方版
星之守护者破解版下载-星之守护者无限钻石下载v1.1 安卓版