基于text_rank的猪市新闻文本摘要

  • 前言
    随着互联网的普及、信息获取途径的增加,每天都有不断涌现的海量信息,海量的信息虽然提供了多样的观点,但也极易造成信息的冗余,一方面增加了获取关键、有效观点的难度和时间成本,另一方面增加了遗漏重要信息的风险。从大量的文本信息中提取重要内容,已成为一个重要的需求,自动文本摘要技术提供了一个高效的解决方案。
    自动文本摘要的技术主要分为抽取式摘要和生成式摘要,抽取式摘要生成技术的基本思想是根据一定的评分标准从原始文本中去抽取其中的多个关键句子或关键单词组成摘要文本,要中所有的内容均来自于原始文本,常用的算法有基于词频的统计法、TextRank算法、聚类法等。生成式摘要的基本思路是利用现存的自然语言理解技术对原始文本进行语法和语义分析,然后使用现存的自然语言生成技术去自动的生成对应的摘要文本,常用的算法有Seq2Seq算法、LSTM算法、RNN算法、基于卷积神经网络的算法及其融合算法。
    本文将收集分类生猪市场关键数据来源,并提出一种基于text_rank的猪市新闻文本摘要方法。
  • 数据来源
    生猪市场数据主要可分为结构化数据(价格、供需等)、非结构化数据(文本、音视频访谈等)。下表汇总了生猪市场数据的主要来源。
    在这里插入图片描述
  • 网页端通过爬虫技术获取与生猪市场有关的资讯数据;
  • 微信公众号两种方式:借助搜狗微信、通过微信公众平台引用文章接口;
  • 研报需要下载pdf文件之后进行转换;
    pdf文件解析成txt文本可借助pdfminer模块。代码如下:
#!/usr/bin/python
#-*- coding: utf-8 -*-

from pdfminer.converter import PDFPageAggregator
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.layout import *
import re
def pdf2txt(file):
    te = []
    fp = open(u'%s'%file, 'rb')
    
    (filename,extension) = os.path.splitext(file)
    parser = PDFParser(fp)
    document = PDFDocument(parser)
    if not document.is_extractable:
        raise PDFTextExtractionNotAllowed
    rsrcmgr = PDFResourceManager(caching = False)
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    replace=re.compile(r'\s+');
    for page in PDFPage.create_pages(document):
        interpreter.process_page(page)
        layout=device.get_result()
        for x in layout:
            if(isinstance(x,LTTextBoxHorizontal)):
                text=re.sub(replace,'',x.get_text())
                te.append(text)
    if len(te) != 0:
        with open('%s.txt'%filename,'w') as f:
            for t in te:
                f.write(t)
        print('转换成功')
    else:
        print('转换失败')
  • 模型框架
    抽取式方法是一种直接从原文中选择若干条重要的句子、单词,并对它们进行排序和重组而形成摘要的方法。
    模型的处理目的是获取句子与句子之间的重要性,主要有这么几个模块:句子划分、句子分词、句子特征向量、句子相似度计算、使用PageRank算法获取句子的重要性排序、提取句子组成摘要。

在这里插入图片描述

  • 模型建立过程
  1. 词向量模型选择
    来源:https://github.com/Embedding/Chinese-Word-Vectors
    在这里插入图片描述
cn_model = KeyedVectors.load_word2vec_format('sgns.financial.bigram',binary=False,unicode_errors='ignore')
#句子切分
def cut_sentences(content):
    sent = re.sub(r'\n','',content)
    sent = re.split(r'(\!|\?|。|!|?|\n|\t|\.{6})',content)
    sent = [sent[i]+'。'for i in range(len(sent))]
    return sent
#抽取式生成文本摘要
def text_summary(sentences,num):
    #获取句子的特征向量
    doc_clean = []
    doc_tokens=[]
    token_list = []
    for t in sentences:
        text = clean_text(t)
        text_s = jieba.cut(text)
        cut_list = [i for i in text_s]
        for i,word in enumerate(cut_list):
            try:
                cut_list[i]=cn_model.wv[word]
            except KeyError:
                cut_list[i] = np.zeros(300)
        sent_tok = np.mean(cut_list,axis=0)
        token_list.append(sent_tok)
        doc_tokens.append(cut_list)
    #获取句子的相似度
    sim_mat = np.zeros([len(token_list),len(token_list)])
    for i in range(len(token_list)):
        for j in range(len(token_list)):
            if i !=j and token_list[i]!= [] and token_list[j] != []:
                sim_mat[i][j] = cosine_similarity(token_list[i].reshape(1,300),token_list[j].reshape(1,300))[0,0]
    #获取句子排名
    summary_text = []
    nx_graph = nx.from_numpy_array(sim_mat)
    nx_graph_=nx.DiGraph(nx_graph)
    nx.draw(nx_graph_,with_labels=True)
    plt.show()
    scores = nx.pagerank(nx_graph)
    rank_sent = sorted(((scores[i],s)for i,s in enumerate(sentences)),reverse=True)
    for i in range(num):
        summary_text.append(rank_sent[i][1])
        #print(rank_sent[i][1])
        
    return summary_text
  • 结果
    原文:
    '河南新乡高金食品有限公司主要收购周边生猪。今日生猪结算价格涨0.15元/公斤,当地良种猪中小场收购价格11.40-11.60元/公斤,体重在120公斤左右。日屠宰量600头左右。低价收购难度稍增,近期猪价或小涨。江苏盐城东台某食企生猪结算价格稳定江苏省盐城东台某食企以收购本场优质猪源为主。今日生猪价格稳定,规模场良种猪收购价参考13.6元/公斤。收购体重110-115公斤。公司日屠宰量3200头。广东深圳某食品公司生猪结算价格稳定广东深圳某食品有限公司主要收购温氏及正邦猪源,部分广东、广西、江西、福建生猪,白条肉主要走超市。明日厂家结算价格稳定,当地外三元到厂结算价参考15.9元/公斤,体重在115公斤左右。公司屠宰量4800头。山东潍坊华宝生猪收购价格暂稳山东潍坊华宝食品有限公司主要收购本地生猪。今日厂家生猪收购价格暂稳,散户好良种猪主流收购价格在13.8元/公斤,品A收13.6元/公斤,体重在110公斤。日宰量维持9000余头。湖北宜昌某厂生猪结算价格下滑湖北宜昌某食品有限公司以收购本地生猪和周边市场生猪为主。今日生猪结算价格降0.2元/公斤,良种猪收购价格参考14.4-14.6元/公斤,昨日良种猪结算价15.0元/公斤,土杂猪结算价13.2元/公斤,均重在115公斤。公司昨日屠宰量3800头左右。养户出栏积极性提高,近期猪价有下滑可能。责任编辑:宋美丽 ’

抽取的结果:
‘今日生猪结算价格涨0.15元/公斤,当地良种猪中小场收购价格11.40-11.60元/公斤,体重在120公斤左右。
湖北宜昌某厂生猪结算价格下滑湖北宜昌某食品有限公司以收购本地生猪和周边市场生猪为主。
今日生猪价格稳定,规模场良种猪收购价参考13.6元/公斤。
今日厂家生猪收购价格暂稳,散户好良种猪主流收购价格在13.8元/公斤,品A收13.6元/公斤,体重在110公斤。
明日厂家结算价格稳定,当地外三元到厂结算价参考15.9元/公斤,体重在115公斤左右。’

结果分析:

  • 抽取式摘要技术简单,可抽取源文本的较重要的信息;

  • 抽取式摘要很大程度取决于原文本的质量,摘要的可读性较弱,只摘取了源文本的较重要的信息;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值