文档章节

NLP理论基础

w
 wolfoxliu
发布于 2017/02/27 00:00
字数 837
阅读 28
收藏 0
点赞 1
评论 0

1.NLTK的安装

    pip install nltk

 

2.安装语料库

import nltk
nltk.download()

例如安装布朗大学的语料库:brown

也可以在程序中下载

nltk.download('brown')

 

3.NLTK自带语料库

from nltk.corpus import brown
from pprint import pprint
pprint(brown.categories())
print len(brown.sents())
print len(brown.words())

 

4.文本处理流程

    文本-->分词-->特征工程-->机器学习

 

5.分词

(1)英文分词    

import nltk
nltk.download('punkt')
sentence = 'Hello, Python'
tokens = nltk.word_tokenize(sentence)
print tokens

词性标注

print nltk.pos_tag(tokens)

(2)中文分词

    1)原理:

        HMM模型:http://yanyiwu.com/work/2014/04/07/hmm-segment-xiangjie.html

        CRF模型:http://blog.csdn.net/ifengle/article/details/3849852

    2)中文分词的Python库

        jieba:https://github.com/fxsjy/jieba

        corenlp-python:http://stanfordnlp.github.io/CoreNLP/

                                     https://pypi.python.org/pypi/corenlp-python

 

6.中文分词之jieba

import jieba
sentence = '我来到北京清华大学'
sentence2 = '小明硕士毕业于中国科学院计算所,后在日本京都大学深造'
seg1 = jieba.cut(sentence, cut_all=True)     # 全模式
# print type(seg)                            # 分词后的结果并不是一个list,而是一个generator
print '[全模式:]', '/'.join(seg1)
seg2 = jieba.cut(sentence, cut_all=False)    # 精准模式
print '[精准模式:]', '/'.join(seg2)
seg3 = jieba.cut(sentence)                   # 默认情况是精准模式
print '[默认情况:]', '/'.join(seg3)
seg4 = jieba.cut_for_search(sentence2)        # 搜索引擎模式
print '[搜索引擎模式:]', '/'.join(seg4)

 

7.停用词(stopwords)

from nltk import word_tokenize
from nltk.corpus import stopwords
sentence = 'NetworkX is a Python language software package for studying the complex networks'
words = word_tokenize(sentence)
print words
filtered_words = [word for word in words if word not in stopwords.words('english')]
print filtered_words

 

8.NLP的应用

 (1)情感分析

         1)最简单的就是基于sentiment dictionary的方法,类似于基于关键词的打分机制,目前应用于广告投放领域。存在的问题:无法解决新词,特殊词以及更深层次的情感

from nltk import word_tokenize
from nltk.corpus import stopwords
sentiment_dictionary = {}
for line in open(r'E:\Python\QiyueZaixian\1_lesson\data\AFINN\AFINN-111.txt', 'r'):
    word, score = line.split('\t')
    sentiment_dictionary[word] = int(score)
sentence = 'He is a brave man'
words = word_tokenize(sentence)
filtered_words = [word for word in words if word not in stopwords.words('english')]
total_score = sum(sentiment_dictionary.get(word, 0) for word in filtered_words)
print total_score

     2)基于Machine Learning的情感分析

# 配上Machine Learning的情感分析
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 pre_process(s):
    return {word: True for word in s.lower().split()}

# 标准化训练集
training_data = [
    [pre_process(s1), 'pos'],
    [pre_process(s2), 'pos'],
    [pre_process(s3), 'neg'],
    [pre_process(s4), 'neg']
]

# 训练
model = NaiveBayesClassifier.train(training_data)

# 测试
test_s = 'This is a great book'
print model.classify(pre_process(test_s))

     

(2)文本相似度:基于词频的独热编码(One-hot encoding),使用FreqDist进行词频统计

from nltk import word_tokenize
from nltk import FreqDist

# 构建词库
sentence = 'this is my sentence this is my life this is the day'
tokens = word_tokenize(sentence)
print tokens
fd = FreqDist(tokens)
print fd['is']
standard_vector = fd.most_common(6)
print standard_vector
size = len(standard_vector)


# 记录下出现次数最多的几个单词的位置信息
def position(st_vec):
    ps_dt = {}
    index = 0
    for word in st_vec:
        ps_dt[word[0]] = index
        index += 1
    return ps_dt
standard_position = position(standard_vector)
print standard_position

# 新的句子
new_sentence = 'this is cool'
freq_list = [0] * size
new_tokens = word_tokenize(new_sentence)
for word in new_tokens:
    try:
        freq_list[standard_position[word]] += 1
    except KeyError:
        continue
print freq_list

    (3)文本分类:TF-IDF(词频-逆文档频率)

        举例:一个文档中有100个单词,单词sheep出现了7次,那么TF(sheep) = 7/100 = 0.07

                   现在我们有10,000,000个文档,出现sheep的文档有10,000个,

                    那么IDF(sheep) = lg(10,000,000/10,000) = 3,

                    那么TF-IDF(sheep) = TF(sheep) * IDF(sheep) = 0.07 * 3 = 0.21

from nltk.text import TextCollection
sentence1 = 'this is sentence one'
sentence2 = 'I love you'
sentence3 = 'He is a brave man'
sentence4 = 'Hello, Python'
corpus = TextCollection([sentence1, sentence2, sentence3])
print corpus.tf('Hello', sentence4)       # tf = sentence4.count('Hello')/ len(sentence4)
print corpus.tf_idf('Hello', sentence4)

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
w
粉丝 7
博文 13
码字总数 10108
作品 0
杭州
程序员
Text-CNN、Word2Vec、RNN、NLP、Keras、fast.ai-20180504

本文集仅为收录自己感兴趣、感觉不错的文章与资源,方便日后查找和阅读,所以排版可能会让人觉得乱。内容会不断更新与调整。文中涉及公众号的文章链接可以会失效,知道如何生成永久链接的小伙...

Deserts_X ⋅ 05/05 ⋅ 0

自然语言处理的下一个十年将在哪里?CCF-GAIR 2018将给你答案

1956 年,「人工智能」这一崭新学科在达特茅斯学院诞生。70 年沉浮,随着深度学习技术带来的一系列突破,人工智能在近几年又抵达新的高度。而作为人工智能的分支,自然语言处理也以前所未有的...

AI科技评论 ⋅ 06/19 ⋅ 0

自然语言处理(python)环境配置-NLTK的安装

自然语言处理(python)环境配置-NLTK的安装 1.自然语言处理的介绍 NLP (Natural Language Processing) 是人工智能(AI)的一个子领域。是机器真正能够理解人类说话的重要一环。自然语言处理也...

meiqi0538 ⋅ 04/08 ⋅ 0

自然语言处理之路- 前提——语言学

一个自然语言处理炼丹师的自白 往期: 自然语言处理之路:前提——英文 自然语言处理之路:前提——数学 前提的最后一部分,也是我最想提及的部分。之前的英文与数学,可以算是比较通用的能力...

坂本龙一 ⋅ 05/11 ⋅ 0

基础入门:如何用自然语言分析大型数据集?

  【IT168 评论】自然语言处理(NLP)是一项令人兴奋的前沿研究,Siri、Alexa和谷歌Home等产品都在努力完善自然语言处理方面的能力。为了使用NLP,我们必须了解这种处理方式的工作原理,我们...

it168网站 ⋅ 05/25 ⋅ 0

Salesforce 开发了一个处理不同 NLP 任务的通用模型

Salesforce研究院(Salesforce Research)创建的自然语言处理架构可以处理多种模型和任务。在通常情况下,自然语言处理(NLP)针对每种功能(如翻译、情感分析和问题和答案)都需建一个模型。...

达尔文 ⋅ 今天 ⋅ 0

NLP 解决方案是如何被深度学习改写的?

雷锋网(公众号:雷锋网) AI 科技评论按:英特尔人工智能产品事业部,数据科学主任 Yinyin Liu 近日撰写了一篇文章,介绍了深度学习为自然语言处理带来的种种变化。有趣的大趋势是首先产生在 ...

MrBear ⋅ 04/27 ⋅ 0

[年前福利]送10本自然语言处理与深度学习相关书籍

感谢大家一直对公众号的支持和陪伴,本次公众号联合机械工业出版社华章科技给大家送出10本自然语言处理与深度学习相关的10本书籍,希望大家能够收获多多,新的一年,成长进步! 下面来介绍一...

机器学习算法与自然语言处理 ⋅ 01/31 ⋅ 0

哈工大刘挺:哈工大 SCIR 实验室的 NLP 研究 | CCF-GAIR

雷锋网 AI 科技评论按:近期由中国计算机学会(CCF)主办,雷锋网、香港中文大学(深圳)承办的全球人工智能与机器人峰会(CCF-GAIR)将于 6 月底在深圳举办,其中 哈尔滨工业大学刘挺教授 ...

camel ⋅ 06/02 ⋅ 0

牛津大学xDeepMind自然语言处理 第9讲(中)语音学表达

     大数据文摘重磅课程汉化《牛津大学xDeepMind自然语言处理》   本周更新至:Lecture 9 语音识别(2)   马上观看   https://v.qq.com/x/page/c0650q8ftd0.html   点击文末阅...

大数据文摘 ⋅ 05/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JPA入门,配置文件的设置

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http......

码农屌丝 ⋅ 15分钟前 ⋅ 0

Java基础——面向对象和构造器

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。 静态成员介绍 为什么要有静态成员?静态成员用来...

凯哥学堂 ⋅ 16分钟前 ⋅ 0

vmware中Centos 7 linux的LVM磁盘扩容

系统是RHEL7(centos7差不多一样) 关闭系统,在vmware、设置、硬盘、扩展、输入数字大于当前系统内存、点击扩展。 开机再查看磁盘信息 fdisk -l 注意:可以看出sda磁盘增加了,但是根目录还...

gugudu ⋅ 27分钟前 ⋅ 0

JAVA线程sleep和wait方法区别

昨天面试,突然被问到sleep 和 wait的区别,一下子有点蒙,在这里记一下,以示警戒。 首先说sleep,sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过去后,cpu...

徐玉强 ⋅ 29分钟前 ⋅ 0

vuex学习--模块

随着项目复杂性增加,共享状态也越来越多。需要对转态操作进行分组,分组后在进行分组编写。学习一下module:状态管理器的模块组操作。 首先是声明: const moduleA={ state,mutations,g...

大美琴 ⋅ 31分钟前 ⋅ 0

Selenium 简单入门

安装 pip install selenium 驱动下载 https://chromedriver.storage.googleapis.com/index.html 下载最新的驱动,放入path中,可以放入Python的scripts目录下,也可以放入Chrome安装目录,并...

阿豪boy ⋅ 33分钟前 ⋅ 0

292. Nim Game - LeetCode

Question 292. Nim Game Solution 思路:试着列举一下,就能发现一个n只要不是4的倍数,就能赢。 n 是否能赢1 true2 true3 true4 false 不论删除几,对方都能一把赢5 t...

yysue ⋅ 今天 ⋅ 0

6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩

zip压缩工具 zip命令可以压缩目录和文件,-r 压缩目录。 zip使用方法 zip 1.txt.zip 1.txt //压缩文件 zip -r 123.zip 123/ //压缩目录 unzip 1.txt.zip //解压 unzip 123.zip -d /root/456...

Linux_老吴 ⋅ 今天 ⋅ 0

react-loadable使用跳坑

官方给react-loadable的定义是: A higher order component for loading components with dynamic imports. 动态路由示例 withLoadable.js import React from 'react'import Loadable fro......

pengqinmm ⋅ 今天 ⋅ 0

记录工作中遇到的坑

1、ios safari浏览器向下滚动会触发window resize事件

端木遗风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部