python NLP ——获得文本语料和词汇资源

2023-10-28 03:18

本文主要是介绍python NLP ——获得文本语料和词汇资源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 获取文本语料库

1.Gutenberg

>>> from nltk.corpus import gutenberg
>>> gutenberg.fileids()
['austen-emma.txt', 'austen-persuasion.txt', 'austen-sense.txt', ...]
>>> emma = gutenberg.words('austen-emma.txt')macbeth_sentences = gutenberg.sents('shakespeare-macbeth.txt')
//words() raw() sents()
raw()没有任何处理的内容

2.网络和聊天成本

from nltk.corpus import webtext
from nltk.corpus import nps_chat

3.布朗语料库

from nltk.corpus import brown
print(brown.words(categories='news'))

特定文本计数

import nltk    
from nltk.corpus import brown
text= brown.words(categories='news')
fdist=nltk.FreqDist(w.lower() for w in text)
modals=['can','could','may','must','will']
for m in modals:print(m+':',fdist[m],end=' ')

设置end = ’ '以让print函数将其输出放在单独的一行
使用print( , , )输出int和char

4.路透社语料库

from nltk.corpus import reuters
训练 测试

5.就职演说语料库

要从文件名中获得年代,我们使用fileid[:4]提取前四个字符。

>>> from nltk.corpus import inaugural
>>> inaugural.fileids()
['1789-Washington.txt', '1793-Washington.txt', '1797-Adams.txt', ...]
>>> [fileid[:4] for fileid in inaugural.fileids()]
['1789', '1793', '1797', '1801', '1805', '1809', '1813', '1817', '1821', ...]

6.文本语料库的结构

NLTK 中定义的基本语料库函数
在这里插入图片描述
在这里插入图片描述

二 条件频率分布

1.条件和事件

配对序列(条件,事件)

2.按文体计数词汇

import nltk
from nltk.corpus import brown
cfd=nltk.ConditionalFreqDist((genre,word)for genre in brown.categories()for word in brown.words(categories=genre)
)

在这里插入图片描述

3.绘制分布图和分布表

import nltk
from nltk.corpus import inaugural
cfd=nltk.ConditionalFreqDist((target,fileid[:4])for fileid in inaugural.fileids()for w in inaugural.words(fileid)for target in ['america','citizen']if w.lower().startswith(target)
)
print(cfd['america'].most_common(10))cfd.tabulate(conditions=['america','citizen'],samples=['2000','2001','2002','2003','2004','2005'],cumulative=True)

在这里插入图片描述

import nltk
from nltk.corpus import udhr
languages = ['Chickasaw', 'English', 'German_Deutsch', 'Greenlandic_Inuktikut', 'Hungarian_Magyar', 'Ibibio_Efik']
cfd=nltk.ConditionalFreqDist((lang,len(word))for lang in languagesfor word in udhr.words(lang+'-Latin1')
)
print(cfd['English'].most_common(10))cfd.tabulate(conditions=['English','German_Deutsch'],samples=range(10),cumulative=True)

在这里插入图片描述
tabulate直译是制表,让python实现表格化显示。
可以使用conditions=来选择指定哪些条件显示。如果我们忽略它,所有条件都会显示。同样,我们可以使用samples=parameter 来限制要显示的样本。(注意参数是数字还是字符)
cumulative 是否累加

处理布朗语料库的新闻和言情文体,找出一周中最有新闻价值并且是最浪漫的日子。定义一个变量days,包含星期的列表,如[‘Monday’,
…]。然后使用cfd.tabulate(samples=days)为这些词的计数制表。

import nltk
from nltk.corpus import brown
cfd=nltk.ConditionalFreqDist((con,day)for con in ['news','romance']for day in brown.words(categories=con)
)
days=['Monday','Tuesday', 'Wednesday','Thursday', 'Friday', 'Saturday', 'Sunday']
cfd.tabulate(samples=days,cumulative=False)

4.使用双连词生成随机文本

在这里插入图片描述

//输入变量word的当前值,重新设置word为上下文中最可能的词符(使用max())
def generate_model(cfdist,word,num=15):for i in range(num):print(word,end=" ")word=cfdist[word].max()text=nltk.corpus.genesis.words('english-kjv.txt')
bigrams=nltk.bigrams(text)
cfd=nltk.ConditionalFreqDist(bigrams)    //创建后续词的频率分布print(cfd['living'].most_common(10))
generate_model(cfd,'living')

在这里插入图片描述
在这里插入图片描述

三 词汇资源

1.词汇列表语料库

nltk.corpus.words

停用词 stopwords

在这里插入图片描述
字母拼写谜题

import nltk
must_word='r'
wordlist=nltk.corpus.words.words()
words=[w for w in wordlist if len(w)>=6and must_word in wand nltk.FreqDist(w)<=nltk.FreqDist('egivrvonl')]
print(words)

遍历每一个词查看长度以及r是否在单词中,FreqDist比较在单词中出现的频率是否小于等于在字母解密中出现的频率,保证除v以外的字母只出现1次,v最多只出现两次
在这里插入图片描述

名字语料库

在这里插入图片描述

2.发音的词典

nltk.corpus.cmudict.entries()
在这里插入图片描述
每个条目由两部分组成
用两个变量名word, pron替换entry。现在,每次通过循环时,word被分配条目的第一部分,pron被分配条目的第二部分

import nltk
entries=nltk.corpus.cmudict.entries()
for word,pron in entries:if len(pron) == 3 :p1,p2,p3=pron    //注意! 将pron的内容分配给三个变量if p1=='P' and p3=='T':print(word,p2,end=' ')

扫描词典中发音包含三个音素的条目
在这里插入图片描述

找到所有p开头的三音素词,并按照它们的第一个和最后一个音素来分组

import nltk
entries=nltk.corpus.cmudict.entries()
p3=[(pron[0]+'-'+pron[2],word)for (word,pron) in entriesif pron[0]=='P' and len(pron) ==3]
cfd=nltk.ConditionalFreqDist(p3)
for temp in sorted(cfd.conditions()):if len(cfd[temp])>10:words=sorted(cfd[temp])wordlist=' '.join(words)print(temp,wordlist[:10])

在这里插入图片描述

查找特定词汇来访问词典
在这里插入图片描述

3.比较词表

五 WordNet

1.意义与同义词

from nltk.corpus import wordnet as wn
print(wn.synsets('motorcar'))

在这里插入图片描述
motorcar只有一个可能的含义,它被定义为car.n.01,car的第一个名词意义。car.n.01被称为synset或“同义词集”,意义相同的词(或“词条”)的集合

print(wn.synset('car.n.01').lemma_names())   //访问同义词集

在这里插入图片描述

//定义和例句
print(wn.synset('car.n.01').definition())
print(wn.synset('car.n.01').examples())

在这里插入图片描述

print(wn.synset('car.n.01').lemmas())  //指定同义词集的所有词条
print(wn.lemma('car.n.01.automobile'))   //查找特定的词条
print(wn.lemma('car.n.01.automobile').synset())   //得到一个词条的同义词集
print(wn.lemma('car.n.01.automobile').name())   //得到一个词条的名字

在这里插入图片描述

2.层次结构

在这里插入图片描述
下位词集 hyponyms()
hypernyms() #得到指定同义词集的上位同义词集
hypernym_paths() #得到指定同义词集的上位词路径(嵌套列表的形式)
root_hypernyms() #得到根上位同义词集

3.词汇关系

part_meronyms() 部分
substance_meronyms() 实质
member_holonyms() 集合
entailments() 蕴含
antonyms() 反义词
使用dir()查看词汇关系和同义词集上定义的其他方法

4.语义相似度

lowest_common_hypernyms
min_depth
path_similarity 基于上位词层次结构中相互连接的概念之间的最短路径在0-1范围的打分(两者之间没有路径就返回-1)。同义词集与自身比较将返回1。

六 作业

1.使用state_union语料库阅读器,访问《国情咨文报告》的文本。计数每个文档中
出现的men、women和people。随时间的推移这些词的用法有什么变化?

import nltk
from nltk.corpus import state_union
cfd=nltk.ConditionalFreqDist((target,fileid[:4])for fileid in state_union.fileids()for w in state_union.words(fileid)for target in ['men','women','people']if w.lower() == target
)
cfd.plot()

在这里插入图片描述
2.在名字语料库上定义一个条件频率分布,显示哪个首字母在男性名字中比在女性名字中更常用。

import nltk
from nltk.corpus import names
cfd=nltk.ConditionalFreqDist((fileid,name[0])for fileid in names.fileids()for name in names.words(fileid)
)
cfd.plot()

在这里插入图片描述
3.编写一段程序,找出所有在布朗语料库中出现至少3次的词

import nltk
from nltk.corpus import brown
fd=nltk.FreqDist(w.lower() for w in brown.words())
fd_words=[w for w in fd if fd[w]>=3]
print(fd_words)

在这里插入图片描述
4.编写一段程序,生成如表1-1所示的词汇多样性得分表(例如:标识符/类型的比例)。包括布朗语料库文体的全集(nltk.corpus.borwn.categories())。哪个文体的词汇多样性最低(每个类型的标识符数最多)?和你预测的结果相同吗?

from nltk.corpus import brown
def per(words):words=[w.lower() for w in words]return len(words)/len(set(words))for category in brown.categories():print(category,per(brown.words(categories=category)))

在这里插入图片描述
5.编写一个函数,找出文本中最常出现的50个词,停用词除外。

import nltk
from nltk.corpus import brown
from nltk.corpus import stopwords
def max(words):words=[w.lower() for w in words if w.lower() not in stopwords.words(fileids=u'English')]cfd=nltk.FreqDist(words)max_word=cfd.most_common(50)return max_wordprint("brown",max(brown.words()))

6.编写一个函数word_freq(),用一个词和布朗语料库中的一个部分名字作为参数,计算这部分语料中词的频率。

import nltk
from nltk.corpus import brown
def word_freq(word,name):words=[w.lower() for w in brown.words(fileids=name)]fdist=nltk.FreqDist(words)freq=fdist[word]/len(words)print(word,freq)word_freq('the','ca16')

在这里插入图片描述

7.定义一个函数hedge(text),用于处理文本并产生一个在三个词之间插入一个词like的新版本。

def hedge(text):new_text=[]for index in range(3,len(text),3):new_text.extend(text[index-3:index]+['like'])new_text.extend(text[index:])print(new_text)text=['1','2','3','4','5','6','7']
hedge(text)

在这里插入图片描述

注意append() 和expend()区别
list.append(object) 向列表中添加一个对象object
list.extend(sequence) 把一个序列seq的内容添加到列表中

在这里插入图片描述
8.齐夫定律:f(w)是自由文本中词w的频率。假设一个文本中的所有词都按照它们的频率排名,频率最高的排在最前面。齐夫定律指出一个词类型的频率与它的排名成反比(即f*r=k,k是某个常数)。例如:最常见的第50个词类型出现的频率应该是最常见的第150个词类型出现频率的3倍。
a. 编写一个函数用于处理大文本,使用pylab.plot根据排名画出词的频率,你赞同齐夫定律吗?(提示:使用对数刻度)所绘曲线的极端情况是怎样的?基本符合齐夫定律。

import nltk
from nltk.corpus import brown
words=[w.lower() for w in brown.words(categories='news')]
fdist=nltk.FreqDist(words)
fdist.plot(10)

在这里插入图片描述
for word,freq in fdist.most_common(10)
分别获取word 和 对应频率

这篇关于python NLP ——获得文本语料和词汇资源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/290319

相关文章

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及