----------欢迎加入学习交流QQ群:657341423


自然语言处理是人工智能的类别之一。自然语言处理主要有那些功能?我们以百度AI为例

从上述的例子可以看到,自然语言处理最基本的功能是词法分析,词法分析的功能主要有:

  1. 分词分句
  2. 词语标注
  3. 词法时态(适用于英文词语)
  4. 关键词提前(词干提取)

由于英文和中文在文化上存在巨大的差异,因此Python处理英文和中文需要使用不同的模块,中文处理推荐使用jieba模块,英文处理推荐使用nltk模块。模块安装方法可自行搜索相关资料。


英文处理

import nltk
f = open('aa.txt','r',encoding='utf-8')
text = f.read()
f.close()----------# sent_tokenize 文本分句处理,text是一个英文句子或文章
value = nltk.sent_tokenize(text)
print(value)
# word_tokenize 分词处理,分词不支持中文
for i in value:words = nltk.word_tokenize(text=i)print(words)----------# pos_tag 词性标注,pos_tag以一组词为单位,words是列表组成的词语列表
words = ['My','name','is','Lucy']
tags = nltk.pos_tag(words)
print(tags)----------# 时态,过去词,进行时等
# 词语列表的时态复原,如果单词是全变形的无法识别
from nltk.stem import PorterStemmer
data = nltk.word_tokenize(text="worked presumably goes play,playing,played",language="english")
ps = PorterStemmer()
for w in data:print(w,":",ps.stem(word=w))
# 单个词语的时态复原,如果单词是全变形的无法识别
from nltk.stem import SnowballStemmer
snowball_stemmer = SnowballStemmer('english')
a = snowball_stemmer.stem('plays')
print(a)# 复数复原,如果单词是全变形的无法识别
from nltk.stem import WordNetLemmatizer
wordnet_lemmatizer = WordNetLemmatizer()
a = wordnet_lemmatizer.lemmatize('leaves')
print(a)----------# 词干提取,提前每个单词的关键词,然后可进行统计,得出词频
from nltk.stem.porter import PorterStemmer
porter = PorterStemmer()
a = porter.stem('pets insurance')
print(a)----------from nltk.corpus import wordnet
word = "good"# 返回一个单词的同义词和反义词列表
def Word_synonyms_and_antonyms(word):synonyms = []antonyms = []list_good = wordnet.synsets(word)for syn in list_good:# 获取同义词for l in syn.lemmas():synonyms.append(l.name())# 获取反义词if l.antonyms():antonyms.append(l.antonyms()[0].name())return (set(synonyms), set(antonyms))# 返回一个单词的同义词列表
def Word_synonyms(word):list_synonyms_and_antonyms = Word_synonyms_and_antonyms(word)return list_synonyms_and_antonyms[0]# 返回一个单词的反义词列表
def Word_antonyms(word):list_synonyms_and_antonyms = Word_synonyms_and_antonyms(word)return list_synonyms_and_antonyms[1]print(Word_synonyms(word))
print(Word_antonyms(word))----------# 造句
print(wordnet.synset('name.n.01').examples())
# 词义解释
print(wordnet.synset('name.n.01').definition())----------from nltk.corpus import wordnet
# 词义相似度.'go.v.01'的go为词语,v为动词
# w1 = wordnet.synset('fulfil.v.01')
# w2 = wordnet.synset('finish.v.01')
# 'hello.n.01'的n为名词
w1 = wordnet.synset('hello.n.01')
w2 = wordnet.synset('hi.n.01')
# 基于路径的方法
print(w1.wup_similarity(w2))# Wu-Palmer 提出的最短路径
print(w1.path_similarity(w2))# 词在词典层次结构中的最短路径
print(w1.lch_similarity(w2))# Leacock Chodorow 最短路径加上类别信息
# 基于互信息的方法
from nltk.corpus import genesis
# 从语料库加载信息内容
# brown_ic = wordnet_ic.ic('ic-brown.dat')
# nltk自带的语料库创建信息内容词典
genesis_ic = wordnet.ic(genesis,False,0.0)
print(w1.res_similarity(w2,genesis_ic))
print(w1.jcn_similarity(w2,genesis_ic))
print(w1.lin_similarity(w2,genesis_ic))

由于上述的方法是建立在语料库中,有时候一些不被记录的单词可能无法识别或标注。这时候需要自定义词性标注器,词性标注器的类型有几种,具体教程可以看——>自定义词性标注器


中文处理

import jieba
import jieba.analyse
f = open('aa.txt','r',encoding='utf-8')
text = f.read()
f.close()----------# 分词
seg_list = jieba.cut(text, cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式seg_list = jieba.cut(text, cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精确模式seg_list = jieba.cut_for_search(text)  # 搜索引擎模式
print(", ".join(seg_list))----------# 关键字提取
# 基于TF-IDF算法的关键词抽取
# sentence 为待提取的文本
# topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
# withWeight 为是否一并返回关键词权重值,默认值为 False
# allowPOS 仅包括指定词性的词,默认值为空,即不筛选
keywords = jieba.analyse.extract_tags(sentence=text, topK=20, withWeight=True, allowPOS=('n','nr','ns'))
# 基于TextRank算法的关键词抽取
# keywords = jieba.analyse.textrank(text, topK=20, withWeight=True, allowPOS=('n','nr','ns'))
for item in keywords:print(item[0],item[1])----------# 词语标注
import jieba.posseg
# 新建自定义分词器,tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
posseg = jieba.posseg.POSTokenizer(tokenizer=None)
words = posseg.cut(text)
for word, flag in words:print('%s %s' % (word, flag))

jieba分词也是基于语料库,我们可以对原有的语料库添加词语,或者导入自定义的语料文件,如下所示:

# 对原有的语料库添加词语
jieba.add_word(word, freq=None, tag=None)
# 导入语料文件
jieba.load_userdict('disney.txt')

语料文件格式如下:每行分三个部分(用空格隔开),词语 词频(可省) 词性(可省)。ns是词语标记,词语和标注之间用空格隔开,txt文件格式为uft-8

jieba更多教程——>jieba教程

Python 自然语言处理(基于jieba分词和NLTK)相关推荐

  1. python自然语言处理 分词_Python 自然语言处理(基于jieba分词和NLTK)

    Python 自然语言处理(基于jieba分词和NLTK) 发布时间:2018-05-11 11:39, 浏览次数:1038 , 标签: Python jieba NLTK ----------欢迎加 ...

  2. python 自然语言处理(二) jieba 分词

    import jieba s ='我想和女朋友一起去北京故宫博物院参观和闲逛.' #精确模式 cut = jieba.cut(s) print (','.join(cut)) 我,想,和,女朋友,一起 ...

  3. Java web:基于jieba分词器(或ansj分词器)的文章关键词字符云(词云图)

    上来先丢一个展示图,吸引一下注意力(跑. 上图为对某论文用jieba分词后,计算其逆文档频率(TF-IDF)作为权重,并用echarts的字符云扩展包echarts-wordcloud画出来的字符云图 ...

  4. python同义词替换(jieba分词)

    python同义词替换(jieba分词) TihuanWords.txt文档格式 注意:同一行的词用单个空格隔开,每行第一个词为同行词的替换词. 年休假 年假 年休 究竟 到底 回家场景 我回来了 代 ...

  5. 自然语言处理之jieba分词

    在处理英文文本时,由于英文文本天生自带分词效果,可以直接通过词之间的空格来分词(但是有些人名.地名等需要考虑作为一个整体,比如New York).而对于中文还有其他类似形式的语言,我们需要根据来特殊处 ...

  6. 【Python自然语言处理】中文分词技术——统计分词

    中文分词方法 本文参考自书籍<Python自然语言处理实战:核心技术与算法> 用做个人的学习笔记和分享 1. 规则分词 规则分词的详细笔记 2. 统计分词 2.1 一般步骤 建立统计语言模 ...

  7. 自然语言处理2 -- jieba分词用法及原理

    文章目录 1 概述 2 jieba分词用法 2.1 分词 2.2 添加自定义词典 2.3 调整词典 2.4 关键词提取 2.5 词性标注 2.6 并行分词 2.7 Tokenize:返回词语在原文的起 ...

  8. 【Python自然语言处理】中文分词技术——规则分词

    中文分词方法 本文参考自书籍<Python自然语言处理实战:核心技术与算法> 用做个人的学习笔记和分享 1. 规则分词 规则分词是一种机械分词方法,主要通过维护词典,在切分语句时将语句的每 ...

  9. python中正则表达式与jieba分词的使用

    这次和大家分享一下主要使用正则表达式匹配文本信息内容的案例,其中还用到了jieba分词词性标注技术,和一些对文本的切片工作.有兴趣学习的可以详细看看,具体内容,应该有点帮助,这是本人一个一个代码敲出来 ...

最新文章

  1. 网络与服务器编程框架库 acl_3.0.13 发布
  2. 部署在IIS上的网站如何调试
  3. AD域管理系列(6)-- 常见处理
  4. 项目进度计划表_十大项目管理工具模版~
  5. PXC5.7(Percona XtraDB Cluster)+HAproxy集群部署
  6. 我的第一个python web开发框架(6)——第一个Hello World
  7. 冷知识 —— 物种大交换
  8. POJ 1703 Find them, Catch them(路径压缩并查集)
  9. 如何授权您的Mac播放AppleMusic?
  10. jsp分页带条件查询时,点击上一页或下一页,没有按条件查询数据。
  11. 单片机c语言延时30s程序,单片机c语言中的精确延时程序
  12. Linux线程优先级
  13. javascript --- 设计模式之单体模式(一)
  14. 计算机辅助电话访问优势,电话访问的优点缺点、优势不足、局限性
  15. 读硕士和读博士有什么区别?
  16. 图解Google搜索技术
  17. 零知识证明之什么是QAP?什么是P/NP、NP完全问题(NPC问题)、NP hard问题?多项式时间
  18. 两性相吸的20个完美方案
  19. JSP出租房管理系统myeclipse开发mysql数据库BS模式java编程网页结构详细设计
  20. python 简单TCP通信实例 TCP断线自动重连 客户端服务端没有启动顺序

热门文章

  1. android高德方向,Android高德地图填坑
  2. Virtual ChIP-seq: predicting transcription factor binding by learning from the transcriptome
  3. Flink编程中遇到”scala.tools.reflect.ToolBoxError: reflective compilation has failed“的解决方法
  4. 计算机主机报警是怎么回事,计算机不断报警的原因是什么?
  5. OSPF的知识点总结及其扩展
  6. java 在线excel_Java实现最简单的在线打开保存Excel文件
  7. 嘟噜噜的难受伴快乐的一天。
  8. 数据库系统概论(第五版)王珊 自用复习笔记
  9. shell脚本回车换行_终于搞懂了回车与换行的区别
  10. Fer2013 数据集人脸表情识别 详细代码