77 lines
62 KiB
Python
77 lines
62 KiB
Python
|
|
import multiprocessing
|
|||
|
|
import re
|
|||
|
|
import time
|
|||
|
|
import networkx as nx
|
|||
|
|
import numpy as np
|
|||
|
|
from textrank4zh import TextRank4Keyword, TextRank4Sentence
|
|||
|
|
from joblib import Parallel, delayed, parallel_backend
|
|||
|
|
import logging
|
|||
|
|
nx.from_numpy_matrix = nx.from_numpy_array
|
|||
|
|
|
|||
|
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
|||
|
|
|
|||
|
|
# 示例文本
|
|||
|
|
text = """中华人民共和国国民经济和社会发展第十四个五年(2021-2025年)规划和2035年远景目标纲要,根据《中共中央关于制定国民经济和社会发展第十四个五年规划和二〇三五年远景目标的建议》编制,主要阐明国家战略意图,明确政府工作重点,引导规范市场主体行为,是我国开启全面建设社会主义现代化国家新征程的宏伟蓝图,是全国各族人民共同的行动纲领。第一篇 开启全面建设社会主义现代化国家新征程十四五时期是我国全面建成小康社会、实现第一个百年奋斗目标之后,乘势而上开启全面建设社会主义现代化国家新征程、向第二个百年奋斗目标进军的第一个五年。第一章 发展环境我国进入新发展阶段,发展基础更加坚实,发展条件深刻变化,进一步发展面临新的机遇和挑战。第一节 决胜全面建成小康社会取得决定性成就十三五时期是全面建成小康社会决胜阶段。面对错综复杂的国际形势、艰巨繁重的国内改革发展稳定任务特别是新冠肺炎疫情严重冲击,以习近平同志为核心的党中央不忘初心、牢记使命,团结带领全党全国各族人民砥砺前行、开拓创新,奋发有为推进党和国家各项事业。全面深化改革取得重大突破,全面依法治国取得重大进展,全面从严治党取得重大成果,国家治理体系和治理能力现代化加快推进,中国共产党领导和我国社会主义制度优势进一步彰显。经济运行总体平稳,经济结构持续优化,国内生产总值突破100万亿元。创新型国家建设成果丰硕,在载人航天、探月工程、深海工程、超级计算、量子信息、复兴号高速列车、大飞机制造等领域取得一批重大科技成果。决战脱贫攻坚取得全面胜利,5575万农村贫困人口实现脱贫,困扰中华民族几千年的绝对贫困问题得到历史性解决,创造了人类减贫史上的奇迹。农业现代化稳步推进,粮食年产量连续稳定在1.3万亿斤以上。1亿农业转移人口和其他常住人口在城镇落户目标顺利实现,区域重大战略扎实推进。污染防治力度加大,主要污染物排放总量减少目标超额完成,资源利用效率显著提升,生态环境明显改善。金融风险处置取得重要阶段性成果。对外开放持续扩大,共建一带一路成果丰硕。人民生活水平显著提高,教育公平和质量较大提升,高等教育进入普及化阶段,城镇新增就业超过6000万人,建成世界上规模最大的社会保障体系,基本医疗保险覆盖超过13亿人,基本养老保险覆盖近10亿人,城镇棚户区住房改造开工超过2300万套。新冠肺炎疫情防控取得重大战略成果,应对突发事件能力和水平大幅提高。公共文化服务水平不断提高,文化事业和文化产业繁荣发展。国防和军队建设水平大幅提升,军队组织形态实现重大变革。国家安全全面加强,社会保持和谐稳定。十三五规划目标任务胜利完成,我国经济实力、科技实力、综合国力和人民生活水平跃上新的大台阶,全面建成小康社会取得伟大历史性成就,中华民族伟大复兴向前迈出了新的一大步,社会主义中国以更加雄伟的身姿屹立于世界东方。第二节 我国发展环境面临深刻复杂变化当前和今后一个时期,我国发展仍然处于重要战略机遇期,但机遇和挑战都有新的发展变化。当今世界正经历百年未有之大变局,新一轮科技革命和产业变革深入发展,国际力量对比深刻调整,和平与发展仍然是时代主题,人类命运共同体理念深入人心。同时,国际环境日趋复杂,不稳定性不确定性明显增加,新冠肺炎疫情影响广泛深远,世界经济陷入低迷期,经济全球化遭遇逆流,全球能源供需版图深刻变革,国际经济政治格局复
|
|||
|
|
|
|||
|
|
def process_text_segment(text_segment, num_sentences):
|
|||
|
|
tr4w = TextRank4Keyword()
|
|||
|
|
tr4w.analyze(text=text_segment, lower=True, window=5)
|
|||
|
|
keywords = [(item.word, item.weight) for item in tr4w.get_keywords(30, word_min_len=4)]
|
|||
|
|
|
|||
|
|
tr4s = TextRank4Sentence()
|
|||
|
|
tr4s.analyze(text=text_segment, lower=True, source='all_filters')
|
|||
|
|
summaries = [item.sentence for item in tr4s.get_key_sentences(num=num_sentences)]
|
|||
|
|
|
|||
|
|
return keywords, summaries
|
|||
|
|
|
|||
|
|
|
|||
|
|
def split_text_by_sentences(text, n_parts):
|
|||
|
|
"""Split the text into n_parts based on sentences using regular expressions."""
|
|||
|
|
sentences = re.split(r'(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=\.|\?|\!)\s', text)
|
|||
|
|
k, m = divmod(len(sentences), n_parts)
|
|||
|
|
return [' '.join(sentences[i * k + min(i, m):(i + 1) * k + min(i + 1, m)]) for i in range(n_parts)]
|
|||
|
|
from nltk.tokenize import sent_tokenize
|
|||
|
|
def split_text_balanced(text, n_parts):
|
|||
|
|
sentences = sent_tokenize(text)
|
|||
|
|
min_sentences_per_part = 10
|
|||
|
|
n_parts = max(1, min(n_parts, len(sentences) // min_sentences_per_part))
|
|||
|
|
k, m = divmod(len(sentences), n_parts)
|
|||
|
|
return [' '.join(sentences[i * k + min(i, m):(i + 1) * k + min(i + 1, m)]) for i in range(n_parts)]
|
|||
|
|
|
|||
|
|
from concurrent.futures import ProcessPoolExecutor, as_completed
|
|||
|
|
def TextRank(text,num_sentences, n_cores=multiprocessing.cpu_count()):
|
|||
|
|
start_time = time.time()
|
|||
|
|
logging.info("TextRank 函数开始执行")
|
|||
|
|
|
|||
|
|
# text_parts = split_text_by_sentences(text, n_cores)
|
|||
|
|
text_parts = split_text_balanced(text, n_cores)
|
|||
|
|
all_keywords = []
|
|||
|
|
all_summaries = []
|
|||
|
|
|
|||
|
|
# with ProcessPoolExecutor (max_workers=n_cores) as executor:
|
|||
|
|
# future_to_part = {executor.submit(process_text_segment, part, num_sentences): part for part in text_parts}
|
|||
|
|
# for future in as_completed(future_to_part):
|
|||
|
|
# keywords, summaries = future.result()
|
|||
|
|
# all_keywords.extend(keywords)
|
|||
|
|
# all_summaries.extend(summaries)
|
|||
|
|
for part in text_parts:
|
|||
|
|
keywords, summaries = process_text_segment(part, num_sentences)
|
|||
|
|
all_keywords.extend(keywords)
|
|||
|
|
all_summaries.extend(summaries)
|
|||
|
|
for word, weight in sorted(all_keywords, key=lambda x: x[1], reverse=True):
|
|||
|
|
print(word, weight)
|
|||
|
|
|
|||
|
|
all_summaries = "".join(all_summaries)
|
|||
|
|
|
|||
|
|
end_time = time.time()
|
|||
|
|
elapsed_time = end_time - start_time
|
|||
|
|
logging.info(f"TextRank 函数执行结束,耗时: {elapsed_time:.2f} 秒")
|
|||
|
|
|
|||
|
|
return all_summaries
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == '__main__':
|
|||
|
|
# 传入必要的参数
|
|||
|
|
num_sentences = 80
|
|||
|
|
summary = TextRank(text, num_sentences)
|