哈尔滨seo服务,免费优化关键词,电商网站推广渠道,网站建设 招聘需求我们基于python代码#xff0c;使用PyQt5创建图形用户界面#xff08;GUI#xff09;#xff0c;同时支持中英文两种语言的文本论文文献关键信息提取。
PyQt5#xff1a;用于创建GUI应用程序。 jieba#xff1a;中文分词库#xff0c;用于中文文本的处理。 re#xff… 我们基于python代码使用PyQt5创建图形用户界面GUI同时支持中英文两种语言的文本论文文献关键信息提取。
PyQt5用于创建GUI应用程序。 jieba中文分词库用于中文文本的处理。 re正则表达式模块用于文本清理和句子分割。 numpy提供数值计算能力如数组操作、矩阵运算等主要用于TextRank算法的实现。
import sys
import re
import jieba
import numpy as np
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,QHBoxLayout, QTextEdit, QPushButton, QLabel,QMessageBox, QSpinBox, QFileDialog, QComboBox)
from PyQt5.QtCore import Qtclass TextRankSummarizer:def __init__(self, languagechinese):self.language languageself.stopwords self.load_stopwords()# 初始化jieba中文分词器if language chinese:jieba.initialize()def load_stopwords(self):内置停用词表if self.language chinese:return {的, 了, 在, 是, 我, 有, 和, 就, 不, 人, 都, 一, 一个, 也, 要}else: # 英文停用词return {a, an, the, and, or, but, if, is, are, of, to, in, on}def preprocess_text(self, text):文本预处理# 清洗特殊字符text re.sub(r[^\w\s。.?], , text)# 分句处理if self.language chinese:sentences re.split(r[。], text)else:sentences re.split(r[.!?], text)return [s.strip() for s in sentences if len(s) 2]def calculate_similarity(self, sentence, other_sentence):计算句子相似度words1 [w for w in (jieba.cut(sentence) if self.language chinese else sentence.lower().split())if w not in self.stopwords]words2 [w for w in(jieba.cut(other_sentence) if self.language chinese else other_sentence.lower().split())if w not in self.stopwords]# 使用Jaccard相似度intersection len(set(words1) set(words2))union len(set(words1) | set(words2))return intersection / union if union ! 0 else 0def textrank(self, sentences, top_n5, damping_factor0.85, max_iter100):TextRank算法实现similarity_matrix np.zeros((len(sentences), len(sentences)))# 构建相似度矩阵for i in range(len(sentences)):for j in range(len(sentences)):if i ! j:similarity_matrix[i][j] self.calculate_similarity(sentences[i], sentences[j])# 归一化矩阵row_sum similarity_matrix.sum(axis1)normalized_matrix similarity_matrix / row_sum[:, np.newaxis]# 初始化得分scores np.ones(len(sentences))# 迭代计算for _ in range(max_iter):prev_scores np.copy(scores)for i in range(len(sentences)):scores[i] (1 - damping_factor) damping_factor * np.sum(normalized_matrix[i, :] * prev_scores)if np.linalg.norm(scores - prev_scores) 1e-5:break# 获取重要句子索引ranked_indices np.argsort(scores)[::-1][:top_n]return sorted(ranked_indices)def summarize(self, text, ratio0.2):生成摘要sentences self.preprocess_text(text)if len(sentences) 3:return 文本过短无法生成有效摘要top_n max(1, int(len(sentences) * ratio))important_indices self.textrank(sentences, top_ntop_n)# 按原文顺序排列selected_sentences [sentences[i] for i in sorted(important_indices)]# 中文使用句号连接英文使用.连接separator 。 if self.language chinese else . return separator.join(selected_sentences) (。 if self.language chinese else .)class MainWindow(QMainWindow):def __init__(self):super().__init__()# 初始化摘要器self.summarizer TextRankSummarizer()# 界面设置self.setup_ui()def setup_ui(self):self.setWindowTitle(TextRank文本摘要工具)self.setGeometry(100, 100, 1000, 800)main_widget QWidget()layout QVBoxLayout()# 输入区self.input_text QTextEdit()self.input_text.setPlaceholderText(在此粘贴需要摘要的文本建议500字以上...)# 控制区control_layout QHBoxLayout()self.ratio_spin QSpinBox()self.ratio_spin.setRange(5, 50)self.ratio_spin.setValue(20)self.ratio_spin.setSuffix(%)self.lang_combo QComboBox()self.lang_combo.addItems([中文, 英文])self.summarize_btn QPushButton(生成摘要)self.import_btn QPushButton(导入文件)self.clear_btn QPushButton(清空)control_layout.addWidget(QLabel(摘要比例))control_layout.addWidget(self.ratio_spin)control_layout.addWidget(QLabel(语言))control_layout.addWidget(self.lang_combo)control_layout.addWidget(self.import_btn)control_layout.addWidget(self.summarize_btn)control_layout.addWidget(self.clear_btn)# 输出区self.output_text QTextEdit()self.output_text.setReadOnly(True)# 布局组合layout.addWidget(QLabel(输入文本))layout.addWidget(self.input_text)layout.addLayout(control_layout)layout.addWidget(QLabel(摘要结果))layout.addWidget(self.output_text)main_widget.setLayout(layout)self.setCentralWidget(main_widget)# 信号连接self.summarize_btn.clicked.connect(self.generate_summary)self.import_btn.clicked.connect(self.import_file)self.clear_btn.clicked.connect(self.clear_content)self.lang_combo.currentTextChanged.connect(self.change_language)def change_language(self, lang):self.summarizer TextRankSummarizer(chinese if lang 中文 else english)def generate_summary(self):text self.input_text.toPlainText().strip()if not text:QMessageBox.warning(self, 输入错误, 请输入需要摘要的文本)returnratio self.ratio_spin.value() / 100summary self.summarizer.summarize(text, ratio)self.output_text.setPlainText(summary)def import_file(self):path, _ QFileDialog.getOpenFileName(self, 打开文本文件, ,文本文件 (*.txt);;所有文件 (*.*))if path:try:with open(path, r, encodingutf-8) as f:self.input_text.setPlainText(f.read())except Exception as e:QMessageBox.critical(self, 错误, f文件读取失败\n{str(e)})def clear_content(self):self.input_text.clear()self.output_text.clear()if __name__ __main__:app QApplication(sys.argv)window MainWindow()window.show()sys.exit(app.exec_())