泸州老窖特曲,真IT小叮当深度学习:自然语言处理(五)NLTK的经典使用,干锅虾的做法

今日,小叮当持续为咱们共享自然语言处理的干货~

一、什张阳大将么是自然语言处理?

咱们来回忆下,什么是是自然语言处理?

简略来说,自然语言处理便是使字符串通过特征工程等办法变成核算机能够了解的0,1数据。

前次,咱们简略了解了文本预处理。那么文本预处理使咱们得到了什么呢?咱们以啊甘名言“日子就像一块巧克力”为例,进行举例。

那么将预处理后的文本变成特征,咱们该怎样做呢?这就要用到咱们自然语言处理中的以下运用了。

二、NLTK在NLP上的经典运用

1.情感剖析

最简略的比如便是,来剖析微博谈论对一条微博持支撑或对立的泸州老窖特曲,真IT小叮当深度学习:自然语言处理(五)NLTK的经典运用,干锅虾的做法情绪。例如剖析“花

情感剖析能够通过树立sentiment dictionary(情感字典)来完结。例如:like-(1),good-(2),bad-(-2),terrible-(-3) 这代表着like的情感正面程度分值为1,good的情感正面程度为2,bad的情感正面程度为-2,terrible的情感正面程度为-3。

当然,这些情感字典的分值是由一群语言学家一起评论给出。咱们能够看到这种办法类似于关键词打分机制

例如,AFIN孔德薇N-111便是一个典型的情感字典。

咱们在对应网站上能够将其下载下来

运用NLTK完结简略的情感剖析如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'IT小叮当'
__time__ = '2019-03-25 14:24'
#NLTK进行情感剖析
#树立泸州老窖特曲,真IT小叮当深度学习:自然语言处理(五)NLTK的经典运用,干锅虾的做法情感字典
sentiment_dictionary ={}
for line in open('E:\\自然语言处理学习\\情感剖析字典AFINN\\AF刘昌政INN\\AFINN-111.txt'):
word,score = line.split('\t')
sentiment_dictionary[word] = int(score)
sente天屿湖世界休闲社区nce_1 ='i love you!'
sentence_2 ='i hate you!'
import n陈书林ltk
word_list1 = nltk.word_tokenize(sentence_1)
word_list2 = nltk.word_tokenize(sent吴山居事情账ence_2)
#遍历每个语句,把每个词的情感得分相加,不在情感字典中的词分数悉数置0
s1_score = sum(sentiment_dictionary.get(word,0) for word in word_list1)
s2_score = s顾显楚恬恬um(sentiment_dictionary.get(word,0) for word in word_list2)
print('我是语句'+sentence_1+'的正面情感凤氏玄针得分:',s1_score)
print('我是语句'+sentence_2+'的正面情感得分:',s2_score)

运转成果如下

能够看到,运用这种办法,咱们现已曹西平潘若迪红鞋事情能够对语句进行简略的情感剖析。

可是这种办法存在以下问题:

(1)呈现网络新词不在字典里怎样办?

(2)呈现特别词汇怎样办?

(3)有狼绥绥更深层的语义怎样了解?

为了处理这些问题,咱们能够结合机器学习来进行情感剖析。通过自己练习语料来运用机器学习进行猜测。

以简略的贝叶斯练习示例,代码如下:

from nltk.classify import NaiveBayesClassifier
from nltk import word_tokenize
#简略手造的练习集
s1 = 'i am a good boy'
s2 = 'i am a handsome boy'
s3 = 'he is a bad boy'
s4 = 'he is a terrible boy'
# #树立词库,寻觅一切语句中呈现的不36斤黄鳝同的词
# s = list(set(word_tokenize(s1)+word_tokenize(s2)+word_tokenize(s3)+word_tokenize泸州老窖特曲,真IT小叮当深度学习:自然语言处理(五)NLTK的经典运用,干锅虾的做法(s4)))
#预处理,对呈现的单词记载为True
def preprocess(sentence):
return {word: True for我愿做你最终一个情人 word in sentence.lower().split()}
#预处理后得到字典类型,key表明fname对应语句中呈现的单词
#value表明每个文本单词对应的值
#给练习集加标签
training_data = [[preprocess(s1),'pos'],
[preprocess(s2),'pos'],
[preprocess(s3)洋媚子,'neg'],
[preprocess(s4),'neg']
]
#将练习数据喂给贝叶斯分类器
model = NaiveBayesClassifier.train(training_data)
n倚天后传之明教复仇ew_s1 = 'i am a good girl'
new_s2 = 'she is a terrible girl'
#输出猜测成果
print('我在猜测 '+new_s1+' 成果是:',model.classify(preprocess(new_s1)))
print('我在猜测 '+new_s2+' 成果是:',model.classify(preprocess(new_s2)))

运转成果为林贝欣

2.文本类似度

文本类似度都运用在哪里呢?举个简略的比如,咱们在百度中查找“IT小叮当”时,查找页面会会依据咱们的关键词,回来一系列的页面内容。

这时,网页会依据咱们的查找成果和关键词的类似度和其它的一些算法,对查找的成果进行排序。

在NLP中处理语句时,语句的文本特征还能够用词元素的频率来进行表明。

s1表明sentence1,语句1。表中的数值代表了单词呈现的频率,依据这个咱们能够猜测出语句内容如下:

语句1(s1):ha ha ha we are happy

语句2(s2): ha ha we are happy

语句3 (s3): you work

如此以来,语句1便可被向量[1,0,3,0,1,1]进行表明。语句2便能够被向量[1,0,2,0,1,1]表明,语句3能够被向量[0,1,0,1,0,0]表明。

用频率表明语句的优点是:

(1)一切语句的向量长度都是相同的,便于后期的机器学习

(2)向量的长度便是处理文本中不同的泸州老窖特曲,真IT小叮当深度学习:自然语言处理(五)NLTK的经典运用,干锅虾的做法词的个数

在语句被向量化后,咱们依据余弦定理便可核算出语句的类似度。

在NLTK中进行频率核算

import nltk
from nltk import FreqDist
#顺手自己做的词库
corpus = 'i am a good boy ' 'i enjoy my life ' 'i am a beautiful girl'
#文本预处理 分词、停用词、词干提取、词形归一
tokens = nltk.word_tokenize(corpus)
print('分词',tokens)
#频率核算
fdist = FreqDist(tokens)
#挑选最常用的50个单词
standard_freq_vector 泸州老窖特曲,真IT小叮当深度学习:自然语言处理(五)NLTK的经典运用,干锅虾的做法= fdist.most_common(50)
#记载向量长度
size = len(standard_freq_vector)
print('挑选最常用的50个词',standard_freq_vector)
#界说函数依据呈现的频率巨细记载下每个单词的方位
def position_record(v):
res = {}
count漏乳er = 0
for word in v:
res[word[0]] = counter
counter +=1
return res
#把规范的单词方位记载下来,得到一个方位的对照表
standard_position_dict = position_record(standard_freq_vector)
print('得到方位的对照表',standard_position_dict)
#结构一个新的测验语句
test_s = 'he is a children'
#构建于规范向量相同巨细的零向量
freq_vector = [0] * size一等龟婆
#简略的预处理 进行分词
test_s_tokens = nltk.word_tokenize(test_s)
#测验语句中的每一个单词,假如在词库中呈现过,就在规范方位上+1
for word in test_s_tokens:
try :
freq_vector[standard_position_dict[word]] += 1
except KeyError:
#假如是新词就pass
continue
print('测验语句的表明',freq_vector)

运转成果如下:

3.文本分类

文本分类的概念比较广,例如判别某句话是否是或人说的,一则新闻是归于政治、军事、仍是其它的类别等等。

今日,咱们就来了解一种常见的文本分类办法TF-IDF

TF : Term Frequency,衡量一个term在文档中呈现的多么频频。

TF(t) =( t呈现在文档中的次数)/(文档中term的总数)

IDF: Inverse Document Frequency,衡量一个term有多重要。

有些词在文章中或许呈现的次数许多,但却不一定对文章的语义了解有用。例如‘is’,'the','a'等。

为了平衡这一现象,咱们恰当的下降这些无用的高频词的权重,把有用的词的权重(weight)进步。

IDF(t)=log_e(文档总数/含有t的文档总数)

这样一来,假如一个词在许多的文本中呈现,那么它的IDF值会很低,反过来,假如一个词在比较少的文本中呈现,那么它的IDF值会很高

TF-IDF = TF*IDF

可见TF-IDF,不只考虑了词频,并且考虑了词对整个文档的贡献度(权重)。这要比单纯地考虑词的频率要好许多,在语义了解方面。

咱们能够举个比如来进一步了解这个公式

例如:一篇文档中有100个单词,其间单词life呈现了5次。

TF(life)= (5/100)=0.05

文档总共有10M,life呈现在其间的1000个文档中

IDF(life) = log(10000000/1000)=4

TF-IDF(life) = TF(life)*IDF(life)=0.05*4=0.2

NLTK完结TF-IDF

代码如下

import nltk
from nltk.text import TextCollection
#将一切文档放到TextCollection类中,进行主动断句,核算,核算
corpus = TextCollection(['i am a good b泸州老窖特曲,真IT小叮当深度学习:自然语言处理(五)NLTK的经典运用,干锅虾的做法oy',
'i am a ha医妃缠上榻鬼王别硬来ndsome boy',
'i enjoy my life '])
#核算出一句话中某个词的TF-IDF
print('boy在榜首句话中的TF-IDF值',corpus.tf_idf('boy','i am a good boy'))
#取得规范巨细的语句来表明语句
#分词
tokens = nltk.word_tokenize('i am a good boy '
'i am a handsome boy '
'i enjoy my life ')
#树立规范词库
standard_vocab = list(set(t泸州老窖特曲,真IT小叮当深度学习:自然语言处理(五)NLTK的经典运用,干锅虾的做法okens))
print('规范词库为:',standard_vocab)
#新语句
new_sentence = 'she is a beautiful girl'
#取得新语句的TF-IDF向量
new_sentence_vector=[]
#遍历一切vocabulary中的词
for word in standard_vocab:
new_sentence_vector.append(corpus.tf_idf(word,new_sentence))
print('新语句的向量表明',new_sentence_vector)

运转成果如下

能够看到,通过如上的TF-IDF操作,咱们能够得到每个语句的TF-IDF相同长度的向量表明。

之后依据这些向量美容大王在线阅览,咱们便能够运用机器学习来为咱们愉快地分类了。


点击展开全文

上一篇:

下一篇:

相关推荐