abstract.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #!/usr/bin/python3.6
  2. # -*- coding: utf-8 -*-
  3. # @Author : lijunliang
  4. # @Email : lijunliang@topnet.net.cn
  5. # @File : abstract.py
  6. # @Software: PyCharm
  7. """
  8. 获取文本摘要
  9. """
  10. from gensim.summarization.summarizer import summarize
  11. import jieba.posseg as psg
  12. import re
  13. def split(src: str) -> (int, str):
  14. """
  15. 生成满足gensim抽取摘要需要的分词文本。
  16. :param src:
  17. :return:
  18. """
  19. seg_reg = re.compile("\n+")
  20. src = seg_reg.sub("", src)
  21. words = psg.cut(src)
  22. words = [w + "." if f == 'x' and len(w) > 0 and str(w).endswith('。') else w for w, f in words]
  23. return len(words), ' '.join(words)
  24. def make_summary(src: str, ws_max: int = 200, ws_min: int = 50, doc_radio: float = .1) -> str:
  25. """
  26. 生成摘要
  27. :param src:
  28. :param ws_max:
  29. :param ws_min:
  30. :param doc_radio:
  31. :return:
  32. """
  33. l, ws = split(src)
  34. # 取词200个以内,默认整个文档的10%,但也不能少于50个词
  35. _ld = int(l * doc_radio)
  36. _l = max(min(_ld, ws_max), ws_min)
  37. summary = str(summarize(ws, word_count=_l))
  38. summary = summary.replace(' ', '').replace('.', '')
  39. return summary
  40. if __name__ == '__main__':
  41. text="本项目位于广州兴丰生活垃圾卫生填埋场内,主要工作内容为电力接入系统建设项目的采购、施工(含竣工试验)、试运行等实行全过程工程承包。包括变压器、高低压开关柜、电力电缆、密集母线、配电箱、电气二次设备、安全监控、防雷接地(沼气发电厂范围)等设备的采购、安装、调试、远动联调、试运行、竣工验收等。另需在现场一期渗沥液处理厂扩容工程10kV高压开关室新增一个高压开关间隔及母线连接,并需完成相关电缆敷设等。 "
  42. ret=make_summary(text,ws_min=1)
  43. print(ret)