python分词结合Pyqt5:简单文章查重小工具

前段时间在一微信公众号上看到一篇不错的以关键词频率为基础的“文章查重率”的技术文章,我在这里将其套上了PyQt5UI界面,将其制作成了一个小的工具。其核心代码还是以关键词频率为准的,所以查重率真的是不靠谱的…本人只是心血来潮了,想做个玩具玩玩~

代码实现

核心代码

因为是在其基础上改造的,所以可直接查看原链接即可:我用Python分析了翟天临的论文,学术还是要认真做啊

Ui代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# coding:utf-8
'''
Created on Mar 3, 2019
@author: junjieliu
@note: python checking tool
'''
import sys
import os
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Checking_tool(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
'''
UI布局设计、管理,以及信号槽的连襟
'''
#第一选取文件按钮
lbl_1 = QLabel('请选择输入文件:')
btn_chooseFile_1 = QPushButton("选取文件", self)
#第二选取文件按钮
lbl_2 = QLabel('请选择对比文件:')
btn_chooseFile_2 = QPushButton("选取文件", self)
#输出按钮
lbl_3 = QLabel('重复率:')
export_nmb = QLineEdit()
#推出按钮
qbtn = QPushButton('Quit', self)
qbtn.clicked.connect(QCoreApplication.instance().quit)
#布局管理
grid = QGridLayout()
grid.setSpacing(6)
grid.addWidget(lbl_1, 1, 0)
grid.addWidget(btn_chooseFile_1, 1, 1)
grid.addWidget(lbl_2, 2, 0)
grid.addWidget(btn_chooseFile_2, 2, 1)
grid.addWidget(lbl_3, 3, 0)
grid.addWidget(export_nmb, 3, 1)
grid.addWidget(qbtn, 4, 1)
self.setLayout(grid)
self.setGeometry(500, 300, 500, 300)
self.setWindowTitle('简易查重小工具')
self.cwd = os.getcwd() # 获取当前程序文件位置
def file_content():
'''
文章关键词词频输出
'''
fileName_choose, filetype = QFileDialog.getOpenFileName(self, "选取文件", self.cwd) # 起始路径
file_open = open(str(fileName_choose))
file_content = file_open.read()
print(file_content)
btn_chooseFile_1.clicked.connect(file_content)
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Checking_tool()
sys.exit(app.exec_())

Ui效果展示

如下图:

结合代码(非完整代码)

这个代码不是完整代码!!!这是目前写到的地方!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# coding:utf-8
'''
Created on Mar 3, 2019
@author: junjieliu
@note: python checking tool
'''
import sys
import os
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import pkuseg
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
from numpy.linalg.linalg import norm
class Checking_tool(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def readFile(self, file_path):
'''
文件读取,输出文件内容
'''
content = []
with open(file_path, encoding='utf-8') as f:
content = f.read()
return content
def keywords_TF(self, file_content):
'''
利用北大的中文分词表以及中文停用词表来进行一系列的分词动作,实现输出
主要关键词的频率,忽略掉停用词的频率出现
'''
seg = pkuseg.pkuseg() #加载模型
text = seg.cut(file_content)
#停用词运用
stopwords = []
with open('Users/junjieliu/Documents/stopwords-master/中文停用词表.txt', encoding='utf-8') as f:
stopwords = f.read()
#去除在文章中的停用词
new_text = []
for i in text:
if i not in stopwords:
new_text.append(i)
return new_text
def calculateSimilarity(self, file_1, file_2):
def add_space(s):
return ' '.join(keywords_TF(s))
# 将字中间加入空格
s1, s2 = add_space(file_1), add_space(file_2)
# 转化为TF矩阵
cv = TfidfVectorizer(tokenizer=lambda s: s.split())
corpus = [s1, s2]
vectors = cv.fit_transform(corpus).toarray()
# 计算TF系数
return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]))
def initUI(self):
'''
UI布局设计、管理,以及信号槽的连襟
'''
#第一选取文件按钮
lbl_1 = QLabel('请选择输入文件:')
btn_chooseFile_1 = QPushButton("选取文件", self)
#第二选取文件按钮
lbl_2 = QLabel('请选择对比文件:')
btn_chooseFile_2 = QPushButton("选取文件", self)
#输出按钮
lbl_3 = QLabel('重复率:')
export_nmb = QLineEdit()
#推出按钮
qbtn = QPushButton('Quit', self)
qbtn.clicked.connect(QCoreApplication.instance().quit)
#布局管理
grid = QGridLayout()
grid.setSpacing(6)
grid.addWidget(lbl_1, 1, 0)
grid.addWidget(btn_chooseFile_1, 1, 1)
grid.addWidget(lbl_2, 2, 0)
grid.addWidget(btn_chooseFile_2, 2, 1)
grid.addWidget(lbl_3, 3, 0)
grid.addWidget(export_nmb, 3, 1)
grid.addWidget(qbtn, 4, 1)
self.setLayout(grid)
self.setGeometry(500, 300, 500, 300)
self.setWindowTitle('简易查重小工具')
self.cwd = os.getcwd() # 获取当前程序文件位置
def TF():
'''
文章关键词词频输出
'''
fileName_choose, filetype = QFileDialog.getOpenFileName(self, "选取文件", self.cwd) # 起始路径
file_open = open(str(fileName_choose))
file_content = file_open.read()
print(file_content)
btn_chooseFile_1.clicked.connect(TF)
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Checking_tool()
sys.exit(app.exec_())

有时间有精力来再补上这个坑…

参考

以下是参考过的文章,代码其中一些不懂的可作为参考学习。

---------------本文终---------------

文章作者:刘俊

最后更新:2019年03月05日 - 20:03

许可协议: 转载请保留原文链接及作者。