Python文本处理nltk基础
自然语言处理 -->计算机数据 ,计算机可以处理vector,matrix 向量矩阵。
NLTK 自然语言处理库,自带语料,词性分析,分类,分词等功能。
简单版的wrapper,比如textblob。
import nltk
nltk.download() #可以下载语料库等。
#自带的语料库
from nltk.corpus import brown
brown.categories()
len(brown.sents()) # 多少句话
len(brown.words()) # 多少个单词
一 简单的文本预处理流水线
1.分词 Tokenize 长句子分成有意义的小部件。
sentence = "hello word"
nltk.word_tokenize(sentence)
nltk的分词对于中文是无效的,因为英文是词语按照空格键分开的,而中文单个字分开是无效的,比如今天天气不错,要分成 今天/天气/不错/!
中文有两种 1 启发式 Heuristic ,就是比如最长词,字典作为词库,有今天,没有今天天这么长的,所以今天为一个词。
2 机器学习/统计方法:HMM,CRF。(coreNLP ,斯坦福)
中文分词 结巴。
分完词之后再调用nltk。
社交网络语音的分词,会员表情符号,url,#话题,@某人 需要正则表达式来预处理。
2 nltk.pos_tag(text) #text为分词完的list,part of speech 在这句话中的部分,adj adv,det(the,a这种)
3 stemming 词干提取 如walking 到walk
lemmatize(postag)词形归一 #会根据词性,把is am are 归一成be went 归一成go 这种
4 stop words(停止词), he,the这些没有意义的词,直接删掉。
from nltk.corpus import stopwords
[word for word in word_list if word not in stopwords.words('english')]
插入图片1 流程
插入图片2 life is like a box of chocolate
二 向量化
nltk在nlp的经典应用1情感分析 2 文本相似度 3 文本分类(用的最多,如新闻分类)
1.情感分析:
最简单的 sentiment dictionary
字典中单词的正负性,如 like 1分 good 2分 bad -2 分 terrible -3 分。 一句话所有的词打分,相加看正负。
sentimen_dictionary = {}
for line in open('*.txt'):
word,score = line.split('\t')
sentiment_dictionary[word] = int(score)
total_score = sum(sentiment_dictionary.get(word,0) for word in words) #字典中有则score,没有的Word则0分。
#有的人骂的比较黑装粉,需要配上ML
from nltk.classify import NaiveBayesClassifier
# 随手的简单训练集
s1 = 'this is a good book'
s2 = 'this is a awesome book'
s3 = 'this is a bad book'
s4 = 'this is a terrible book'
def preprocess(s):
#句子处理,这里是用split(),把每个单词都分开,没有用到tokenize,因为例子比较简单。
return {word : True for word in s.lower().split()}
#{fname,fval} 这里用true是最简单的存储形式,fval 每个文本单词对应的值,高级的可以用word2vec来得到fval。
#训练 this is terrible good awesome bad book 这样一次单词长列(1,1,0,1,0,0,1)如s1对应的向量 training_data = [ [preprocess(s1),'pos'],
[preprocess(s1),'pos'],
[preprocess(s1),'neg'],
[preprocess(s1),'neg']]
model = NaiveBayesClassifier.train(training_data)
print(model.classify(preprocess('this is a good book')))
2.文本相似性
把文本变成相同长度的向量,通过余弦相似度求相似性。
nltk中FreqDist统计文字出现的频率
3.文本分类
TF-IDF
TF,Term Frequency,一个term在一个文档中出现的有多频繁。
TF(t) = t出现在文档中的次数/文档中的term总数
IDF :Inverse Document Frequency,衡量一个term有多重要,如 is the 这些不重要
把罕见的权值农高。
IDF(t) = log e (文档总数/含有t的文档总数)
TF-IDF = TF×IDF
from nltk.text import TextCollection
# 首首先, 把所有的文文档放到TextCollection类中。
# 这个类会自自动帮你断句句, 做统计, 做计算
corpus = TextCollection(['this is sentence one',
'this is sentence two',
'this is sentence three'])
# 直接就能算出tfidf
# (term: 一一句句话中的某个term, text: 这句句话)
print(corpus.tf_idf('this', 'this is sentence four'))
# 0.444342
# 同理理, 怎么得到一一个标准大大小小的vector来表示所有的句句子子?
# 对于每个新句句子子
new_sentence = 'this is sentence five'
# 遍历一一遍所有的vocabulary中的词:
for word in standard_vocab:
print(corpus.tf_idf(word, new_sentence))
# 我们会得到一一个巨⻓长(=所有vocab⻓长度)的向量量
Python文本处理nltk基础的更多相关文章
- 使用Python中的NLTK和spaCy删除停用词与文本标准化
概述 了解如何在Python中删除停用词与文本标准化,这些是自然语言处理的基本技术 探索不同的方法来删除停用词,以及讨论文本标准化技术,如词干化(stemming)和词形还原(lemmatizatio ...
- 《NLTK基础教程》译者序
购买<NLTK基础教程> 说来也凑巧,在我签下这本书的翻译合同时,这个世界好像还不知道AlphaGo的存在.而在我完成这本书的翻译之时,Master已经对人类顶级高手连胜60局了.至少从媒 ...
- python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...
- Python运维开发基础08-文件基础【转】
一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...
- Python运维开发基础04-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...
- python 3.x 爬虫基础---Requersts,BeautifulSoup4(bs4)
python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...
- Python服务器开发 -- 网络基础
Python服务器开发 -- 网络基础 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.... 网络由下 ...
- python 文本相似度计算
参考:python文本相似度计算 原始语料格式:一个文件,一篇文章. #!/usr/bin/env python # -*- coding: UTF-8 -*- import jieba from g ...
- 算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!
算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!
随机推荐
- SVNKit支持SSH连接
SVNKit这个开源工具,用于Java语言访问SVN库,咋看的时候很方便,其实坑特别多.我在这里只想跟大家说一句,如果你还没有用过,请不要在生产环境使用这个东西了,兼容性问题搞死你(替换方案是直接用s ...
- Date.parse
JavaScript: Date.parse(),一个参数,参数类型是 JavaScript 中的 Date 类型. 返回值 : 得到一个 Unix 时间戳,比如说,1470993235000,这种东 ...
- 灵活的JavaScript(一)
自己对JavaScript的原型,继承,闭包,多少也还是了解些,但是平时写的东西都挺简单的,也用不上,所以感觉提升不大.于是乎买了一本<JavaScript设计模式>来提高下自己,这本是百 ...
- cookie存储对象信息
最近看到某公司某项目中用于保存多个城市信息到cookie中的方法,该方法的逻辑是按时间顺序记录最近访问过的三个城市的名字及id,逻辑包插入与含排重.插入与排重的代码如下: 1 2 3 4 5 6 7 ...
- JavaScript学习笔记5 之 计时器 & scroll、offset、client系列属性 & 图片无缝滚动
一.计时器 setInterval ( 函数/名称 , 毫秒数 )表示每经过一定的毫秒后,执行一次相应的函数(重复) setTimeout ( 函数/名称 , 毫秒数 ) 表示经过一定的毫秒后,只执行 ...
- js类型转换
1.js中有六种基本类型,分别是object.number.string.Boolean.null.undefined,其中number.string.Boolean为基本类型,有时使用会强制转换成对 ...
- 商业智能软件对比评测:FineBI和Tableau
FineBI和Tableau是比较好的自助式商业智能软件,功能都很强大,是企业数据可视化不可或缺的利器,但两款产品还是有非常大的区别的,例如Tableau的功能全面且深入,更适合专业的数据分析人员,而 ...
- SharePoint 2013 通过JavaScript实现列表标题列宽度可拖动
前言 最近有个新需求,用户希望标题栏可以拖动宽度,其实觉得没什么用,既然用户要了又推不掉,就勉为其难实现一下吧. 其实原理比较简单,就是利用JavaScript对标题栏进行宽度控制,然后从网上搜了一下 ...
- 下载本 WebEnh博客 安卓APP
暂时还在学习开发安卓和苹果APP应用,写得一般,以后会更新的,谢谢大家关注.对了这个是用HTML5+写的哦.不太难,但是要搞懂还是要多花点时间了,有时间就会更新的 ... ...
- CSS:@font-face的使用方法
1.介绍 @font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中,随着@font-face模块的出现,我们在Web的开发中使用字体不怕只能使用Web安全字体,你们当 ...