我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python之自然语言处理库snowNLP

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python之自然语言处理库snowNLP

一、介绍

SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。

GitHub - isnowfy/snownlp: Python library for processing Chinese text

二、snowNLP操作详解

2.1 安装

pip install snownlp 

2.2 功能详解

1)中文分词(Character-Based Generative Model)

# -*- coding:utf-8 -*-import sysfrom snownlp import SnowNLPtxt = u'''在文学的海洋中,有一部名为《薄雾》的小说,它犹如一颗闪耀的明珠,让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中,我们将探讨这部小说所展现的情感与人性,以及它在文学史上的地位。'''s = SnowNLP(txt)print(s.words)

2)词性标注(TnT 3-gram 隐马)

# -*- coding:utf-8 -*-import sysfrom snownlp import SnowNLPtxt = u'''在文学的海洋中,有一部名为《薄雾》的小说,它犹如一颗闪耀的明珠,让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中,我们将探讨这部小说所展现的情感与人性,以及它在文学史上的地位。'''s = SnowNLP(txt)for i in s.tags:    print(i) 

3)情感分析(朴素贝叶斯算法)

现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好。

情感分析的结果是一个0~1之间的数字,数字越大表示这句话越偏向于肯定的态度,数字越小表示越偏向于否定的态度。

# -*- coding:utf-8 -*-import sysfrom snownlp import SnowNLPtxt = u'''在文学的海洋中,有一部名为《薄雾》的小说,它犹如一颗闪耀的明珠,让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中,我们将探讨这部小说所展现的情感与人性,以及它在文学史上的地位。'''s = SnowNLP(txt)print(s.sentiments)   

 4)文本分类(Naiv eBayes)

模型训练(若是想要利用新训练的模型进行情感分析,可修改 snownlp/seg/__init__.py 里的data_path指向刚训练好的文件)

#coding:UTF-8from snownlp import sentimentif __name__ == "__main__":  # 重新训练模型  sentiment.train('./neg.txt', './pos.txt')  # 保存好新训练的模型  sentiment.save('sentiment.marshal')

5)转换成拼音(Trie树实现的最大匹配)

# -*- coding:utf-8 -*-import sysfrom snownlp import SnowNLPtxt = u'''在文学的海洋中,有一部名为《薄雾》的小说,它犹如一颗闪耀的明珠,让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中,我们将探讨这部小说所展现的情感与人性,以及它在文学史上的地位。'''s = SnowNLP(txt)print(s.pinyin)

6)繁体转简体(Trie树实现的最大匹配)

# -*- coding:utf-8 -*-import sysfrom snownlp import SnowNLPtxt = u'''在文學的海洋中,有一部名為《薄霧》的小說,它猶如一顆閃耀的明珠,讓人過目難忘。 這部作品講述了一段發生在上世紀初的跨越階級的愛情故事。 在這篇文學短評中,我們將探討這部小說所展現的情感與人性,以及它在文學史上的地位。'''s = SnowNLP(txt)print(s.han)

7)提取文本关键词(TextRank算法)

# -*- coding:utf-8 -*-import sysfrom snownlp import SnowNLPtxt = u'''在文学的海洋中,有一部名为《薄雾》的小说,它犹如一颗闪耀的明珠,让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中,我们将探讨这部小说所展现的情感与人性,以及它在文学史上的地位。'''s = SnowNLP(txt)print(s.keywords(5))

8)提取文本摘要(TextRank算法)

# -*- coding:utf-8 -*-import sysfrom snownlp import SnowNLPtxt = u'''在文学的海洋中,有一部名为《薄雾》的小说,它犹如一颗闪耀的明珠,让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中,我们将探讨这部小说所展现的情感与人性,以及它在文学史上的地位。'''s = SnowNLP(txt)print(s.summary(5))

10)Tokenization(分割成句子)

# -*- coding:utf-8 -*-import sysfrom snownlp import SnowNLPtxt = u'''在文学的海洋中,有一部名为《薄雾》的小说,它犹如一颗闪耀的明珠,让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中,我们将探讨这部小说所展现的情感与人性,以及它在文学史上的地位。'''s = SnowNLP(txt)print(s.sentences)

 9)tf(词频),idf(逆文档频率:可以用于tf-idf关键词提取)

# -*- coding:utf-8 -*-import sysfrom snownlp import SnowNLPs = SnowNLP([[u'这篇', u'文章'],             [u'那篇', u'论文'],             [u'这个']])print("tf:")print(s.tf)print("\n")print("idf:")print(s.idf)

11)文本相似(BM25)

文本的相似度是通过上面的tf和idf来计算的,这里给出的也是词的相似度分析。

# -*- coding:utf-8 -*-import sysfrom snownlp import SnowNLPs = SnowNLP([[u'这篇', u'文章'],             [u'那篇', u'论文'],             [u'这个']])print(s.sim([u'文章']))

 用 sklearn库的句子相似度的计算方法,计算 TF 矩阵中两个向量的相似度,实际上就是求解两个向量夹角的余弦值:点乘积除以二者的模长,公式如下

cosθ=a·b/|a|*|b|

from sklearn.feature_extraction.text import CountVectorizerimport numpy as npfrom scipy.linalg import norm def tf_similarity(s1, s2):              def add_space(s):        return ' '.join(s)        # 将字中间加入空格    s1, s2 = add_space(s1), add_space(s2)    # 转化为TF矩阵    cv = CountVectorizer(tokenizer=lambda s: s.split())    corpus = [s1, s2]    vectors = cv.fit_transform(corpus).toarray()    # 计算TF系数    return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1])) s1 = '我出生在中国's2 = '我生于中国'print(tf_similarity(s1, s2))  # 结果:0.7302967433402214

2.3 情感分析源码解析

class Sentiment(object):    def __init__(self):        self.classifier = Bayes() # 使用的是Bayes的模型    def save(self, fname, iszip=True):        self.classifier.save(fname, iszip) # 保存最终的模型    def load(self, fname=data_path, iszip=True):        self.classifier.load(fname, iszip) # 加载贝叶斯模型    # 分词以及去停用词的操作        def handle(self, doc):        words = seg.seg(doc) # 分词        words = normal.filter_stop(words) # 去停用词        return words # 返回分词后的结果    def train(self, neg_docs, pos_docs):        data = []        # 读入负样本        for sent in neg_docs:            data.append([self.handle(sent), 'neg'])        # 读入正样本        for sent in pos_docs:            data.append([self.handle(sent), 'pos'])        # 调用的是Bayes模型的训练方法        self.classifier.train(data)    def classify(self, sent):        # 1、调用sentiment类中的handle方法        # 2、调用Bayes类中的classify方法        ret, prob = self.classifier.classify(self.handle(sent)) # 调用贝叶斯中的classify方法        if ret == 'pos':            return prob        return 1-probclass Sentiment(object):    def __init__(self):        self.classifier = Bayes() # 使用的是Bayes的模型    def save(self, fname, iszip=True):        self.classifier.save(fname, iszip) # 保存最终的模型    def load(self, fname=data_path, iszip=True):        self.classifier.load(fname, iszip) # 加载贝叶斯模型    # 分词以及去停用词的操作        def handle(self, doc):        words = seg.seg(doc) # 分词        words = normal.filter_stop(words) # 去停用词        return words # 返回分词后的结果    def train(self, neg_docs, pos_docs):        data = []        # 读入负样本        for sent in neg_docs:            data.append([self.handle(sent), 'neg'])        # 读入正样本        for sent in pos_docs:            data.append([self.handle(sent), 'pos'])        # 调用的是Bayes模型的训练方法        self.classifier.train(data)    def classify(self, sent):        # 1、调用sentiment类中的handle方法        # 2、调用Bayes类中的classify方法        ret, prob = self.classifier.classify(self.handle(sent)) # 调用贝叶斯中的classify方法        if ret == 'pos':            return prob        return 1-prob

从上述的代码中,classify函数和train函数是两个核心的函数,其中,train函数用于训练一个情感分类器,classify函数用于预测。在这两个函数中,都同时使用到的handle函数,handle函数的主要工作为对输入文本分词去停用词。

情感分类的基本模型是贝叶斯模型 Bayes,对于贝叶斯模型,这里就先介绍一下机器学习算法—朴素贝叶斯的公式,详细说明可查看 python版 朴素贝叶斯-基础 - 简书。对于有两个类别c1和c2的分类问题来说,其特征为w1,⋯,wn,特征之间是相互独立的,属于类别c1的贝叶斯模型的基本过程为:

其中: 

来源地址:https://blog.csdn.net/m0_68949064/article/details/135253640

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python之自然语言处理库snowNLP

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

自然语言处理库—Snownlp

SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的。

NLP入门系列之自然语言处理

本章为自然语言处理提供了一个高层次的介绍。解释了自然语言处理是什么,最常见的自然语言处理应用是哪些以及开发自然语言处理应用程序的基本方法是什么。
Python2024-12-03

Python中的自然语言处理入门

今天生成的数据中有很大一部分是非结构化的。非结构化数据包括社交媒体评论、浏览历史记录和客户反馈。您是否发现自己处于需要分析大量文本数据的情况,却不知道如何继续?Python 中的自然语言处理可以提供帮助。

自然语言处理一览

自然语言处理(NLP)正在改变我们人与人之间以及机器与机器之间的交流方式。然而,NLP 公司并不仅仅着眼于创造具有商业利益的产品。

关于自然语言处理之One Hot模型

顾名思义,单热表示从一个零向量开始,如果单词出现在句子或文档中,则将向量中的相应条目设置为 1。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录