济南网站建设抖音平台,cms影视源码采集,优秀网页设计代码,做惠而浦售后网站赚钱一、介绍
SnowNLP是一个python写的类库#xff0c;可以方便的处理中文文本内容#xff0c;是受到了TextBlob的启发而写的#xff0c;由于现在大部分的自然语言处理库基本都是针对英文的#xff0c;于是写了一个方便处理中文的类库#xff0c;并且和TextBlob不同的是…一、介绍
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 sys
from snownlp import SnowNLPtxt u在文学的海洋中有一部名为《薄雾》的小说它犹如一颗闪耀的明珠让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中我们将探讨这部小说所展现的情感与人性以及它在文学史上的地位。s SnowNLP(txt)
print(s.words)2词性标注TnT 3-gram 隐马
# -*- coding:utf-8 -*-
import sys
from snownlp import SnowNLPtxt u在文学的海洋中有一部名为《薄雾》的小说它犹如一颗闪耀的明珠让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中我们将探讨这部小说所展现的情感与人性以及它在文学史上的地位。s SnowNLP(txt)
for i in s.tags: print(i) 3情感分析朴素贝叶斯算法
现在训练数据主要是买卖东西时的评价所以对其他的一些可能效果不是很好。
情感分析的结果是一个0~1之间的数字数字越大表示这句话越偏向于肯定的态度数字越小表示越偏向于否定的态度。
# -*- coding:utf-8 -*-
import sys
from 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 sys
from snownlp import SnowNLPtxt u在文学的海洋中有一部名为《薄雾》的小说它犹如一颗闪耀的明珠让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中我们将探讨这部小说所展现的情感与人性以及它在文学史上的地位。s SnowNLP(txt)
print(s.pinyin)6繁体转简体Trie树实现的最大匹配
# -*- coding:utf-8 -*-
import sys
from snownlp import SnowNLPtxt u在文學的海洋中有一部名為《薄霧》的小說它猶如一顆閃耀的明珠讓人過目難忘。 這部作品講述了一段發生在上世紀初的跨越階級的愛情故事。 在這篇文學短評中我們將探討這部小說所展現的情感與人性以及它在文學史上的地位。s SnowNLP(txt)
print(s.han)7提取文本关键词TextRank算法
# -*- coding:utf-8 -*-
import sys
from snownlp import SnowNLPtxt u在文学的海洋中有一部名为《薄雾》的小说它犹如一颗闪耀的明珠让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中我们将探讨这部小说所展现的情感与人性以及它在文学史上的地位。s SnowNLP(txt)
print(s.keywords(5))8提取文本摘要TextRank算法
# -*- coding:utf-8 -*-
import sys
from snownlp import SnowNLPtxt u在文学的海洋中有一部名为《薄雾》的小说它犹如一颗闪耀的明珠让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中我们将探讨这部小说所展现的情感与人性以及它在文学史上的地位。s SnowNLP(txt)
print(s.summary(5))10Tokenization分割成句子
# -*- coding:utf-8 -*-
import sys
from snownlp import SnowNLPtxt u在文学的海洋中有一部名为《薄雾》的小说它犹如一颗闪耀的明珠让人过目难忘。这部作品讲述了一段发生在上世纪初的跨越阶级的爱情故事。在这篇文学短评中我们将探讨这部小说所展现的情感与人性以及它在文学史上的地位。s SnowNLP(txt)
print(s.sentences)9tf词频idf逆文档频率可以用于tf-idf关键词提取
# -*- coding:utf-8 -*-
import sys
from snownlp import SnowNLPs SnowNLP([[u这篇, u文章],[u那篇, u论文],[u这个]])print(tf)
print(s.tf)
print(\n)print(idf)
print(s.idf)11文本相似BM25
1. 文本的相似度是通过上面的tf和idf来计算的这里给出的也是词的相似度分析。
# -*- coding:utf-8 -*-
import sys
from snownlp import SnowNLPs SnowNLP([[u这篇, u文章],[u那篇, u论文],[u这个]])print(s.sim([u文章])) 2. 用 sklearn库的句子相似度的计算方法计算 TF 矩阵中两个向量的相似度实际上就是求解两个向量夹角的余弦值点乘积除以二者的模长公式如下 cosθa·b/|a|*|b| from sklearn.feature_extraction.text import CountVectorizer
import numpy as np
from scipy.linalg import normdef tf_similarity(s1, s2):def add_space(s):return .join(s)# 将字中间加入空格s1, s2 add_space(s1), add_space(s2)# 转化为TF矩阵cv CountVectorizer(tokenizerlambda 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, iszipTrue):self.classifier.save(fname, iszip) # 保存最终的模型def load(self, fnamedata_path, iszipTrue):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 probreturn 1-probclass Sentiment(object):def __init__(self):self.classifier Bayes() # 使用的是Bayes的模型def save(self, fname, iszipTrue):self.classifier.save(fname, iszip) # 保存最终的模型def load(self, fnamedata_path, iszipTrue):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 probreturn 1-prob
从上述的代码中classify函数和train函数是两个核心的函数其中train函数用于训练一个情感分类器classify函数用于预测。在这两个函数中都同时使用到的handle函数handle函数的主要工作为对输入文本分词和去停用词。
情感分类的基本模型是贝叶斯模型 Bayes对于贝叶斯模型这里就先介绍一下机器学习算法—朴素贝叶斯的公式详细说明可查看 python版 朴素贝叶斯-基础 - 简书。对于有两个类别c1和c2的分类问题来说其特征为w1,⋯,wn特征之间是相互独立的属于类别c1的贝叶斯模型的基本过程为 其中