NLTK学习:分类和标注词汇
[TOC]
词性标注器
之后的很多工作都需要标注完的词汇。nltk自带英文标注器
pos_tag
import nltk text = nltk.word_tokenize("And now for something compleyely difference")print(text)print(nltk.pos_tag(text))
标注语料库
表示已经标注的标识符:nltk.tag.str2tuple('word/类型')
text = "The/AT grand/JJ is/VBD ."print([nltk.tag.str2tuple(t) for t in text.split()])
读取已经标注的语料库
nltk语料库ue肚脐提供了统一接口,可以不必理会不同的文件格式。格式:
语料库.tagged_word()/tagged_sents()
。参数可以指定categories和fields
print(nltk.corpus.brown.tagged_words())
名词、动词、形容词等
这里以名词为例
from nltk.corpus import brown word_tag = nltk.FreqDist(brown.tagged_words(categories="news"))print([word+'/'+tag for (word,tag)in word_tag if tag.startswith('V')])################下面是查找money的不同标注#################################wsj = brown.tagged_words(categories="news") cfd = nltk.ConditionalFreqDist(wsj)print(cfd['money'].keys())
尝试找出每个名词类型中最频繁的名词
def findtag(tag_prefix,tagged_text): cfd = nltk.ConditionalFreqDist((tag,word) for (word,tag) in tagged_text if tag.startswith(tag_prefix))return dict((tag,list(cfd[tag].keys())[:5]) for tag in cfd.conditions())#数据类型必须转换为list才能进行切片操作tagdict = findtag('NN',nltk.corpus.brown.tagged_words(categories="news"))for tag in sorted(tagdict):print(tag,tagdict[tag])
探索已经标注的语料库
需要
nltk.bigrams()
和nltk.trigrams()
,分别对应2-gram模型和3-gram模型。
brown_tagged = brown.tagged_words(categories="learned") tags = [b[1] for (a,b) in nltk.bigrams(brown_tagged) if a[0]=="often"] fd = nltk.FreqDist(tags) fd.tabulate()
自动标注
默认标注器
最简单的标注器是为每个标识符分配统一标记。下面就是一个将所有词都变成NN的标注器。并且用
evaluate()
进行检验。当很多词语是名词时候,它有利于第一次分析并提高稳定性。
brown_tagged_sents = brown.tagged_sents(categories="news") raw = 'I do not like eggs and ham, I do not like them Sam I am'tokens = nltk.word_tokenize(raw) default_tagger = nltk.DefaultTagger('NN')#创建标注器print(default_tagger.tag(tokens)) # 调用tag()方法进行标注print(default_tagger.evaluate(brown_tagged_sents))
正则表达式标注器
注意这里规则是固定(由自己决定)。当规则越来越完善的时候,精确度越高。
patterns = [ (r'.*ing$','VBG'), (r'.*ed$','VBD'), (r'.*es$','VBZ'), (r'.*','NN')#为了方便,只有少量规则] regexp_tagger = nltk.RegexpTagger(patterns) regexp_tagger.evaluate(brown_tagged_sents)
查询标注器
这里和书里是有差别的,不同于python2,注意调试。而查询标注器就是存储最有可能的标记,并且可以设置
backoff
参数,不能标记的情况下,就使用这个标注器(这个过程是回退)
fd = nltk.FreqDist(brown.words(categories="news")) cfd = nltk.ConditionalFreqDist(brown.tagged_words(categories="news"))##############################################python2和3的区别#########most_freq_words = fd.most_common(100) likely_tags = dict((word,cfd[word].max()) for (word,times) in most_freq_words)#######################################################################baseline_tagger = nltk.UnigramTagger(model=likely_tags,backoff=nltk.DefaultTagger('NN')) baseline_tagger.evaluate(brown_tagged_sents)
N-gram标注
基础的一元标注器
一元标注器的行为和查找标注器很相似,建立一元标注器的技术,为训练。
这里我们的标注器只是记忆训练集,而不是建立一般模型,那么吻合很好,但是不能推广到新文本。
size = int(len(brown_tagged_sents)*0.9) train_sents = brown_tagged_sents[:size] test_sents = brown_tagged_sents[size+1:] unigram_tagger = nltk.UnigramTagger(train_sents) unigram_tagger.evaluate(test_sents)
一般的N-gram标注器
N元标注器,就是检索index= n 的 word,并且检索n-N<=index<=n-1 的 tag。即通过前面词的tag标签,进一步确定当前词汇的tag。类似于
nltk.UnigramTagger()
,自带的二元标注器为:nltk.BigramTagger()
用法一致。
组合标注器
很多时候,覆盖范围更广的算法比精度更高的算法更有用。利用
backoff
指明回退标注器,来实现标注器的组合。而参数cutoff
显式声明为int型,则会自动丢弃只出现1-n次的上下文。
t0 = nltk.DefaultTagger('NN') t1 = nltk.UnigramTagger(train_sents,backoff=t0) t2 = nltk.BigramTagger(train_sents,backoff=t1) t2.evaluate(test_sents)
可以发现,和原来比较之后,精确度明显提高
跨句子边界标注
对于句首的单词,没有前n个单词。解决方法:通过已标记的tagged_sents来训练标注器。
基于转换的标注:Brill标注器
较上面的都优秀。实现的思路:以大笔化开始,然后修复细节,一点点进行细致改变。
不仅占用内存小,而且关联上下文,并且根据问题的变小,实时修正错误,而不是一成不变的。当然,在python3和python2的调用有所不同。
from nltk.tag import brill brill.nltkdemo18plus() brill.nltkdemo18()
以上是NLTK学习:分类和标注词汇的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

小红书笔记怎么删除?在小红书APP中是可以编辑笔记的,多数的用户不知道小红书笔记如何的删除,接下来就是小编为用户带来的小红书笔记删除方法图文教程,感兴趣的用户快来一起看看吧!小红书使用教程小红书笔记怎么删除1、首先打开小红书APP进入到主页面,选择右下角【我】进入到专区;2、之后在我的专区,点击下图所示的笔记页面,选择要删除的笔记;3、进入到笔记页面,右上角【三个点】;4、最后下方会展开功能栏,点击【删除】即可完成。

不再需要pip?快来学习如何有效卸载pip!引言:pip是Python的包管理工具之一,它可以方便地安装、升级和卸载Python包。然而,有时候我们可能需要卸载pip,可能是因为我们希望使用其他的包管理工具,或者因为我们需要完全清除Python环境。本文将介绍如何有效地卸载pip,并提供具体的代码示例。一、卸载pip的方法下面将介绍两种常见的卸载pip的方法

作为一名小红书的用户,我们都曾遇到过发布过的笔记突然不见了的情况,这无疑让人感到困惑和担忧。在这种情况下,我们该怎么办呢?本文将围绕“小红书发布过的笔记不见了怎么办”这一主题,为你详细解答。一、小红书发布过的笔记不见了怎么办?首先,不要惊慌。如果你发现笔记不见了,保持冷静是关键,不要慌张。这可能是由于平台系统故障或操作失误引起的。检查发布记录很简单。只需打开小红书App,点击“我”→“发布”→“所有发布”,就可以查看自己的发布记录。在这里,你可以轻松找到之前发布的笔记。3.重新发布。如果找到了之

小红书怎么在笔记中添加商品链接?在小红书这款app中用户不仅可以浏览各种内容还可以进行购物,所以这款app中关于购物推荐、好物分享的内容是非常多的,如果小伙伴在这款app也是一个达人的话,也可以分享一些购物经验,找到商家进行合作,在笔记中添加连接之类的,很多人都愿意使用这款app购物,因为不仅方便,而且有很多达人会进行一些推荐,可以一边浏览有趣内容,一边看看有没有适合自己的衣服商品。一起看看如何在笔记中添加商品链接吧!小红书笔记添加商品链接方法 在手机桌面上打开app。 在app首页点击

深入学习matplotlib颜色表,需要具体代码示例一、引言matplotlib是一个功能强大的Python绘图库,它提供了丰富的绘图函数和工具,可以用于创建各种类型的图表。而颜色表(colormap)是matplotlib中一个重要的概念,它决定了图表的配色方案。深入学习matplotlib颜色表,将帮助我们更好地掌握matplotlib的绘图功能,使绘

1.数据标注面临的问题(特别是基于BEV任务)随着基于BEVtransformer任务的兴起,随之带来的是对数据的依赖变的越来越重,基于BEV任务的标注也变得越来越重要。目前来看无论是2D-3D的联合障碍物标注,还是基于重建点云的clip的车道线或者Occpuancy任务标注都还是太贵了(和2D标注任务相比,贵了很多)。当然业界里面也有很多基于大模型等的半自动化,或者自动化标注的研究。还有一方面是自动驾驶的数据采集,周期太过于漫长,还涉及到数据合规能一系列问题。比如,你想采集一个平板车跨相机的场

学习C语言的魅力:解锁程序员的潜力随着科技的不断发展,计算机编程已经成为了一个备受关注的领域。在众多编程语言中,C语言一直以来都备受程序员的喜爱。它的简单、高效以及广泛应用的特点,使得学习C语言成为了许多人进入编程领域的第一步。本文将讨论学习C语言的魅力,以及如何通过学习C语言来解锁程序员的潜力。首先,学习C语言的魅力在于其简洁性。相比其他编程语言而言,C语

从零开始学习Pygame:完整的安装和配置教程,需要具体代码示例引言:Pygame是一个使用Python编程语言开发的开源游戏开发库,它提供了丰富的功能和工具,使得开发者可以轻松创建各种类型的游戏。本文将带您从零开始学习Pygame,并提供完整的安装和配置教程,以及具体的代码示例,让您快速入门。第一部分:安装Python和Pygame首先,确保您的计算机上已
