关于天然语言处理系列-文本摘要提取

2022年05月12日 阅读数:5
这篇文章主要向大家介绍关于天然语言处理系列-文本摘要提取,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

python最大的好处就是有无穷无尽的包资源,如何把这些包资源组合起来发挥其应有的价值也是一个很重要的工做。好比NLP的文本摘要提取就有几个现成的能够实现,如snownlp,goose3,sumy,虽然摘要效果未必理想。html

后续还会有相关文章对文本摘要进行处理。python

关于天然语言处理系列-文本摘要提取_html


代码示例

  1. import jieba,pkuseg算法

  2. from snownlp import SnowNLP安全

  3. from goose3 import Goose网络

  4. from goose3.text import StopWordsChineseide

  5. from sumy.parsers.html import HtmlParserurl

  6. from sumy.parsers.plaintext import PlaintextParserspa

  7. from sumy.nlp.tokenizers import Tokenizer设计

  8. from sumy.summarizers.lsa import LsaSummarizer as Summarizercode

  9. from sumy.nlp.stemmers import Stemmer

  10. from sumy.utils import get_stop_words

  11. # 经过snownlp实现摘要

  12. def gen_summary_snownlp(text):

  13. # 初始化SnowNLP对象

  14. s = SnowNLP(text)

  15. # s = <snownlp.SnowNLP object at 0x000001B16C85CB00>

  16. # 断句

  17. sentences = s.sentences

  18. # 分词

  19. words = s.words

  20. # 词性标注

  21. tags = s.tags

  22. tag = [x for x in tags]

  23. # tags = <zip object at 0x000001B10D642B48>

  24. # 情感分析,返回值为正面情绪的几率,越接近1表示正面情绪,越接近0表示负面情绪

  25. sentiments = s.sentiments

  26. # sentiments = 1.0

  27. # 繁体转简体

  28. han=s.han

  29. # 拼音

  30. pinyin= s.pinyin

  31. # 关键字提取

  32. keyword= s.keywords(10)

  33. # keyword = ['文化', '岭南', '爱国主义', '社会', '研究', '中', '历史', '传统', '近代', '人民']

  34. # 文章摘要

  35. summary= s.summary(10)

  36. print(summary)

  37. # summary = ['(2)肯定可能的配电规划方案:在整个电力系统中',

  38. # '规划区在经济发展中的地位对配电网的规划任务有着重要的影响',

  39. # '配电网规划是配电网发展和改造的整体计划',

  40. # '配电网可分为:城市配电网',

  41. # '远期规划要求中期和近期的城市电网建设和改造是远期电网发展目标的一部分',

  42. # '网络结构复杂等学科电力学将电力系统中从降压配电变电站(高压配电变电站)出口到用户端的这一段系统称为配电系统',

  43. # '配电系统是由多种配电设备(或元件)和配电设施所组成的变换电压和直接向终端用户分配电能的一个电力网络系统',

  44. # '(4)肯定最佳配电网规划方案',

  45. # '配电网可分为:高压配电网(6~110kV)',

  46. # '配电网规划是指在分析和研究将来负荷增加状况以及城市配电网现状的基础上']

  47. # TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

  48. # TF词频越大越重要,可是文中会的“的”,“你”等无心义词频很大,却信息量几乎为0,这种状况致使单纯看词频评价词语重要性是不许确的。所以加入了idf

  49. # IDF的主要思想是:若是包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t越重要

  50. # TF-IDF综合起来,才能准确的综合的评价一词对文本的重要性。

  51. s = SnowNLP([[u'这篇', u'文章',u'很好', u'老师',u'很好'],

  52. [u'这篇', u'文章', u'很烂'],

  53. [u'那篇', u'论文',u'很好'],

  54. [u'老师', u'不错']])

  55. tf=s.tf

  56. # [{'这篇': 1, '文章': 1, '很好': 2, '老师': 1},

  57. # {'这篇': 1, '文章': 1, '很烂': 1},

  58. # {'那篇': 1, '论文': 1, '很好': 1},

  59. # {'老师': 1, '不错': 1}]

  60. idf=s.idf

  61. # {'这篇': 0.0, '文章': 0.0, '很好': 0.0, '老师': 0.0, '很烂': 0.8472978603872037, '那篇': 0.8472978603872037, '论文': 0.8472978603872037, '不错': 0.8472978603872037}

  62. sim=s.sim([u'论文',u'很好'])

  63. # 返回类似度评分

  64. # [0.0, 0, 0.8776790585684181, 0]

  65. def gen_summary_goose(url):

  66. g = Goose({'stopwords_class': StopWordsChinese})

  67. article = g.extract(url=url)

  68. print(article.cleaned_text[:400])

  69. # 将电力系统中从降压配电变电站(高压配电变电站)出口到用户端的这一段系统称为配电系统。

  70. # 配电系统是由多种配电设备(或元件)和配电设施所组成的变换电压和直接向终端用户分配电能的一个电力网络系统。

  71. # 配电网具备电压等级多,网络结构复杂,设备类型多样,做业点多面广,安全环境相对较差等特色,所以配电网的安全风险因素也相对较多。

  72. # 另外,因为配电网的功能是为各种用户提供电力能源,这就对配网的安全可靠运行提出更高要求。

  73. # 电网电压等级通常可划分为:特高压(1000kV交流及以上和±800kV直流)、超高压(330kV及以上至1000kV如下)、高压(35220kV)、中压(620kV)、低压(0.4kV)五类。

  74. # 我国配电系统的电压等级,根据(Q/GDW 156-2006)《城市电网规划设计导则》的规定,35kV63kv110kv为高压配电系统;6kV~10kV20kV)为中压配电系统;220V380

  75. def gen_summary_sumy(text):

  76. LANGUAGE = "chinese"

  77. SENTENCES_COUNT = 5

  78. # url方式

  79. # url = "https://en.wikipedia.org/wiki/Automatic_summarization"

  80. # parser = HtmlParser.from_url(url, Tokenizer(LANGUAGE))

  81. # 文件方式

  82. # parser = PlaintextParser.from_file("document.txt", Tokenizer(LANGUAGE))

  83. # 字符串方式

  84. parser = PlaintextParser.from_string(text, Tokenizer(LANGUAGE))

  85. stemmer = Stemmer(LANGUAGE)

  86. summarizer = Summarizer(stemmer)

  87. summarizer.stop_words = get_stop_words(LANGUAGE)

  88. for sentence in summarizer(parser.document, SENTENCES_COUNT):

  89. print(sentence)

  90. # 是由架空线路、电缆、杆塔、配电变压器、隔离开关、无功补偿器及一些附属设施等组成的,在电力网中起重要分配电能做用的网络。

  91. # 另外,因为配电网的功能是为各种用户提供电力能源,这就对配网的安全可靠运行提出更高要求。

  92. # 不只使得在输电网中所采用的潮流计算常规算法难以在配网潮流计算时获得收敛,还会因不一样点故障的短路阻抗角不一致,对保护动做灵敏度和可靠性产生必定影响。

  93. # 在尽量知足将来用户容量和电能质量的状况下,对可能的各类接线形式、不一样的线路数和不一样的导线截面,以运行经济性为指标,选择最优或次优方案做为规划改造方案,使电力公司及其有关部门得到最大利益的过程。

  94. # (2)肯定可能的配电规划方案:在整个电力系统中,按地区从知足长期供电须要出发,并考虑经济等因素。

  95. if __name__ == '__main__':

  96. inputdir = 'C:\Python\Pycharm\langprocess\\train'

  97. idffile = 'C:\Python\Pycharm\langprocess\\udfidf.txt'

  98. stopwordfile= 'C:\Python\Pycharm\langprocess\\stopwords.txt'

  99. #filename = 'C:\Python\Pycharm\langprocess\\train\C4-Literature\C4-Literature02.txt'

  100. filename = 'C:\Python\Pycharm\langprocess\配电网.txt'

  101. content = open(filename, 'r', encoding='utf-8', errors='ignore').read()

  102. print('------------------经过snownlp提取摘要------------------------')

  103. gen_summary_snownlp(content)

  104. print('------------------经过goose提取摘要------------------------')

  105. url = 'https://baike.baidu.com/item/%E9%85%8D%E7%94%B5%E7%BD%91?fromtitle=%E9%85%8D%E7%BD%91&fromid=16611137'

  106. gen_summary_goose(url)

  107. print('------------------经过sumy提取摘要------------------------')

  108. gen_summary_sumy(content)

长按二维码关注“追梦IT人”

关于天然语言处理系列-文本摘要提取_html_02