赞
踩
SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。
from snownlp import SnowNLP s = SnowNLP(u'这个东西真心很赞') s.words # [u'这个', u'东西', u'真心', # u'很', u'赞'] s.tags # [(u'这个', u'r'), (u'东西', u'n'), # (u'真心', u'd'), (u'很', u'd'), # (u'赞', u'Vg')] s.sentiments # 0.9769663402895832 positive的概率 s.pinyin # [u'zhe', u'ge', u'dong', u'xi', # u'zhen', u'xin', u'hen', u'zan'] s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。') s.han # u'「繁体字」「繁体中文」的叫法 # 在台湾亦很常见。' text = u''' 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。 自然语言处理是一门融语言学、计算机科学、数学于一体的科学。 因此,这一领域的研究将涉及自然语言,即人们日常使用的语言, 所以它与语言学的研究有着密切的联系,但又有重要的区别。 自然语言处理并不是一般地研究自然语言, 而在于研制能有效地实现自然语言通信的计算机系统, 特别是其中的软件系统。因而它是计算机科学的一部分。 ''' s = SnowNLP(text) s.keywords(3) # [u'语言', u'自然', u'计算机'] s.summary(3) # [u'因而它是计算机科学的一部分', # u'自然语言处理是一门融语言学、计算机科学、 # 数学于一体的科学', # u'自然语言处理是计算机科学领域与人工智能 # 领域中的一个重要方向'] s.sentences s = SnowNLP([[u'这篇', u'文章'], [u'那篇', u'论文'], [u'这个']]) s.tf s.idf s.sim([u'文章'])# [0.3756070762985226, 0, 0]
$ pip install snownlp
from snownlp import SnowNLP
text = "你的文本内容"
s = SnowNLP(text)
with open("result/snownlp.txt", "a", encoding="utf-8") as file:
file.write("----------\n")
file.write(
f"[原文]:\n{text}\n\n"+
f"[关键词]:\n{s.keywords(5)}\n\n"+
f"[文本摘要]:\n{s.summary(5)}\n\n")
现在提供训练的包括分词,词性标注,情感分析,而且都提供了我用来训练的原始文件
以分词为例
分词在snownlp/seg
目录下
from snownlp import seg
seg.train('data.txt')
seg.save('seg.marshal')
# from snownlp import tag
# tag.train('199801.txt')
# tag.save('tag.marshal')
# from snownlp import sentiment
# sentiment.train('neg.txt', 'pos.txt')
# sentiment.save('sentiment.marshal')
这样训练好的文件就存储为seg.marshal
了,之后修改snownlp/seg/__init__.py
里的data_path
指向刚训练好的文件即可
算法具体原理我会放在下一篇文章,本文重点在应用,这里不详细介绍了
将原文本拆分为句子,在每个句子中过滤掉停用词(可选),并只保留指定词性的单词(可选)。由此可以得到句子的集合和单词的集合。
每个单词作为pagerank中的一个节点。设定窗口大小为k,假设一个句子依次由下面的单词组成:
w1, w2, w3, w4, w5, ..., wn
w1, w2, ..., wk
、w2, w3, ...,wk+1
、w3, w4, ...,wk+2
等都是一个窗口。在一个窗口中的任两个单词对应的节点之间存在一个无向无权的边。
基于上面构成图,可以计算出每个单词节点的重要性。最重要的若干单词可以作为关键词。
参照关键词提取提取出若干关键词。若原文本中存在若干个关键词相邻的情况,那么这些关键词可以构成一个关键词组。
例如,在一篇介绍支持向量机
的文章中,可以找到关键词支持
、向量
、机
,通过关键词组提取,可以得到支持向量机
。
将每个句子看成图中的一个节点,若两个句子之间有相似性,认为对应的两个节点之间有一个无向有权边,权值是相似度。
通过pagerank算法计算得到的重要性最高的若干句子可以当作摘要。
#-*- encoding:utf-8 -*- from __future__ import print_function import sys try: reload(sys) sys.setdefaultencoding('utf-8') except: pass import codecs from textrank4zh import TextRank4Keyword, TextRank4Sentence text = codecs.open('../test/doc/01.txt', 'r', 'utf-8').read() tr4w = TextRank4Keyword() tr4w.analyze(text=text, lower=True, window=2) # py2中text必须是utf8编码的str或者unicode对象,py3中必须是utf8编码的bytes或者str对象 print( '关键词:' ) for item in tr4w.get_keywords(20, word_min_len=1): print(item.word, item.weight) print() print( '关键短语:' ) for phrase in tr4w.get_keyphrases(keywords_num=20, min_occur_num= 2): print(phrase) tr4s = TextRank4Sentence() tr4s.analyze(text=text, lower=True, source = 'all_filters') print() print( '摘要:' ) for item in tr4s.get_key_sentences(num=3): print(item.index, item.weight, item.sentence) # index是语句在文本中位置,weight是权重
运行结果如下:
关键词: 媒体 0.02155864734852778 高圆圆 0.020220281898126486 微 0.01671909730824073 宾客 0.014328439104001788 赵又廷 0.014035488254875914 答谢 0.013759845912857732 谢娜 0.013361244496632448 现身 0.012724133346018603 记者 0.01227742092899235 新人 0.01183128428494362 北京 0.011686712993089671 博 0.011447168887452668 展示 0.010889176260920504 捧场 0.010507502237123278 礼物 0.010447275379792245 张杰 0.009558332870902892 当晚 0.009137982757893915 戴 0.008915271161035208 酒店 0.00883521621207796 外套 0.008822082954131174 关键短语: 微博 摘要: 摘要: 0 0.0709719557171 中新网北京12月1日电(记者 张曦) 30日晚,高圆圆和赵又廷在京举行答谢宴,诸多明星现身捧场,其中包括张杰(微博)、谢娜(微博)夫妇、何炅(微博)、蔡康永(微博)、徐克、张凯丽、黄轩(微博)等 6 0.0541037236415 高圆圆身穿粉色外套,看到大批记者在场露出娇羞神色,赵又廷则戴着鸭舌帽,十分淡定,两人快步走进电梯,未接受媒体采访 27 0.0490428312984 记者了解到,出席高圆圆、赵又廷答谢宴的宾客近百人,其中不少都是女方的高中同学
方式一
$ python setup.py install --user
方式二
$ sudo python setup.py install
方式三
$ pip install textrank4zh --user
方式四
$ sudo pip install textrank4zh
Python 3下需要将上面的python改成python3,pip改成pip3。
$ pip uninstall textrank4zh
jieba >= 0.35
numpy >= 1.7.1
networkx >= 1.9.1
text = "你的文档内容" tr4w = TextRank4Keyword() tr4w.analyze(text=text, lower=True, window=2) # py2中text必须是utf8编码的str或者unicode对象,py3中必须是utf8编码的bytes或者str对象 # print('关键词:') keywords = "" for item in tr4w.get_keywords(5, word_min_len=2): # print(item.word, item.weight) keywords = keywords + " " + item.word # print() # print('关键短语:') key_phrases = "" for phrase in tr4w.get_keyphrases(keywords_num=5, min_occur_num=2): # print(phrase) key_phrases = key_phrases + " "+ phrase tr4s = TextRank4Sentence() tr4s.analyze(text=text, lower=True, source='all_filters') # print() # print('摘要:') summary = "" for item in tr4s.get_key_sentences(num=3): print(item.index, item.weight, item.sentence) # index是语句在文本中位置,weight是权重 summary = summary + "\n" + item.sentence with open("result/textrank4zh.txt", "a",encoding="utf-8") as file: file.write("----------\n") file.write( f"[原文]:\n{text}\n\n"+ f"[关键词]:\n{keywords}\n\n"+ f"[关键短语]:\n{key_phrases}\n\n"+ f"[文本摘要]:\n{summary}\n\n")
报错1
AttributeError: module ‘networkx’ has no attribute ‘from_numpy_matrix’
使用 networkx 3.0 及以上版本,可能会报这个错误;暂时可将版本降低到 1.9.1。
pip3 install networkx==1.9.1
报错2
报错2
ImportError: cannot import name ‘escape’ from ‘cgi’ (/Users/xx/miniconda3/lib/python3.8/cgi.py)
解决方法:修改文件
/Users/xx/miniconda3/lib/python3.8/site-packages/networkx/readwrite/gml.py
将
from cgi import escape
替换为
from html import escape
报错3
ImportError: cannot import name ‘gcd’ from ‘fractions’
如果你的代码中有这样的导入:
from fractions import gcd
你应该将其更改为:
from math import gcd
这样应该就能解决你遇到的 ImportError 问题。
智谱AI是一家诞生于清华大学计算机系,以技术转化成果为基础的公司,专注于研发和提供新一代的认知智能通用模型。
ChatGLM,清华技术成果转化的公司智谱AI研发的支持中英双语的对话机器人。
如下以 Python SDK 为例进行说明,其它编程语言工具包将持续推出
首先请通过如下方式进行安装 SDK 包:
pip install zhipuai
我们升级了最新的模型 GLM-4、GLM-3-Turbo,支持了System Prompt、Function Call、Retrieval、Web_Search等新功能。使用以上新功能需升级最新版本的 Python SDK。如您已安装老版本SDK,请您更新到最新版SDK。
pip install --upgrade zhipuai
from zhipuai import ZhipuAI
import time
client = ZhipuAI(api_key="") # 填写您自己的APIKey
response = client.chat.completions.create(
model="glm-4", # 填写需要调用的模型名称
messages=[
{"role": "user", "content": """提取这段文本的主题,主题需要包含所有实体,不超过300字,只要输出内容
原文:【你的原文内容】"""},
],
)
print(response.choices[0].message)
TF-IDF(Term Frequency-InversDocument Frequency)是一种常用于信息处理和数据挖掘的加权技术。该技术采用一种统计方法,根据字词的在文本中出现的次数和在整个语料中出现的文档频率来计算一个字词在整个语料中的重要程度。它的优点是能过滤掉一些常见的却无关紧要本的词语,同时保留影响整个文本的重要字词。
由于该方法是基于词频统计,个人觉得应用效果不好,这里就不介绍了,可以查看这位大佬的文章
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。