下载站

展开
精品推荐
纠错帮【python文稿AI纠错工具】

纠错帮【python文稿AI纠错工具】

文件处理大小:983.28MB语言: / 类别:应用软件系统: / WinXP, Win7, win8 提供:
应用介绍

纠错帮【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:纠错帮,论文,文章工具.

应用推荐查看更多
热门下载查看更多
精选应用
点击查看更多
专题合集查看更多
热门专题查看更多
友情链接0投诉联系:ichaoinc@gmail.com