Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【自然语言处理篇】--以NLTK为基础讲解自然语⾔处理的原理和基础知识

【自然语言处理篇】--以NLTK为基础讲解自然语⾔处理的原理和基础知识

作者头像
LhWorld哥陪你聊算法
发布于 2018-09-13 07:20:13
发布于 2018-09-13 07:20:13
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

一、前述

Python上著名的⾃然语⾔处理库⾃带语料库,词性分类库⾃带分类,分词,等等功能强⼤的社区⽀持,还有N多的简单版wrapper。

二、文本预处理

1、安装nltk

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install -U nltk

  安装语料库 (一堆对话,一对模型)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import nltk
nltk.download()

2、功能一览表:

 3、文本处理流程

4、Tokenize 把长句⼦拆成有“意义”的⼩部件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import jieba
seg_list = jieba.cut("我来到北北京清华⼤大学", cut_all=True)
print "Full Mode:", "/ ".join(seg_list) # 全模式
seg_list = jieba.cut("我来到北北京清华⼤大学", cut_all=False)
print "Default Mode:", "/ ".join(seg_list) # 精确模式
seg_list = jieba.cut("他来到了了⽹网易易杭研⼤大厦") # 默认是精确模式
print ", ".join(seg_list)
seg_list = jieba.cut_for_search("⼩小明硕⼠士毕业于中国科学院计算所,后在⽇日本京都⼤大学深造")
# 搜索引擎模式
print ", ".join(seg_list)

结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
【全模式】:/ 来到/ 北北京/ 清华/ 清华⼤大学/ 华⼤大/ ⼤大学
【精确模式】:/ 来到/ 北北京/ 清华⼤大学
【新词识别】:他, 来到, 了了, ⽹网易易, 杭研, ⼤大厦
(此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了了)
【搜索引擎模式】: ⼩小明, 硕⼠士, 毕业,, 中国, 科学, 学院, 科学院, 中国科学院, 计算,
计算所,,, ⽇日本, 京都, ⼤大学, ⽇日本京都⼤大学, 深造

 社交⽹络语⾔的tokenize:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
emoticons_str = r"""
(?:
[:=;] # 眼睛
[oO\-]? # ⿐鼻⼦子
[D\)\]\(\]/\\OpP] # 嘴
)"""
regex_str = [
emoticons_str,
r'<[^>]+>', # HTML tags
r'(?:@[\w_]+)', # @某⼈人
r"(?:\#+[\w_]+[\w\'_\-]*[\w_]+)", # 话题标签
r'http[s]?://(?:[a-z]|[0-9]|[$-_@.&amp;+]|[!*\(\),]|(?:%[0-9a-f][0-9a-f]))+',
# URLs
r'(?:(?:\d+,?)+(?:\.?\d+)?)', # 数字
r"(?:[a-z][a-z'\-_]+[a-z])", # 含有 - 和 ‘ 的单词
r'(?:[\w_]+)', # 其他
r'(?:\S)' # 其他
]

正则表达式对照表 http://www.regexlab.com/zh/regref.htm

这样能处理社交语言中的表情等符号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tokens_re = re.compile(r'('+'|'.join(regex_str)+')', re.VERBOSE | re.IGNORECASE)
emoticon_re = re.compile(r'^'+emoticons_str+'$', re.VERBOSE | re.IGNORECASE)
def tokenize(s):
return tokens_re.findall(s)
def preprocess(s, lowercase=False):
tokens = tokenize(s)
if lowercase:
tokens = [token if emoticon_re.search(token) else token.lower() for token in
tokens]
return tokens
tweet = 'RT @angelababy: love you baby! :D http://ah.love #168cm'
print(preprocess(tweet))
# ['RT', '@angelababy', ':', 'love', 'you', 'baby',
# ’!', ':D', 'http://ah.love', '#168cm']

5、词形归⼀化

Stemming 词⼲提取:⼀般来说,就是把不影响词性的inflection的⼩尾巴砍掉 walking 砍ing = walk walked 砍ed = walk Lemmatization 词形归⼀:把各种类型的词的变形,都归为⼀个形式 went 归⼀ = go are 归⼀ = be

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from nltk.stem.porter import PorterStemmer
>>> porter_stemmer = PorterStemmer()
>>> porter_stemmer.stem(‘maximum’)
u’maximum’
>>> porter_stemmer.stem(‘presumably’)
u’presum’
>>> porter_stemmer.stem(‘multiply’)
u’multipli’
>>> porter_stemmer.stem(‘provision’)
u’provis’
>>> from nltk.stem import SnowballStemmer
>>> snowball_stemmer = SnowballStemmer(“english”)
>>> snowball_stemmer.stem(‘maximum’)
u’maximum’
>>> snowball_stemmer.stem(‘presumably’)
u’presum’
>>> from nltk.stem.lancaster import LancasterStemmer
>>> lancaster_stemmer = LancasterStemmer()
>>> lancaster_stemmer.stem(‘maximum’)
‘maxim’
>>> lancaster_stemmer.stem(‘presumably’)
‘presum’
>>> lancaster_stemmer.stem(‘presumably’)
‘presum’
>>> from nltk.stem.porter import PorterStemmer
>>> p = PorterStemmer()
>>> p.stem('went')
'went'
>>> p.stem('wenting')
'went'

6、词性Part-Of-Speech

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import nltk
>>> text = nltk.word_tokenize('what does the fox say')
>>> text
['what', 'does', 'the', 'fox', 'say']
>>> nltk.pos_tag(text)
[('what', 'WDT'), ('does', 'VBZ'), ('the', 'DT'), ('fox', 'NNS'), ('say', 'VBP')]

 7、Stopwords

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
⾸先记得在console⾥⾯下载⼀下词库
或者 nltk.download(‘stopwords’)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from nltk.corpus import stopwords
# 先token⼀一把,得到⼀一个word_list
# ...
# 然后filter⼀一把
filtered_words =
[word for word in word_list if word not in stopwords.words('english')]

8、⼀条⽂本预处理流⽔线

 三、自然语言处理应用。

实际上预处理就是将文本转换为Word_List,自然语言处理再转变成计算机能识别的语言。

自然语言处理有以下几个应用:情感分析,⽂本相似度, ⽂本分类

1、情感分析

最简单的 sentiment dictionary,类似于关键词打分机制.

like 1 good 2 bad -2 terrible -3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sentiment_dictionary = {}
for line in open('data/AFINN-111.txt')
word, score = line.split('\t')
sentiment_dictionary[word] = int(score)
# 把这个打分表记录在⼀一个Dict上以后
# 跑⼀一遍整个句句⼦子,把对应的值相加
total_score = sum(sentiment_dictionary.get(word, 0) for word in words)
# 有值就是Dict中的值,没有就是0
# 于是你就得到了了⼀一个 sentiment score

显然这个⽅法太Naive,新词怎么办?特殊词汇怎么办?更深层次的玩意⼉怎么办?

加上ML情感分析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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):
# Func: 句句⼦子处理理
# 这⾥里里简单的⽤用了了split(), 把句句⼦子中每个单词分开
# 显然 还有更更多的processing method可以⽤用
return {word: True for word in s.lower().split()}
# return⻓长这样:
# {'this': True, 'is':True, 'a':True, 'good':True, 'book':True}
# 其中, 前⼀一个叫fname, 对应每个出现的⽂文本单词;
# 后⼀一个叫fval, 指的是每个⽂文本单词对应的值。
# 这⾥里里我们⽤用最简单的True,来表示,这个词『出现在当前的句句⼦子中』的意义。
# 当然啦, 我们以后可以升级这个⽅方程, 让它带有更更加⽜牛逼的fval, ⽐比如 word2vec

 2、文本相似度

 ⽤元素频率表⽰⽂本特征,常见的做法

然后用余弦定理来计算文本相似度:

Frequency 频率统计:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import nltk
from nltk import FreqDist
# 做个词库先
corpus = 'this is my sentence ' \
'this is my life ' \
'this is the day'
# 随便便tokenize⼀一下
# 显然, 正如上⽂文提到,
# 这⾥里里可以根据需要做任何的preprocessing:
# stopwords, lemma, stemming, etc.
tokens = nltk.word_tokenize(corpus)
print(tokens)
# 得到token好的word list
# ['this', 'is', 'my', 'sentence',
# 'this', 'is', 'my', 'life', 'this',
# 'is', 'the', 'day']
# 借⽤用NLTK的FreqDist统计⼀一下⽂文字出现的频率
fdist = FreqDist(tokens)
# 它就类似于⼀一个Dict
# 带上某个单词, 可以看到它在整个⽂文章中出现的次数
print(fdist['is'])
# 3

3、文本分类

TF: Term Frequency, 衡量⼀个term在⽂档中出现得有多频繁。 TF(t) = (t出现在⽂档中的次数) / (⽂档中的term总数). IDF: Inverse Document Frequency, 衡量⼀个term有多重要。 有些词出现的很多,但是明显不是很有卵⽤。⽐如’is',’the‘,’and‘之类 的。 为了平衡,我们把罕见的词的重要性(weight)搞⾼, 把常见词的重要性搞低。 IDF(t) = log_e(⽂档总数 / 含有t的⽂档总数). TF-IDF = TF * IDF

举个栗⼦? : ⼀个⽂档有100个单词,其中单词baby出现了3次。 那么,TF(baby) = (3/100) = 0.03. 好,现在我们如果有10M的⽂档, baby出现在其中的1000个⽂档中。 那么,IDF(baby) = log(10,000,000 / 1,000) = 4 所以, TF-IDF(baby) = TF(baby) * IDF(baby) = 0.03 * 4 = 0.12

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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⻓长度)的向量量

 目前几种表达句子的方式:词频,TF-IDF。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-07-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python NLTK自然语言处理:词干、词形与MaxMatch算法
CSDN:白马负金羁 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。自然语言工具箱(NLTK,Natural Language Toolkit)是一个基于Python (http://lib.csdn.net/base/11)语言的类库,它也是当前最为流行的自然语言编程与开发工具。在进行自然语言处理研究和应用时,恰当利用NLTK中提供的函数可以大幅度地提高效率。本文就将通过一些实例来向读者介绍NLTK的使用。 开发环境:我所使用的Python版本是最新的3.5.1,NLTK版本是3.2。P
机器学习AI算法工程
2018/03/13
2.1K0
Python  NLTK自然语言处理:词干、词形与MaxMatch算法
Python自然语言处理—提取词干
在英文中同一个词的形式是有多种的,名词的单数复数、动词的现在和过去式等等,所以在处理英文时要考虑词干的抽取问题。这里直接调用Nltk自带的两个词干抽取器
用户7886150
2020/12/28
1.1K0
Python NLTK 自然语言处理入门与例程
那么 NLP 到底是什么?学习 NLP 能带来什么好处?
Sepmer Fi
2018/02/23
6.3K1
NLTK文本整理和清洗示例代码
from nltk.tokenize import regexp_tokenize
用户7886150
2020/12/27
8870
Python NLTK解读
自然语言处理工具包(Natural Language Toolkit,简称NLTK)是一个用于处理人类语言数据的强大工具包。它提供了丰富的语言处理功能,包括文本分析、词性标注、语法分析、语料库管理等。本教程将介绍如何使用NLTK来处理文本数据,进行各种自然语言处理任务。
Michel_Rolle
2024/01/31
2.7K0
关于自然语言处理,数据科学家需要了解的 7 项技术
现代公司要处理大量的数据。这些数据以不同形式出现,包括文档、电子表格、录音、电子邮件、JSON以及更多形式。这类数据最常用的记录方式之一就是通过文本,这类文本通常与我们日常所使用的自然语言十分相似。
CDA数据分析师
2020/05/06
1.2K0
基于自然语言处理的垃圾短信识别系统
本项目旨在利用自然语言处理(NLP)技术,开发一个高效的垃圾短信识别系统。通过分词、停用词处理、情感分析和机器学习模型,实现对垃圾短信的自动分类和识别,提高短信过滤的准确性和效率。
LucianaiB
2025/01/25
1750
基于自然语言处理的垃圾短信识别系统
【一文讲解深度学习】语言自然语言处理(NLP)第一篇
NLP(Nature Language Processing,自然语言处理)是计算机及人工智能领域的一个重要的子项目,它研究计算机如何处理、理解及应用人类语言。是人类在漫长的进化过程中形成的计算机语言复杂的符号等系统(类似C/Java的符号等系统)。以下是关于自然处理的常见定义:
苏州程序大白
2022/04/14
1.7K0
【一文讲解深度学习】语言自然语言处理(NLP)第一篇
Python NLP入门教程
目录[-] 本文简要介绍Python自然语言处理(NLP),使用Python的NLTK库。NLTK是Python的自然语言处理工具包,在NLP领域中,最常使用的一个Python库。 什么是NLP? 简单来说,自然语言处理(NLP)就是开发能够理解人类语言的应用程序或服务。 这里讨论一些自然语言处理(NLP)的实际应用例子,如语音识别、语音翻译、理解完整的句子、理解匹配词的同义词,以及生成语法正确完整句子和段落。 这并不是NLP能做的所有事情。 NLP实现 搜索引擎: 比如谷歌,Yahoo等。谷歌搜索引擎
jhao104
2018/03/20
3K0
Python NLP入门教程
Python数据挖掘-NLTK文本分析+jieba中文文本挖掘
NLTK的全称是natural language toolkit,是一套基于python的自然语言处理工具集。
用户7886150
2021/01/15
3.1K0
初学者|不能不会的NLTK
本文简绍了NLTK的使用方法,这是一个被称为“使用Python进行计算语言学教学和工作的绝佳工具”。
yuquanle
2019/07/12
1.4K0
NLP最强工具包NLTK入门教程
在当今信息爆炸的时代,自然语言处理(Natural Language Processing, NLP)已成为人工智能领域的重要研究方向之一。无论是机器翻译、情感分析、文本分类,还是语音识别,NLP技术都在其中扮演着关键角色。
皮大大
2025/05/09
2540
自然语言处理背后的数据科学
本文为 AI 研习社编译的技术博客,原标题 : The Data Science Behind Natural Language Processing 作者 | John Thuma 翻译 | luyao777 校对 | Pita 审核 | 酱番梨 整理 | 立鱼王 原文链接: https://medium.com/dataseries/the-data-science-behind-natural-language-processing-69d6df06a1f
AI研习社
2019/05/08
7880
自然语言处理背后的数据科学
数据科学和人工智能技术笔记 五、文本预处理
词干提取通过识别和删除词缀(例如动名词)同时保持词的根本意义,将词语简化为词干。 NLTK 的PorterStemmer实现了广泛使用的 Porter 词干算法。
ApacheCN_飞龙
2022/12/02
6250
【自然语言处理(一)】相关基础技能
2.正则表达式(网上很多教程,关键还是理解每一个代表什么意思,还要多写,其实没什么大不了,这里就不写了)就只写写python中是怎么用的
西西嘛呦
2020/08/26
4780
了解AIGC——自然语言处理与生成
近年来,AIGC(AI Generated Content)技术迅猛发展,自然语言处理(Natural Language Processing, NLP)与生成技术的结合,使得机器不仅能够理解人类语言,还能进行文本的创作和生成。这一能力广泛应用于文本创作、对话系统、语言翻译、内容推荐等场景。本文将深入探讨自然语言处理与生成的核心技术、关键模型,以及如何通过代码实现一些重要功能。
hope kc
2024/11/21
2070
【深度学习】自然语言处理
NLP(Nature Language Processing,自然语言处理)是计算机学科及人工智能领域一个重要的子学科,它主要研究计算机如何处理、理解及应用人类语言。所谓自然语言,指人说的话、人写的文章,是人类在长期进化过程中形成的一套复杂的符号系统(类似于C/Java等计算机语言则称为人造语言)。以下是关于自然语言处理常见的定义:
杨丝儿
2022/03/20
7880
【深度学习】自然语言处理
使用Python实现自然语言处理模型
自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,它涉及计算机与人类自然语言之间的交互。NLP技术可以帮助计算机理解、解释、操纵人类语言,从而实现文本分类、情感分析、机器翻译等任务。在本文中,我们将介绍自然语言处理的基本原理和常见的实现方法,并使用Python来实现这些模型。
Echo_Wish
2024/04/25
2670
自然语言处理背后的数据科学
NLP是人与机器之间的沟通,使得机器既可以解释我们的语言,也可以就此作出有效回答。自20世纪50年代以来,这个领域一直存在,你可能听说过Alan Turing开创的“图灵测试”。图灵测试测量计算机对人类所提出问题做出反应的好坏程度。
大数据文摘
2019/05/13
7960
自然语言处理| NLTK库的详解
自然语言处理(natural language processing)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
润森
2019/08/29
7K0
自然语言处理| NLTK库的详解
推荐阅读
相关推荐
Python NLTK自然语言处理:词干、词形与MaxMatch算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验