自然语言处理 -->计算机数据 ,计算机可以处理vector,matrix 向量矩阵。

NLTK 自然语言处理库,自带语料,词性分析,分类,分词等功能。

简单版的wrapper,比如textblob。

  1. import nltk
  2. nltk.download() #可以下载语料库等。
  1. #自带的语料库
  2. from nltk.corpus import brown
  3. brown.categories()
  4. len(brown.sents()) # 多少句话
  5. len(brown.words()) # 多少个单词

一 简单的文本预处理流水线

1.分词 Tokenize    长句子分成有意义的小部件。

  1. sentence = "hello word"
  2. 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这些没有意义的词,直接删掉。

  1. from nltk.corpus import stopwords
  2. [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 分。  一句话所有的词打分,相加看正负。

  1. sentimen_dictionary = {}
  2. for line in open('*.txt'):
  3.   word,score = line.split('\t')
  4.   sentiment_dictionary[word] = int(score)
  5. total_score = sum(sentiment_dictionary.get(word,0) for word in words) #字典中有则score,没有的Word则0分。
  1. #有的人骂的比较黑装粉,需要配上ML
  2. from nltk.classify import NaiveBayesClassifier
  3. # 随手的简单训练集
  4. s1 = 'this is a good book'
  5. s2 = 'this is a awesome book'
  6. s3 = 'this is a bad book'
  7. s4 = 'this is a terrible book'
  8. def preprocesss):
  9.  #句子处理,这里是用split(),把每个单词都分开,没有用到tokenize,因为例子比较简单。
  10. return {word : True for word in s.lower().split()}        
  11. #{fname,fval} 这里用true是最简单的存储形式,fval 每个文本单词对应的值,高级的可以用word2vec来得到fval。
  12. #训练 this is terrible good awesome bad book 这样一次单词长列(1,1,0,1,0,0,1)如s1对应的向量
  13.  
  14. training_data = [ [preprocess(s1),'pos'],
  15. [preprocess(s1),'pos'],
  16. [preprocess(s1),'neg'],
  17. [preprocess(s1),'neg']]
  18. model = NaiveBayesClassifier.train(training_data)
  19. 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

  1. from nltk.text import TextCollection
  2. # 首首先, 把所有的文文档放到TextCollection类中。
  3. # 这个类会自自动帮你断句句, 做统计, 做计算
  4. corpus = TextCollection(['this is sentence one',
  5. 'this is sentence two',
  6. 'this is sentence three'])
  7. # 直接就能算出tfidf
  8. # (term: 一一句句话中的某个term, text: 这句句话)
  9. print(corpus.tf_idf('this', 'this is sentence four'))
  10. # 0.444342
  11. # 同理理, 怎么得到一一个标准大大小小的vector来表示所有的句句子子?
  12. # 对于每个新句句子子
  13. new_sentence = 'this is sentence five'
  14. # 遍历一一遍所有的vocabulary中的词:
  15. for word in standard_vocab:
  16. print(corpus.tf_idf(word, new_sentence))
  17. # 我们会得到一一个巨⻓长(=所有vocab⻓长度)的向量量

   

Python文本处理nltk基础的更多相关文章

  1. 使用Python中的NLTK和spaCy删除停用词与文本标准化

    概述 了解如何在Python中删除停用词与文本标准化,这些是自然语言处理的基本技术 探索不同的方法来删除停用词,以及讨论文本标准化技术,如词干化(stemming)和词形还原(lemmatizatio ...

  2. 《NLTK基础教程》译者序

    购买<NLTK基础教程> 说来也凑巧,在我签下这本书的翻译合同时,这个世界好像还不知道AlphaGo的存在.而在我完成这本书的翻译之时,Master已经对人类顶级高手连胜60局了.至少从媒 ...

  3. python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...

  4. Python运维开发基础08-文件基础【转】

    一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...

  5. Python运维开发基础04-语法基础【转】

    上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...

  6. python 3.x 爬虫基础---Requersts,BeautifulSoup4(bs4)

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...

  7. Python服务器开发 -- 网络基础

    Python服务器开发 -- 网络基础   网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.HTTP是高层协议,而TCP/IP是个协议集,包过许多的子协议.... 网络由下 ...

  8. python 文本相似度计算

    参考:python文本相似度计算 原始语料格式:一个文件,一篇文章. #!/usr/bin/env python # -*- coding: UTF-8 -*- import jieba from g ...

  9. 算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!

    算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!

随机推荐

  1. CString转换为LPSTR和LPSTR转化为CString

    一.CString转换为LPSTR 方法一: CString strFileName LPSTR lpstr - strFileName.GetBuffer(); strFileName.Releas ...

  2. android 帧动画

    首先在res/drawable/name1.xml/定义一组图片集合: <?xml version="1.0" encoding="utf-8"?> ...

  3. 转:使用 Spring Data JPA 简化 JPA 开发

    从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...

  4. A new comer playing with Raspberry Pi 3B

    there are some things to do for raspberry pi 3b for the first time: 1, connect pi with monitor/KB/mo ...

  5. 使用专业的消息队列产品rabbitmq之centos7环境安装

      我们在项目开发的时候都不可避免的会有异步化的问题,比较好的解决方案就是使用消息队列,可供选择的队列产品也有很多,比如轻量级的redis, 当然还有重量级的专业产品rabbitmq,rabbitmq ...

  6. MySQL 一致性读 深入研究

    一致性读,又称为快照读.使用的是MVCC机制读取undo中的已经提交的数据.所以它的读取是非阻塞的. 相关文档:http://dev.mysql.com/doc/refman/5.6/en/innod ...

  7. Hibernate入门笔记

    相关基础概念请从其它教材简单了解,这里仅记录下第一个Hibernate程序的实现步骤. 环境说明: java开发工具:eclipse MARS.2 Release(4.5.2) hibernate版本 ...

  8. plain framework 1 1.0.4 更新 稳定版发布

    PF由于各种因素迟迟不能更新,此次更新主要是更新了以往和上个版本出现的内存问题,该版本较为稳定,如果有用到的朋友请更新至此版本. PF 1.0.4 修复1.0.0.3更新后产生的内存问题,可能导致网络 ...

  9. BZOJ 1862: [Zjoi2006]GameZ游戏排名系统 [treap hash]

    1862: [Zjoi2006]GameZ游戏排名系统 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1318  Solved: 498[Submit][ ...

  10. Struts2入门案例

    struts2最简便的案例   Struts 2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点.Struts 2拥有更加广阔的前景,自身功能强大,还对其他框架 ...