文档章节

NLP理论基础

w
 wolfoxliu
发布于 2017/02/27 00:00
字数 837
阅读 41
收藏 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)

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
下一篇: MongoDB实际操作
w
粉丝 8
博文 13
码字总数 10108
作品 0
杭州
程序员
私信 提问
30个免费资源:涵盖机器学习、深度学习、NLP及自动驾驶

随着碎片化的生活越来越日常化,大多数人都喜欢看总结性的的文章,这和时间成本有一定的关系,本文也为了节省读者的时间,总结了一份书籍、慕课课程之外的免费资源集合,主要收集过去一年时间...

【方向】
06/27
0
0
NLPIR融合深度学习技术挖掘数据信息

  伴随着计算机的日益普及,互联网的迅猛发展,文本的数量(电子邮件、新闻、网页、科技论文等)在不停的增长,因而对文本作智能化处理以获取所需信息的需求日益迫切。在这样的社会需求下,自...

ljrj123
10/09
0
0
Text-CNN、Word2Vec、RNN、NLP、Keras、fast.ai-20180504

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

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

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

AI科技评论
06/19
0
0
公开课 | 微信高级研究员解析深度学习在NLP中的发展和应用

近年来,深度学习方法极大的推动了自然语言处理领域的发展。几乎在所有的 NLP 任务上我们都能看到深度学习技术的应用,并且在很多的任务上,深度学习方法的表现大大的超过了传统方法。可以说...

AI科技大本营
06/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

zookeeper配置与使用

一.登录官网下载 不要带后缀的,那是公侧版本,下稳定版,比如3.4.9 二.安装与使用 解压后bin里是启动程序 配置文件:在conf下 复制zoo_sample.cfg改名为为zoo.cfg,打开zoo修改文件...

小兵胖胖
18分钟前
0
0
spring源码阅读笔记(一)

ClassPathXmlApplicationContext 与 FileSystemXmlApplicationContext 用了这么久的框架,是时候搞一下源码了,一般最初接触spring 从以下步骤开始 创建一个bean类 并创建 ooxx.xml之类的spr...

NotFound403
42分钟前
2
0
MySQL主从配置

12月14日任务 17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试主从同步 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单将就是A/B两个服务器做主从后,在A上写...

robertt15
44分钟前
6
0
我的Linux系统九阴真经

在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行业,共享经济等概念的公...

问题终结者
57分钟前
21
0
Java 使用 gson 对 json 根据 key 键进行排序

引入Google的gson jar <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.0</version>......

yh32
59分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部