对比两篇文章重复度

2018/10/27 爬虫

本文主要是通过用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文件都得打包上 dist文件 注意:首先要自己检验一下要转换的文件是否能够正常运行,是否缺少某些包,缺的就补上,否则转成的exe文件无法正常使用。

Search

    欢迎关注我的微信公众号

    闷骚的程序员

    Table of Contents