本文主要是通过用GUI方式对比两篇文章的重复度,有两种方式:1、微信的链接;2、直接copy文字进行; 2、并且通过生成exe文件,发布出去
1、对比两篇文章的程序
先放图,设计比较粗糙,大家见谅哈:
from tkinter import *
import re
from tkinter import scrolledtext
from bs4 import BeautifulSoup
from urllib.request import urlopen
top=Tk()
top.wm_title("菜单")
top.geometry("400x400+300+100")
#top.configure(background='green')#背景绿色
# 创建一个菜单项,类似于导航栏
menubar=Menu(top)
# 创建菜单项
fmenu1=Menu(top)
for item in ['新建','打开','保存','另存为']:
# 如果该菜单时顶层菜单的一个菜单项,则它添加的是下拉菜单的菜单项。
fmenu1.add_command(label=item)
# add_cascade 的一个很重要的属性就是 menu 属性,它指明了要把那个菜单级联到该菜单项上,
# 当然,还必不可少的就是 label 属性,用于指定该菜单项的名称
menubar.add_cascade(label="文件",menu=fmenu1)
# 最后可以用窗口的 menu 属性指定我们使用哪一个作为它的顶层菜单
top['menu']=menubar
#创建部件
label1 = Label(top, text='原文章:' )
label1.grid(row=3, column=0)
entryname1 = scrolledtext.ScrolledText(top, width=80,height=10,background='LightGreen')
entryname1.grid(row=3, column=1)
#找颜色 https://blog.csdn.net/chl0000/article/details/7657887
label2 = Label(top, text='待验文章:' )
label2.grid(row=4, column=0)
# 输入框 (Entry)
entryname2 = scrolledtext.ScrolledText(top, width=80,height=10,background='LightSkyBlue')
entryname2.grid(row=4, column=1)
label3 = Label(top, text='对比结果:' )
label3.grid(row=5, column=0)
entryname3 = scrolledtext.ScrolledText(top, width=80,height=10,background='tan')
entryname3.grid(row=5, column=1)
label4 = Label(top, text='原文章链接(仅限微信):' )
label4.grid(row=1, column=0)
entryname4 = Entry(top, width=30)
entryname4.grid(row=1, column=1)
label5 = Label(top, text='对比文章链接(仅限微信):' )
label5.grid(row=2, column=0)
entryname5 = Entry(top, width=30)
entryname5.grid(row=2, column=1)
para_pre=''
para_post=''
#清理滚动条内容
def clear_():
global para_pre,para_post
para_pre=''
para_post=''
entryname1.delete('1.0','end')
entryname2.delete('1.0','end')
entryname3.delete('1.0','end')
entryname4.delete(0,END)
entryname5.delete(0,END)
# 处理文章,将文章根据标点符号,分割成句子
def cut_sent(para):
para=re.sub('\s+', ' ', para)#去除段落的空格
para = re.sub('([。!?\?])([^”])',r"\1\n\2",para) # 单字符断句符
para = re.sub('(\.{6})([^”])',r"\1\n\2",para) # 英文省略号
para = re.sub('(\…{2})([^”])',r"\1\n\2",para) # 中文省略号
para = re.sub('(”)','”\n',para) # 把分句符\n放到双引号后,注意前面的几句都小心保留了双引号
para = para.lstrip(' ') # 段尾如果有多余的\n就去掉它
para = para.rstrip(' ') # 段尾如果有多余的\n就去掉它
#很多规则中会考虑分号;,但是这里我把它忽略不计,破折号、英文双引号等同样忽略,需要的再做些简单调整即可。
return para.split("\n")
#处理文章每句话的前后的空格
def text_line(para):
sent_arti=cut_sent(para)
sent_arti=[sent_line.strip() for sent_line in sent_arti]
return sent_arti
#通过微信链接抓取文章内容
def get_wx_arcticle(url):#=
with urlopen(url) as opurl:
html=opurl.read().decode('utf-8')
soup =BeautifulSoup(html,features='lxml')
#注:soup =BeautifulSoup(html,features='html.parser') 对于需要
#在window里用到python3.4,包是py2exe进行转换时,参数需要是html.parser
all_href=soup.find_all('p')
article=''
for i in soup.find_all(name='p'):
article=article+i.get_text().strip()
return article
#主运行函数
def main_():
global para_pre,para_post
url_my=entryname4.get()
url_other=entryname5.get()
#微信链接优先支持
if len(url_my)>0 and len(url_other)>0:
para_pre=get_wx_arcticle(url_my)
para_post=get_wx_arcticle(url_other)
else:#手动输入文章
para_pre=entryname1.get('1.0', 'end')
para_post=entryname2.get('1.0', 'end')
sent_pre=text_line(para_pre)
sent_post=text_line(para_post)
#对比文章数据
i=0
check_result=[]
for line in sent_pre:
if line in sent_post:
i +=1
check_result.append(line)
#result:就是显示的内容
result='这篇文章共发现%s条句子引用'%i +'其中引用句子占原文章%d'%(100*i/len(sent_pre))+'%' +3*'\n' +'重复句子为以下部分:' +2*'\n' +'\n'.join(check_result)
entryname3.insert('1.0',result)
getname2 = Button(top, text='对比信息', command=main_)
getname2.grid(row=7, column=1)
getname3 = Button(top, text='清除信息', command=clear_)
getname3.grid(row=9, column=1)
top.mainloop()
对比文章第二版exe下载地址:
百度网盘下载 密码:z6e2
2、由于本次项目用到了生成exe文件方式,在次顺便介绍一下:
1、首先要在window环境下操作,本文介绍的用py2exe包转换,py2exe目前只能用python3.3或python3.4,不然会报错类似 IndexError: tuple index out of range
2、进入存放要转换.py文件的文件夹
3、在该文件夹里使用生成一个引导文件,例如叫mysetup.py内容例如下
from distutils.core import setup
import py2exe
setup(windows=["需要转换的文件.py"])
#setup(console=["find_copy.py"]) #这个也可以
4、在命令行里输入:python mysetup.py py2exe
就可以了
5、之后就可以在自动生成的dist文件夹里找到转成exe的文件了,打包的时候,dist文件都得打包上 注意:首先要自己检验一下要转换的文件是否能够正常运行,是否缺少某些包,缺的就补上,否则转成的exe文件无法正常使用。