2019独角兽企业重金招聘Python工程师标准>>>

自然语言处理,也就从自然语言中解读信息,知识。目前机器翻译取得一些不错的进展,深度学习在NLP的应用还比较有限。本质原因在于文本里,并未包含所有信息,语言有太多的潜台词,所以即便LSTM统计到所有的细节,仍然有限的原因。

深度学习只是一种工具,适当的输入才有恰当的输出。所以纯粹文本seq2seq的学习,在NLP上注定没有什么大用途。必须要文本解读,分词,POS, NER,建立语法树,提取事件等,然后再借助深度学习强大的统计力去建模。

nltk是学习文本处理一个很好的入门框架。里面有大量的语料供学习(大部分是英文)。比如:布朗语料库是第一个百万词级的英语电子语料库的,由布朗大学于1961 年创建。这个语料库包含500 个不同来源的文本,按照文体分类,如:新闻、社论等。

from nltk.corpus import brown
print(brown.categories())
#['adventure', 'belles_lettres', 'editorial', 'fiction', 'government', 'hobbies', 'humor', 'learned', 'lore', 'mystery', 'news', 'religion', 'reviews', 'romance', 'science_fiction']

分类很丰富,有科幻,言情,探险...

自然语言最小单元当然是字,如果英文就是字母(char-rnn这个级别的统计会直接按字/char为单元来学习)。一般有意义的处理单元是词,所以分词就是首要任务,英文nlp就占了这个优势,它本来就是分好词的,而中文分词本身就是个难题,比如新词,口语词,行业特定词汇等如何处理。

最直接的一个分析,就是统计词频,不同的文体,通过词频可以看出风格迥异。

#词频统计
fdist = nltk.FreqDist([w.lower() for w in new_words])
print(fdist)
modals = ['can', 'could', 'may', 'might', 'must', 'will']
#词频统计
for m in modals:print(m + ':', fdist[m])

nltk里还包含大量nlp基本任务的已标注数据,另外还包含了很多非英文的语料,也有繁体中文。

词性标注,就是把分好的词,确定它的词性,中文就是名动形数量代:

tokens = nltk.word_tokenize("And now for something completely different")
tagged = nltk.pos_tag(tokens)
print(tagged)
#[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), ('completely', 'RB'), ('different', 'JJ')]

在这里我们看到and 是CC,并列连词;now 和completely 是RB,副词;for 是IN,介词;something 是NN,名词;different 是JJ,形容词。

词性就是一种“额外”信息了,比传统只统计词频,把所有词同等对待,又进了一步。text.similar()方法为一个词w 找出所有上下文w1 w w2,然

后找出所有出现在相同上下文中的词w',即w1 w' w2。就是出现在”类似“的位置,“woman”找到的相似的词,都是“名词”

text = nltk.Text(word.lower() for word in nltk.corpus.brown.words())
text.similar('woman')
#man day time year moment car world family house boy child country
#state job place way girl war question word

针对文本处理,更多在词这个层面,统计词频,算tf-idf等,把文档向量化,然后通过传统机器学习,去分类(情感识别也是分类),比如判断名字是男或女的概率,通过的方法有贝叶斯,SVM等。这些把所有词当作同样的东西处理,得到的信息自然很有限。

真正的自然语言理解,要做到像人类一样,还有很长很长的路要走。但从文本中提供更多信息(结构化)信息,可借机器查询,这是可能的。

首先,当然是词性标注,实词比较重要,比如名词,动词。

其次,分块,尤其是名词分块(NP-chunking)

看一个句子:

the little yellow dog barked at the cat.

sentence = [("the", "DT"), ("little", "JJ"), ("yellow", "JJ"),\("dog", "NN"), ("barked", "VBD"), ("at", "IN"), ("the", "DT"), ("cat", "NN")]
grammar = "NP: {<DT>?<JJ>*<NN>}"
cp = nltk.RegexpParser(grammar)
result = cp.parse(sentence)
print(result)
result.draw()

标注完词性后,我们使用一个简单的正则规则,就是DT NN,之间,可能有或没有形容词,然后把分块画出来。我们得到两个名词分块,句子也很清晰了。

有了分块,就可以识别命名实体(NER),主要是名词短语,人物,事件,地点,组织等。有了命名实体,我们再去抽取这些实体之间的关系,比如三元组或五元组,这些就是知识图谱的基础了。

目前很流行的QA系统,在电商,客服系统里有大量的应用。其实,在我们数据库里大量的结构化数据本身就可以支持回复很多问题。比如一个股票的数据库。你想知道“昨天涨幅超过5%的股票有多少支?”。这个问题通过SQL是可以查询的,但对于普通用户就有难度了,他需要知道数据库的设计,还要会数据库查询。

from nltk import load_parser
cp = load_parser('grammars/book_grammars/sql0.fcfg')
query = 'What cities are located in China'
trees = next(cp.parse(query.split()))
for tree in cp.parse(query.split()):print(tree)

得到sql语句:

(SELECT City FROM city_table, WHERE  Country="china")

NLTK是学习,研究NLP处理的一个很好的工具包,包括深度学习的实验等都可以在这个库上进行。

关于作者:魏佳斌,互联网产品/技术总监,北京大学光华管理学院(MBA),特许金融分析师(CFA),资深产品经理/码农。偏爱python,深度关注互联网趋势,人工智能,AI金融量化。致力于使用最前沿的认知技术去理解这个复杂的世界。

扫描下方二维码,关注:AI量化实验室(ailabx),了解AI量化最前沿技术、资讯。

转载于:https://my.oschina.net/u/1996852/blog/1569917

nltk自然语言处理相关推荐

  1. Python和NLTK自然语言处理

    作者:[印度] 尼天·哈登尼亚(Nitin Hardeniya)雅各布·帕金斯 出版社:人民邮电出版社 出版时间:2019年04月 Python和NLTK自然语言处理

  2. python和nltk自然语言处理书评_python自然语言处理_自然语言处理入门

    说明:本文是<Python数据分析与数据化运营>中的"3.12.4 自然语言文本预处理".下面是正文内容-与数据库 本文从概念和实际操作量方面,从零开始,介绍在Pyth ...

  3. Python NLTK 自然语言处理入门与例程

    Python NLTK 自然语言处理入门与例程 在这篇文章中,我们将基于 Python 讨论自然语言处理(NLP).本教程将会使用 Python NLTK 库.NLTK 是一个当下流行的,用于自然语言 ...

  4. NLTK自然语言处理入门

    Python NLTK 自然语言处理入门与例程 在这篇文章中,我们将基于 Python 讨论自然语言处理(NLP).本教程将会使用 Python NLTK 库.NLTK 是一个当下流行的,用于自然语言 ...

  5. [python+nltk] 自然语言处理简单介绍和NLTK坏境配置及入门知识(一)

    本文主要是总结最近学习的论文.书籍相关知识,主要是Natural Language Pracessing(自然语言处理,简称NLP)和Python挖掘维基百科Infobox等内容的知识.此篇文章主要参 ...

  6. python和nltk自然语言处理书评_Python和NLTK自然语言处理

    模块1 NLTK基础知识 第 1章 自然语言处理简介 3 1.1 为什么要学习NLP 4 1.2 从Python的基本知识开始 7 1.2.1 列表 7 1.2.2 自助 8 1.2.3 正则表达式 ...

  7. NLTK自然语言处理简介

    目录 安装 文本分类 结论 自然语言工具包(NLTK)提供了许多用于对文本内容执行自然语言处理(NLP)和机器学习分析的功能.我们将通过一个情感分析示例来演示其文本分类功能. 下载源1.6 KB 这是 ...

  8. python和nltk自然语言处理 脚本之家_想要入门自然语言处理,资料贫瘠,英语不好,大神推荐斯坦福的真的是搞不定,迷迷茫茫,不知从何下手?...

    不清楚题主定义的"入门"具体是什么层次.我认知中的入门一个领域有两种:第一种,知道核心概念大概含义并能调用工具,知其然而不知其所以然,这是知和用层面的入门:第二种,扎实掌握领域涉及 ...

  9. python和nltk自然语言处理百度云盘下载_把python自然语言处理的nltk_data打包到360云盘,然后共享给朋友们...

    回家前,把python自然语言处理的nltk_data打包到360云盘,然后共享给朋友们,省的大家像我一样浪费时间. 一次性下载解压后即可使用.官方的nltk.download()老是下载失败.无数遍 ...

最新文章

  1. 神经网络预测模型算法_MATLAB Elman神经网络的数据预测—电力负荷预测模型研究...
  2. 与webview打交道中踩过的那些坑
  3. 得到 yyyy/mm/dd 格式时间
  4. 转:求多边形的面积 算法几何
  5. 为应用“瘦身”!给 Android 应用开发者的十个建议(转)
  6. JS调用C#后台函数
  7. Windows完全卸载oracle11g步骤
  8. Android代码优化,主界面卡住
  9. Electron 实战:前端人的最佳跨平台解决方案
  10. IE6/7 单选按钮 radio 无法选中解决方法
  11. 简述MAC地址与IP地址的关系
  12. 项目过程管理(十七)结项
  13. 《Mimics软件临床应用:计算机辅助外科手术》目录摘要
  14. 使用AST进行JavaScript反混淆(2022年增值税发票查验js)
  15. android开发者模式自动打开位置touch信息
  16. 共享编辑文档系统dzzoffice安装
  17. 更好的 java 重试框架 sisyphus 入门简介
  18. 关键遥信量性能缺失的分析报告
  19. 微信小程序优惠券样式
  20. 绿标域名和普通域名有什么区别?

热门文章

  1. CSAPP第五章就在“扯淡”!
  2. mysql group by 区间_SQL按区间进行group by
  3. 转 DevExpress-ASPxPageControl 动态添加 TabPage 内容
  4. mysql 执行sql导出表格形式
  5. shlve模块 序列化 python任意的数据
  6. 百度移动终端研发工程师笔试题
  7. “源代码中禁止显示”概述
  8. JavaScript从入门到精通[文章列表联接]
  9. 从CVPR 2014看计算机视觉领域的最新热点
  10. MYSQL水平拆分与垂直拆分