目录
词性标注器
标注语料库
表示已经标注的标识符:nltk.tag.str2tuple('word/类型')
读取已经标注的语料库
名词、动词、形容词等
尝试找出每个名词类型中最频繁的名词
探索已经标注的语料库
自动标注
默认标注器
正则表达式标注器
查询标注器
N-gram标注
基础的一元标注器
一般的N-gram标注器
组合标注器
跨句子边界标注
基于转换的标注:Brill标注器
首页 后端开发 Python教程 NLTK学习:分类和标注词汇

NLTK学习:分类和标注词汇

Jun 23, 2017 pm 03:33 PM
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(&#39;NN&#39;)
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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

小红书笔记怎么删除 小红书笔记怎么删除 Mar 21, 2024 pm 08:12 PM

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

学会彻底卸载pip,使用Python更加高效 学会彻底卸载pip,使用Python更加高效 Jan 16, 2024 am 09:01 AM

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

小红书发布过的笔记不见了怎么办?它刚发的笔记搜不到的原因是什么? 小红书发布过的笔记不见了怎么办?它刚发的笔记搜不到的原因是什么? Mar 21, 2024 pm 09:30 PM

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

小红书怎么在笔记中添加商品链接 小红书在笔记中添加商品链接教程 小红书怎么在笔记中添加商品链接 小红书在笔记中添加商品链接教程 Mar 12, 2024 am 10:40 AM

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

深入研究matplotlib的色彩映射表 深入研究matplotlib的色彩映射表 Jan 09, 2024 pm 03:51 PM

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

2024年自动驾驶标注行业是否会被世界模型所颠覆? 2024年自动驾驶标注行业是否会被世界模型所颠覆? Mar 01, 2024 pm 10:37 PM

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

揭秘C语言的吸引力: 发掘程序员的潜质 揭秘C语言的吸引力: 发掘程序员的潜质 Feb 24, 2024 pm 11:21 PM

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

Pygame入门指南:全面安装和配置教程 Pygame入门指南:全面安装和配置教程 Feb 19, 2024 pm 10:10 PM

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

See all articles