python最大的好处就是有无穷无尽的包资源,如何把这些包资源组合起来发挥其应有的价值也是一个很重要的工作。比如NLP的文本摘要提取就有几个现成的可以实现,如snownlp,goose3,sumy,虽然摘要效果未必理想。
后续还会有相关文章对文本摘要进行处理。
代码示例
代码语言:javascript复制import jieba,pkuseg
from snownlp import SnowNLP
from goose3 import Goose
from goose3.text import StopWordsChinese
from sumy.parsers.html import HtmlParser
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lsa import LsaSummarizer as Summarizer
from sumy.nlp.stemmers import Stemmer
from sumy.utils import get_stop_words
# 通过snownlp实现摘要
def gen_summary_snownlp(text):
# 初始化SnowNLP对象
s = SnowNLP(text)
# s = <snownlp.SnowNLP object at 0x000001B16C85CB00>
# 断句
sentences = s.sentences
# 分词
words = s.words
# 词性标注
tags = s.tags
tag = [x for x in tags]
# tags = <zip object at 0x000001B10D642B48>
# 情感分析,返回值为正面情绪的概率,越接近1表示正面情绪,越接近0表示负面情绪
sentiments = s.sentiments
# sentiments = 1.0
# 繁体转简体
han=s.han
# 拼音
pinyin= s.pinyin
# 关键字提取
keyword= s.keywords(10)
# keyword = ['文化', '岭南', '爱国主义', '社会', '研究', '中', '历史', '传统', '近代', '人民']
# 文章摘要
summary= s.summary(10)
print(summary)
# summary = ['(2)确定可能的配电规划方案:在整个电力系统中',
# '规划区在经济发展中的地位对配电网的规划任务有着重要的影响',
# '配电网规划是配电网发展和改造的总体计划',
# '配电网可分为:城市配电网',
# '远期规划要求中期和近期的城市电网建设和改造是远期电网发展目标的一部分',
# '网络结构复杂等学科电力学将电力系统中从降压配电变电站(高压配电变电站)出口到用户端的这一段系统称为配电系统',
# '配电系统是由多种配电设备(或元件)和配电设施所组成的变换电压和直接向终端用户分配电能的一个电力网络系统',
# '(4)确定最佳配电网规划方案',
# '配电网可分为:高压配电网(6~110kV)',
# '配电网规划是指在分析和研究未来负荷增长情况以及城市配电网现状的基础上']
# TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
# TF词频越大越重要,但是文中会的“的”,“你”等无意义词频很大,却信息量几乎为0,这种情况导致单纯看词频评价词语重要性是不准确的。因此加入了idf
# IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t越重要
# TF-IDF综合起来,才能准确的综合的评价一词对文本的重要性。
s = SnowNLP([[u'这篇', u'文章',u'很好', u'老师',u'很好'],
[u'这篇', u'文章', u'很烂'],
[u'那篇', u'论文',u'很好'],
[u'老师', u'不错']])
tf=s.tf
# [{'这篇': 1, '文章': 1, '很好': 2, '老师': 1},
# {'这篇': 1, '文章': 1, '很烂': 1},
# {'那篇': 1, '论文': 1, '很好': 1},
# {'老师': 1, '不错': 1}]
idf=s.idf
# {'这篇': 0.0, '文章': 0.0, '很好': 0.0, '老师': 0.0, '很烂': 0.8472978603872037, '那篇': 0.8472978603872037, '论文': 0.8472978603872037, '不错': 0.8472978603872037}
sim=s.sim([u'论文',u'很好'])
# 返回相似度评分
# [0.0, 0, 0.8776790585684181, 0]
def gen_summary_goose(url):
g = Goose({'stopwords_class': StopWordsChinese})
article = g.extract(url=url)
print(article.cleaned_text[:400])
# 将电力系统中从降压配电变电站(高压配电变电站)出口到用户端的这一段系统称为配电系统。
# 配电系统是由多种配电设备(或元件)和配电设施所组成的变换电压和直接向终端用户分配电能的一个电力网络系统。
# 配电网具有电压等级多,网络结构复杂,设备类型多样,作业点多面广,安全环境相对较差等特点,因此配电网的安全风险因素也相对较多。
# 另外,由于配电网的功能是为各类用户提供电力能源,这就对配网的安全可靠运行提出更高要求。
# 电网电压等级一般可划分为:特高压(1000kV交流及以上和±800kV直流)、超高压(330kV及以上至1000kV以下)、高压(35~220kV)、中压(6~20kV)、低压(0.4kV)五类。
# 我国配电系统的电压等级,根据(Q/GDW 156-2006)《城市电网规划设计导则》的规定,35kV、63kv、110kv为高压配电系统;6kV~10kV(20kV)为中压配电系统;220V(380
def gen_summary_sumy(text):
LANGUAGE = "chinese"
SENTENCES_COUNT = 5
# url方式
# url = "https://en.wikipedia.org/wiki/Automatic_summarization"
# parser = HtmlParser.from_url(url, Tokenizer(LANGUAGE))
# 文件方式
# parser = PlaintextParser.from_file("document.txt", Tokenizer(LANGUAGE))
# 字符串方式
parser = PlaintextParser.from_string(text, Tokenizer(LANGUAGE))
stemmer = Stemmer(LANGUAGE)
summarizer = Summarizer(stemmer)
summarizer.stop_words = get_stop_words(LANGUAGE)
for sentence in summarizer(parser.document, SENTENCES_COUNT):
print(sentence)
# 是由架空线路、电缆、杆塔、配电变压器、隔离开关、无功补偿器及一些附属设施等组成的,在电力网中起重要分配电能作用的网络。
# 另外,由于配电网的功能是为各类用户提供电力能源,这就对配网的安全可靠运行提出更高要求。
# 不仅使得在输电网中所采用的潮流计算常规算法难以在配网潮流计算时得到收敛,还会因不同点故障的短路阻抗角不一致,对保护动作灵敏度和可靠性产生一定影响。
# 在尽可能满足未来用户容量和电能质量的情况下,对可能的各种接线形式、不同的线路数和不同的导线截面,以运行经济性为指标,选择最优或次优方案作为规划改造方案,使电力公司及其有关部门获得最大利益的过程。
# (2)确定可能的配电规划方案:在整个电力系统中,按地区从满足长期供电需要出发,并考虑经济等因素。
if __name__ == '__main__':
inputdir = 'C:PythonPycharmlangprocess\train'
idffile = 'C:PythonPycharmlangprocess\udfidf.txt'
stopwordfile= 'C:PythonPycharmlangprocess\stopwords.txt'
#filename = 'C:PythonPycharmlangprocess\trainC4-LiteratureC4-Literature02.txt'
filename = 'C:PythonPycharmlangprocess配电网.txt'
content = open(filename, 'r', encoding='utf-8', errors='ignore').read()
print('------------------通过snownlp提取摘要------------------------')
gen_summary_snownlp(content)
print('------------------通过goose提取摘要------------------------')
url = 'https://baike.baidu.com/item/配电网?fromtitle=配网&fromid=16611137'
gen_summary_goose(url)
print('------------------通过sumy提取摘要------------------------')
gen_summary_sumy(content)