sklearn实现TextRank自动摘要

[python] view plain copy

  1. # 利用TextRank,提取文本摘要
  2. import jieba
  3. import networkx as nx
  4. from sklearn.feature_extraction.text import TfidfVectorizer, TfidfTransformer
  5. def cut_sentence(sentence):
  6.     “””
  7.     分句
  8.     :param sentence:
  9.     :return:
  10.     “””
  11.     # if not isinstance(sentence, unicode):
  12.     # sentence = sentence.decode(‘utf-8’)
  13.     delimiters = frozenset(u‘。!?’)
  14.     buf = []
  15.     for ch in sentence:
  16.         buf.append(ch)
  17.         if delimiters.__contains__(ch):
  18.             yield .join(buf)
  19.             buf = []
  20.     if buf:
  21.         yield .join(buf)
  22. def load_stopwords(path=‘./stopwordshit.txt’):
  23.     “””
  24.     加载停用词
  25.     :param path:
  26.     :return:
  27.     “””
  28.     with open(path,encoding=“utf-8”) as f:
  29.         # stopwords = filter(lambda x: x, list(map(lambda x: x.strip(), f.readlines())))
  30.         stopwords = list(map(lambda x: x.strip(), f.readlines()))
  31.     stopwords.extend([‘ ‘‘\t’‘\n’])
  32.     return frozenset(stopwords)
  33.    return filter(lambda x: not stopwords.__contains__(x), jieba.cut(sentence))
  34. def get_abstract(content, size=3):
  35.     “””
  36.     利用textrank提取摘要
  37.     :param content:
  38.     :param size:
  39.     :return:
  40.     “””
  41.     docs = list(cut_sentence(content))
  42.     tfidf_model = TfidfVectorizer(tokenizer=jieba.cut, stop_words=load_stopwords())
  43.     tfidf_matrix = tfidf_model.fit_transform(docs)
  44.     normalized_matrix = TfidfTransformer().fit_transform(tfidf_matrix)
  45.     similarity = nx.from_scipy_sparse_matrix(normalized_matrix * normalized_matrix.T)
  46.     scores = nx.pagerank(similarity)
  47.     tops = sorted(scores.items(), key=lambda x: x[1], reverse=True)
  48.     size = min(size, len(docs))
  49.     indices = list(map(lambda x: x[0], tops))[:size]
  50.     return list(map(lambda idx: docs[idx], indices))
  51. text = u”’
  52. 上午,新京报记者从北京市相关部门召开的新闻发布会上获悉,北京市将于4月16日起正式启动北京市首批积分落户申报。对于申报人“在京连续缴纳社会保险7年及以上”的资格条件,如何认定?是否允许存在补缴记录?根据细则规定,“截至积分落户申报工作启动的上一年度12月31日,申请人应在京连续缴纳社会保险满7年(补缴记录累计不超过5个月),养老、医疗、失业、工伤、生育各项险种的缴费应符合北京市社会保险相关规定。实际缴费记录应在积分落户申报工作启动的上一年度12月31日前形成,且年度积分落户申报阶段开始前缴费状态正常。”
  53.   北京市人力社保局积分落户服务中心相关负责人介绍,在京连续缴纳社保7年及以上是根据本市社会保险相关规定确定不同险种的缴纳计算起始时间。考虑到申请人工作调动等情况,会存在个别月份的社会保险费补缴,故规定为补缴记录累计不超过5个月。期间断缴未及时补缴的,即使未超过5个月也不能算为连续缴纳。因银行托收或社保经办机构原因造成断缴,如果在年度积分落户申报启动的上一年度12月31日前及时进行了补缴,将不会计入资格条件补缴月数。
  54. ”’
  55. # 读取文件
  56. # f=open(r”D:\temp.txt”,encoding=”utf-8″)
  57. # text=f.read()
  58. # f.close()
  59. for i in get_abstract(text,3):
  60.     print(i)