技巧:SnowNLP,中文语言处理的必备工具
优采云 发布时间: 2022-12-26 00:58技巧:SnowNLP,中文语言处理的必备工具
我是@老KPlaycode,专注于分享实战项目和最新行业资讯,累计分享超过1000个实战项目!
前言
自然语言处理是目前人工智能最热门的方向之一。 很多致力于人工智能的小伙伴都选择了自然语言处理作为自己的研究方向。 但对于中文的nlp工作,由于中英文语法结构的差异,国际上常用的几个nlp基础库在中文处理上表现不佳,而SnowNLP给了中文自然语言处理研究者一个不一样的选择。
SnowNLP是一个基于Python编写的工具库,可以轻松处理中文文本内容。 SnowNLP的技术框架参考了英文自然语言处理工具库TextBlob,但SnowNLP没有参考NLTK库,所有算法均由isnowfy实现。
跟着我一步步了解这个库吧!
安装
打开cmd,通过pip命令安装snownlp工具。 具体代码如下:
pip install snownlp
导入库
通过 from...import... 语句将 SnownLP 类从 snownlp 导入到项目中。 具体代码如下:
from snownlp import SnowNLP
中文分词
中文分词功能是通过Character-Based Generatvie模型实现的。 模型的具体内容可以参考论文《哪个更适合中文分词,生成模型还是判别模型? 具体代码如下:
s = SnowNLP(u'SnowNLP类似NLTK,是针对中文处理的一个Python工具库。')
words = s.words
print(words)
打印结果:
['SnowNLP', '类似', 'NLTK,', '是', '针对', '中文', '处理', '的', '一个', 'Python', '工具', '库', '。']
词性标注
使用隐马尔可夫模型实现词性标注功能,使用了TnT和3-gram。 详情请参考论文《TnT -- A Statistical Part-of-Speech Tagger》。 具体代码如下:
s = SnowNLP(u'SnowNLP类似NLTK,是针对中文处理的一个Python工具库。')
tags = s.tags
print(list(tags))
打印结果:
[('SnowNLP', 'Dg'), ('类似', 'v'), ('NLTK,', 'Dg'), ('是', 'v'), ('针对', 'p'), ('中文', 'nz'), ('处理', 'v'), ('的', 'u'), ('一个', 'm'), ('Python', 'q'), ('工具', 'n'), ('库', 'n'), ('。', 'w')]
情绪分析
它是使用通用的情感分析模型实现的,但目前的训练集来自在线商城平台的评估。 如果您需要对特定领域进行情感分析,可以导入数据进行训练,以提高您的情感分析模型在应用场景中的准确率(自主训练见后续模型训练),具体代码如下:
s = SnowNLP(u'SnowNLP类似NLTK,是针对中文处理的一个Python工具库。')
sentiments = s.sentiments
print(sentiments)
打印结果:
0.8483635366341422
这里指的是这段话是积极情绪的概率是84%。 一般我们用50%作为分界线来区分正负。
文本分类
通过阅读源码可以看出,情感分析模型是通过朴素贝叶斯方法实现的。 我们可以调用贝叶斯接口用自己的数据进行训练,或者加载自己的模型实现自定义的文本分类功能。 具体代码如下:
from snownlp.classification.bayes import Bayes
cls = Bayes()
cls.load(r'需要加载的文件名')
c = cls.classify(u'SnowNLP类似NLTK,是针对中文处理的一个Python工具库。')
打印结果:
(1, 0.828933234545427)
这里表示文本被归为类别1的概率为82%
转换为拼音
该函数是通过Trie树实现的最大匹配,具体代码如下:
s = SnowNLP(u'SnowNLP类似NLTK,是针对中文处理的一个Python工具库。')
pin = s.pinyin
print(pin)
打印结果:
['SnowNLP', 'lei', 'si', 'NLTK,', 'shi', 'zhen', 'dui', 'zhong', 'wen', 'chu', 'li', 'de', 'yi', 'ge', 'Python', 'gong', 'ju', 'ku', '。']
繁体到简体
这个函数也是通过Trie树实现的最大匹配,具体代码如下:
s = SnowNLP(u'SnowNLP類似NLTK,是針對中文處理的一個Python工具庫。')
han = s.han
print(han)
打印结果:
SnowNLP类似NLTK,是针对中文处理的一个Python工具库。
文本分割
文本分割的功能可以通过极其简洁的语句来实现。 具体代码如下:
paragraph = u'SnowNLP类似NLTK,是针对中文处理的一个Python工具库。使用简单、功能强大。'
u'可以实现包括中文分词、词性标注、情感分析等在内的功能。是中文语言处理研究者不可多得的研究工具。'
u'工具库参考了TextBlob的文档结构,对新手使用者相当友好...'
s = SnowNLP(paragraph)
sent = s.sentences
print(sent)
打印结果:
['SnowNLP类似NLTK', '是针对中文处理的一个Python工具库', '使用简单、功能强大', '可以实现包括中文分词、词性标注、情感分析等在内的功能', '是中文语言处理研究者不可多得的研究工具', '工具库参考了TextBlob的文档结构', '对新手使用者相当友好...']
提取文本关键词
通过受Google的page-rank模型启发的text-rank模型,可以实现对文本关键词的判断和提取。 有关模型的详细信息,请参阅论文“TextRank: Bringing Order into Texts”。 具体代码如下:
s = SnowNLP(paragraph)
keys = s.keywords(3)
print(keys)
打印结果:
['中文', '工具', '标注']
keywords是SnowNLP类下的一个方法,调用时需要输入2个可选参数:
提取文本摘要
所选模型是文本排名。 具体请参考提取文本关键词。 具体代码如下:
s = SnowNLP(paragraph)
summ = s.summary(2)
print(summ)
打印结果:
['是针对中文处理的一个Python工具库', '可以实现包括中文分词、词性标注、情感分析等在内的功能']
summary是SnowNLP类下的一个方法,调用时有一个可选参数需要输入:
tf-idf
tf-idf 是一种常用的信息检索和数据加权统计模型工具。 它通过词频(TF)与逆文本频率(IDF)的比值来判断词在文档中的重要性。 SnowNLP 还提供了计算 tf-idf 的工具。
要进行后面提到的tf-idf计算和相似度计算,必须先对句子进行分词和分词。 具体代码如下:
splits = [['SnowNLP', '类似', 'NLTK,', '是', '针对', '中文', '处理', '的', '一个', 'Python', '工具', '库', '。'],
['使用', '简单', '、', '功能', '强大', '。'],
<p>
['可以', '实现', '包括', '中文', '分词', '、', '词', '性', '标注', '、', '情感', '分析', '等', '在内', '的', '功能', '。'],
['是', '中文', '语言', '处理', '研究者', '不可', '多', '得', '的', '研究', '工具', '。'],
['工具', '库', '参考', '了', 'TextBlob', '的', '文', '档', '结构', ',', '对', '新手', '使用者', '相当', '友好', '...']]
s = SnowNLP(splits)</p>
然后,通过相应的熟悉就可以得到tf和idf的值
tf = s.tf
print(tf)
idf = s.idf
print(idf)
打印结果:
[{'SnowNLP': 1, '类似': 1, 'NLTK,': 1, '是': 1, '针对': 1, '中文': 1, '处理': 1, '的': 1, '一个': 1, 'Python': 1, '工具': 1, ...}]
{'SnowNLP': 1.0986122886681098, '类似': 1.0986122886681098, 'NLTK,': 1.0986122886681098, '是': 0.33647223662121295, '针对': 1.0986122886681098, '中文': -0.33647223662121295, '处理': 0.33647223662121295, '的': -1.0986122886681098, ...}
文本相似度
通过经典的检索算法BM25原理,实现文本相似度的简单判断和计算。
和tf-idf的计算要求一样,需要对输入的文本句子进行预处理,即分句和分词的形式。 有关详细信息,请参阅 tf-idf 部分。 实现代码如下:
s = SnowNLP(splits)
sim = s.sim([u'中文', u'语言', u'是', '一个', '研究', '工具', '。'])
print(sim)
打印结果:
[-0.334122934736348, -1.4437615292558321, -1.2504480547109145, 0.7841955519453601, -0.30244695426625884]
以上结果表明“汉语是一种研究工具”。 上述结果显示了这句话与语料库中的五个从句之间的相似性。
模型训练
该库可以通过训练和导入模型实现自定义分词、词性标注、情感分析等功能。 详情请看下面的代码:
from snownlp import seg
seg.train('data.txt')
seg.save('seg.marshal')
Seg 是一个分词模型。 通过train方法,可以传入训练所需的数据语料,通过save保存训练好的新模型。
保存文件名和后缀不是必须的,但要指明保存文件的路径。
保存的模型可以加载调用。
上述逻辑同样适用于词性标注和情感分析
from snownlp import tag
tag.train('data.txt')
tag.save('tag.marshal')
tag是词性标注的模型,调用方式(train、save、load)和函数功能(tag和tag_all)和seg一样
from snownlp import sentiment
sentiment.train('neg.txt', 'pos.txt')
sentiment.save('sentiment.marshal')
情感是情感分类的模型。 调用train方法需要传入两个文档,分别是negative corpus和positive corpus。
总结
SnowNLP 是一个非常好的库,它还在不断完善中。 自然还有可以优化的地方。 老K总结了以下几点:
我是@老KPlaycode,专注于分享实战项目和最新行业资讯,累计分享超过1000个实战项目!
魏新宇回复谢某/nlp/ 获取相关学习资源
技巧:我们怎么从零开始学会SEO?
其实对于SEO小白来说,多读书,多做事,才能让自己掌握的知识更加全面。 如果别人有一个标准的搜索引擎优化系统,那几乎是不可能的。 敢说我们可以100%保证新站完全排名。
1.做一个自己的网站
对于一个SEO站长来说,不建立自己的网站是绝对不可能的。 即使第一个网站不好,没有排名,你也需要先过一遍。 成功了,以后就是自己的第一了。 在这种情况下,您一定不要沉迷于各种 SEO 教程。 有些教程可能会练习几年。 对于现在的百度来说,需要创新很多方法,测试各种操作,了解搜索引擎需要什么,需要什么样的操作,这样网站的排名才会更好,更容易出图等等在。
至于建站,其实市面上有很多CMS,比如DEDECMS,也就是织梦,适合初学者。 不会码字的可以百度。 通过搜索可以得到很多相关的标签代码和织梦教程视频。 织梦梦是因为它是中国制造。 有很多,所以漏洞也很多。 织梦,号称漏洞之王,如果没有长期的补丁和修复,或者没有很好的安全能力,还是少用为妙。
WordPress是由PHP开发的博客平台,适合个人博主使用。 现在已经发展了很多,适合企业使用。 此外,此 CMS 不需要您知道如何编码。 您只需安装各种插件和主题即可使用。 而且安全系数非常高。 据统计,全球39%的网站都在使用WordPress,其中包括美国的白宫网站。
PHPCMS、thinkPHP和Empire,相信一些资深老站长都听说过这三个CMS。 Empire用的人多,框架很好,适合已经深入了解的站长。 至于php cms ,是盛大开发的。 好久没更新了,忘记怎么玩了,包括thinkPHP很少用。
2. 看百度*和算法
俗话说,要想把一件事做好,就要了解它,了解其中的规律,这样做起来就容易多了。
百度*基于用户、搜索引擎、站长三个维度来写,告诉站长需要做哪些操作才能符合搜索引擎优化,什么样的内容才能让用户喜欢,网站的排名才会不断提升上升。
网站算法基于黑灰产业链进行覆盖打击,让百度搜索引擎拥有健康的搜索生态。 网站符合 SEO 标准。
3.掌握SEO的基础知识
技术行业有分工,每个行业都会有进入该行业的人需要掌握的专业术语,SEO的专业术语包括:外部链接、内部链接、锚文本、友情链接、超链接、 TDK标签、死链接、301、404、黑帽、白帽、灰帽、蜘蛛、寄生虫、劫持、快照、关键词等,只有理解了里面的含义,才能做得更好。
4. SEO是一件无聊的事情
其实说白了,SEO本身就是一个鸡肋的行业,就是不停的给网站加内容,做外链,做友链,做内链等等,但是从别人的角度来看,我们填充的内容是否是可以帮助他们的,不管是百度的稀缺内容,如果我们不能帮助用户,搜索引擎肯定很难给我们的网站相应的排名。
5. 基于数据的营销分析
最常见的SEO就是数据、权重、关键词排名、页面质量、点击率、停留时间、热图等,这些都是我们经常用来分析用户行为的工具和词汇。 比如我们的网站文章,文章的标题怎么写才能被搜索引擎抓取,怎么让用户搜索的更自然,标题中的关键词怎么排名,这些都需要合理的分析,然后才能做到做好。 搜索引擎优化优化。
这一切都是基于SEO的思想。 我们之所以要自己建网站,是因为我们要多做网站,多做实际操作,这样才能通过网站内外的合理分析,了解用户喜欢什么,搜索引擎喜欢什么。 .
对于一个刚刚入行的新手来说,SEO可能是一个比较新的名词,但是入行时间长了,你会发现每天做的事情都是一样的,不同的只是你能否坚持和坚持。能不能做的比别人好很多,大家都做同样的操作,基础技术加上自己的SEO优化思维做网站,让你快速学会SEO。