自然语言处理实战 利用Python理解、分析和生成文本,python基础语法个人笔记

  自然语言处理实战 利用Python理解、分析和生成文本,python基础语法个人笔记

  计算机编程语言自然语言处理学习笔记(41):5.2 标注语料库5.2标记语料库标注语料库

  表示标记的令牌表示标注的语言符号

  按照自然语言工具包中的约定,标记的令牌使用由令牌和标记组成的元组来表示。我们可以使用函数str2tuple()从标记令牌的标准字符串表示中创建这些特殊元组之一:

  tagged _ token=nltk标签。字符串2元组( fly/NN )

  标记_令牌

  (飞, NN )

  标记的令牌[0]

  "飞"

  tagged_token[1]

  恩

  我们可以直接从字符串中构造一个标记令牌列表。第一步是对字符串进行标记化,以访问单个单词/标记字符串,然后将每个字符串转换为一个元组(使用str2tuple()).

  已发送=

  .大陪审团/JJ陪审团/NN于/年/月/日第/NN号评论了/VBD

  .其他/美联社话题/NNS/,其中/其中在亚特兰大和/抄送

  .富尔顿/NP-tl县/NN-tl采购部/VBG部门/NNS it/WDT it/PPS

  .说/VBD ``/` 是/BER井/QL经营/VBN和/抄送跟随/VB一般/RB

  .公认的/VBN的做法/NNS的做法/WDT的习惯/在/充其量/JJT

  .双方/ABX政府/NNS的利益/NN / ./.

  .

  sent.split()中t的nltk。标签。字符串2元组(t)]

  [(The , AT ),( grand , JJ ),( jury , NN ),( commented , VBD ),

  ( on , IN ),( a , AT ),( number , NN ),(., .)]

  阅读标记语料库读取已标注的语料库

  自然语言工具包包含的几个语料库已经被标注了词性。如果用文本编辑器打开褐色的语料库中的文件,您可能会看到以下示例:

  /at Fulton/NP-TL County/nn-TL Grand/jj-TL Jury/nn-TL said/vbd Friday/NR an/at investigation/nn of/in Atlanta的/NP $ recent/jj初选/nn选举/nn产生/vbd/no/at evidence/nn / that/cs any/DTI违规行为/nns take/vbd place/nn/。

  其他语料库使用各种格式来存储词性标签100 . NLTK的语料库阅读器提供了一个统一的接口,因此您不必担心不同的文件格式。与上面显示的文件摘录相比,棕色语料库的语料库阅读器显示的数据如下所示。请注意,词性标签已经转换为大写,因为这已经成为标准做法(标准惯例)自从布朗文集出版以来。

  nltk.corpus.brown.tagged_words()

  [(The , AT ),( Fulton , NP-TL ),( County , NN-TL ),]

  nltk。语料库。棕色。tagged _ words(simplify _ tags=True)

  [(The , DET ,(富尔顿、 N )、(县、 N ),]

  每当语料库包含标记文本时,NLTK语料库接口将有一个标记的单词()方法。下面是更多的例子,同样使用褐色的语料库的输出格式:

  打印nltk。语料库。NPS _ chat。标记的单词()

  [(现在、 RB )、( im 、 PRP )、(左,‘VBD’),]

  nltk。语料库。conll 2000。标记的单词()

  [(Confidence , NN ),( in , IN ,( the , DT ),]

  nltk。语料库。树木银行。标记的单词()

  [(皮埃尔、 NNP )、(文肯、 NNP )、(、、、),]

  不是所有的语料库都使用相同的标签集;有关文档,请参见上述标记集帮助功能和自述文件()方法。最初,我们希望避免这些标签集的复杂性,所以我们使用一个到简化标签集的内置映射:

  nltk。语料库。棕色。tagged _ words(simplify _ tags=True)

  [(The , DET ,(富尔顿、 NP )、(县、 N ),]

  nltk。语料库。树木银行。tagged _ words(simplify _ tags=True)

  [(皮埃尔、 NP )、(文肯、 NP )、(、、、),]

  自然语言工具包发布了其他几种语言的标记语料库,包括中文、印地语、葡萄牙语、西班牙语、荷兰语和加泰罗尼亚语。这些通常包含非美国信息交换标准代码文本,Python在打印更大的结构(如列表)时总是以十六进制显示。

  nltk。语料库。中国_树银行。标记的单词()

  [(\xe4\xb8\x80 , Neu ),( \xe5\x8f\x8b\xe6\x83\x85 , Nad ),]

  nltk。语料库。印度人。标记的单词()

  [( \ xe0 \ xa6 \ xae \ xe0 \ xa6 \ xb9 \ xe0 \ xa6 \ xbf \ xe0 \ xa6 \ xb7 \ xe0 \ xa7 \ x87 \ xe0 \ xa6 \ xb0 , NN ),

  ( \ xe0 \ xa6 \ xb8 \ xe0 \ xa6 \ xa8 \ xe0 \ xa7 \ x8d \ xe0 \ xa6 \ xa4 \ xe0 \ xa6 \ xbe \ xe0 \ xa6 \ xa8 , NN ),

  .]

  nltk。语料库。MAC _ morpho。标记的单词()

  [(Jersei , N ),( atinge , V ),( m\xe9dia , N ),]

  nltk。语料库。conll 2002。标记的单词()

  [(Sao , NC ),( Paulo , VMI ),((, Fpa ),]

  nltk。语料库。塞斯猫。标记的单词()

  [(El , da0ms0 ),( Tribunal_Suprem , np0000o ),]

  如果您的环境设置正确,使用适当的编辑器和字体,您应该能够以人类可读的方式显示单个字符串。例如,图5.1显示了使用印度语访问的数据。

  图5.1:来自四种印度语言的词性标注数据:孟加拉语、印地语、马拉地语和泰卢固语

  如果语料库也被分割成句子,它将有一个tagged_sents()方法,将标记的单词分割成句子,而不是作为一个大列表呈现。当我们开始开发自动标记器时,这将是有用的,因为它们是在句子列表上训练和测试的,而不是单词。

  一个简化的词性标记集简化的词性标记集合

  标记语料库使用许多不同的惯例来标记单词。为了帮助我们开始,我们将看一个简化的标签集(如表5.1所示)。

  标签

  意义

  例子

  形容词

  形容词

  新、好、高、特殊、大、本地

  副词

  副词

  真的,已经,仍然,早,现在

  全国司法委员会

  结合

  并且,或者,但是,如果,虽然,虽然

  方阵函数

  限定词

  一些,大多数,每一个,不

  激励器

  有关存在的

  那里,那里

  转发

  外来词

  dolce,ersatz,esprit,quo,maitre

  现代的

  情态动词

  将要,能够,会,可能,必须,应该

  普通

  名词

  年份、家庭、成本、时间、教育

  公证人

  专有名词

  艾莉森,非洲,四月,华盛顿

  全国矿工联合会

  数字

  二十四、第四,1991年,14:24

  专业人员

  代词

  他,他们,她,它,我,我,我们

  P

  介词

  在…上,在…处,与…一起,由…进入…之下

  到

  单词到

  到

  哦

  感叹词

  啊,砰,哈,whee,hmpf,哎呀

  V

  动词

  是,有,得到,做,制造,看见,跑

  性病

  过去式

  说,拿,说,做,问

  很好

  现在分词

  制造,去,玩,工作

  越南

  过去分词

  给予,获得,开始,歌唱

  瓦特小时(瓦特小时)

  瓦特小时确定符

  谁,哪个,什么时候,什么,哪里,如何表5.1:

  简化的词性标记集

  让我们看看这些标签中哪些是布朗语料库的新闻类别中最常见的:

  来自nltk.corpus导入棕色

  brown _ news _ tagged=brown。tagged _ words(categories=新闻,simplify_tags=True)

  tag_fd=nltk .频率分布(布朗新闻标记中(单词、标签)的标记)

  tag_fd.keys()

  [N , P , DET , NP , V , ADJ ,,, CNJ ,普罗, ADV , VD ,]

  注意

  轮到你了:使用tag_fd.plot(累积=真)绘制上述频率分布。使用上面列表的前五个标签标记的单词的百分比是多少?60%

  我们可以使用这些标签,通过一个图形化的词性一致工具nltk.app.concordance()进行强大的搜索。使用它来搜索单词和位置标签的任意组合,例如N N N N N、hit/VD、hit/VN或形容词人。

  名词名词

  名词一般指人、地方、事物或概念,例如:女人、苏格兰、书、智力。名词可以出现在限定词和形容词之后,可以是动词的主语或宾语,(名词可以出现在限定词和形容词之后,并且可以做动词的主语或宾语)如表5.2所示。

  单词

  限定词之后

  动词的主语

  妇女

  我昨天见到的那个女人.

  女人坐下

  苏格兰

  我小时候记忆中的苏格兰.

  苏格兰有五百万人口

  书

  我昨天买的那本书.

  这本书讲述了澳大利亚的殖民历史

  智力

  孩子表现出的聪明才智.

  玛丽的聪明给她的老师留下了深刻的印象表5.2:

  涉及一些名词的句法模式

  对于书这样的普通名词,简化的名词标签是n,对于苏格兰这样的专有名词,简化的名词标签是NP .

  让我们检查一些带标签的文本,看看名词前出现的词类,首先是最常用的词类。首先,我们构建一个二元模型列表,其成员本身是词标记对,如((‘The’,‘DET’,(’富尔顿, NP ))和((富尔顿、 NP )、( County 、 N ).然后我们从二元模型的标签部分构造一个频率分布.

  word _ tag _ pairs=nltk。二元模型(布朗新闻标签)

  列表(nltk .FreqDist(a[1] for (a,b)in word _ tag _ pairs if b[1]= N ))

  [DET , ADJ , N , P , NP , NUM , V , PRO , CNJ ,, VG , VN ,]

  (甲、乙)也就是(( The , DET ,(富尔顿, NP ),如果b[1]==N ,则给出前面这个词的词性a[1]

  这证实了我们的断言,名词出现在限定词和形容词之后,包括数字形容词(标记为编号).

  动词动词

  动词是描述事件和动作的词,例如秋季,可食用5.3 .在句子的上下文中,动词通常表达涉及一个或多个名词短语的所指对象的关系。

  单词

  简单的

  带修饰语和附加语(斜体)

  秋天

  罗马陷落了

  网络公司的股票像石头一样坠落

  吃

  老鼠吃奶酪

  约翰津津有味地吃着比萨饼。

  涉及某些动词的句法模式

  新闻文本中最常见的动词有哪些?让我们把所有的动词按频率排序:

  wsj=nltk。语料库。树木银行。tagged _ words(simplify _ tags=True)

  word_tag_fd=nltk .华尔街日报

  单词标签功能中(单词、标签)的[单词/标记if tag.startswith(V)]

  [是/V ,表示/VD , was/VD , are/V , be/V , has/V , has/V ,表示/V ,

   were/VD , had/VD , been/VN , s/V , do/V , say/V , make/V , did/VD ,

   rose/VD , does/V , expected/VN , buy/V , take/V , get/V , sell/V ,

   help/V , added/VD , including/VG , accounting/VG , made/VN , pay/V ,]

  注意,在频率分布中被计数的项目是词-标签对。由于单词和标签是成对的,我们可以将单词视为条件,将标签视为事件,并用条件-事件对的列表来初始化条件频率分布。这让我们看到给定一个单词的标签的频率排序列表:

  cfd1=nltk .条件要求分布(华尔街日报)

  让步,让步.按键()

  [V , N]

  cfd1[切].按键()

  [V , VD , N , VN]

  我们可以颠倒配对的顺序,这样标签就是条件,单词就是事件(词作为条件,标签作为事件).现在我们可以看到给定标签的可能单词:

  cfd2=nltk .ConditionalFreqDist((标签,单词)用于WallStreetJournal(美国)《华尔街日报》中的(单词,标签))

  越南盾.按键()

  [被,预期,制造,比较,基于,定价,使用,销售,

  命名,设计,持有,罚款,占用,支付,交易,表示,]

  为了明确VD(过去式)和越南(过去分词)之间的区别,让我们找到既可以是性病又可以是越南的单词,并查看一些周围的文本:

  [如果cfd1[w]中的"性病"和cfd1[w]中的“VN”,则为cfd1.conditions()中的w]

  [要求,加速,接受,指控,获得,添加,采纳,]

  idx1=wsj.index((踢开, VD ))

  华尔街日报

  [(While , P ,( program , N ),( trades , N ),( quickly , ADV ),

  (踢, VD)]

  idx2=wsj.index((踢开, VN ))

  华尔街日报

  [(head , N ),( of , P ),( state , N ),( has , V ),( kicked , VN)]

  在这种情况下,我们看到ofkickedis的过去分词前面有助动词有的形式。一般都是这样吗?

  注意

  轮到你了:给出cfd2[VN]指定的过去分词列表. keys(),尝试收集列表中紧接在项目前面的所有单词标签对的列表。

  形容词和副词形容词和副词

  另外两个重要的词类是形容词和副词。形容词描述名词,可以用作修饰语(如大比萨饼中的大),也可以用作谓语(如比萨饼很大)。英语形容词可以有内部结构(如下跌的股票.副词修饰动词,以指明动词所描述的事件的时间、方式、地点或方向(例如:股票迅速下跌)。副词也可以修饰形容词(如真的假的的老师真好)。

  除了介词之外,英语还有几类封闭的词类,如冠词(也称为决定词)(如the,a)、情态动词(如应该,可能)和人称代词(如她,他们).每个字典和语法对这些词的分类都不一样。

  注意

  轮到你了:如果你对这些词类不确定,可以使用nltk.app.concordance()来研究它们,或者观看一些学校摇滚!语法视频可以在油管(国外视频网站)上找到,或者查阅本章末尾的延伸阅读部分。

  未简化的标签未简化的标签

  我们来找出每个名词词性类型中出现频率最高的名词。例5.2中的程序找到了所有以神经网络开头的标签,并为每个标签提供了几个例句。你会看到神经网络有很多变种;最重要的包含$表示所有格名词,S表示复数名词(因为复数名词通常以移民局结尾),P表示专有名词。此外,大多数标签都有后缀修饰符:-NC表示引用,-HL表示标题中的单词,-TL表示标题(棕色标签的一个特性)。

  def findtags(tag_prefix,tagged_text):

  cfd=nltk .标记文本中(单词,标签)的ConditionalFreqDist((标签,单词)

  if tag.startswith(tag_prefix))

  返回字典((标签,CFD[标签])。计算流体动力学条件()中标记的keys()[:5])

  tagdict=findtags(NN ,nltk。语料库。棕色。tagged _ words(类别=新闻))

  对于排序后的标签(tagdict):

  .打印标签

  .

  NN [年,时间,州,周,人]

  NN$ [年份,世界,州,国家,公司]

  NN$-HL [高尔夫,海军]

  NN$-TL [总统的,大学的,联盟的,画廊的,军队的]

  NN-HL [削减,薪资,条件,问题,业务]

  NN-NC [eva , ova , aya]

  NN-TL [总统,众议院,州,大学,城市]

  NN-TL-HL [堡垒,城市,专员,格罗夫,房子]

  NNS [年,成员,人,销售,男人]

  NNS$ [儿童,妇女,男子,门卫,纳税人]

  NNS$-HL [经销商,偶像 ]

  NNS$-TL [妇女,国家,巨人,军官,轰炸机]

  NNS-HL [岁月,偶像,创作,感谢,中心]

  NNS-TL [国家,民族,主人,规则,共产主义者]

  NNS-TL-HL [国家]

  示例5.2 (code_findtags.py):查找最常用名词标签的程序

  当我们在本章后面构造词性标记时,我们将使用未简化的标记。

  探索标记语料库探索标注的语料库

  让我们简单地回到我们在前几章看到的对语料库的各种探索,这次是利用词性标签。

  假设我们正在学习单词通常,想看看它在文本中是如何使用的。我们可以经常要求看后面的单词

  布朗_博学_文本=布朗。单词(类别=已学)

  排序(在nltk中为(a,b)设置(b。ibi grams(brown _ learned _ text)if a== occurrent ))

  [,, .,完成,分析地,出现,恰当,关联,假设,

  变成了,变成了,被了,开始了,叫,小心翼翼,选择了,]

  但是,使用标记的单词()方法查看以下单词的词性标记可能更有指导意义:

  布朗_ lrnd _ tagged=布朗。tagged _ words(categories= learned ,simplify_tags=True)

  nltk中(a,b)的tags=[b[1]。ibi grams(brown _ lrnd _ tagged)if a[0]==常]

  fd=nltk .频率分布(标签)

  fd。制表()

  精装年册至VGWHVBZ .

  15 128 5 54 4 33 1 11 1 1

  注意,接下来出现频率最高的词类通常是动词。名词从不出现在这个位置(在这个特定的语料库中)。

  接下来,让我们看看一些更大的上下文,并找到涉及特定标签和单词序列的单词(在本例中为"动词到动词")。在代码三词短语中,我们考虑句子中的每个三词窗口,并检查它们是否符合我们的标准。如果标签匹配,我们打印相应的单词。

  来自nltk.corpus导入棕色

  定义过程(句子):

  对于nltk .三元模型(句子)中的(w1,t1),(w2,t2),(w3,t3):

  if (t1.startswith(V )和t2==到和t3.startswith(V ):

  打印w1、w2、w3

  对于brown.tagged_sents()中的已标记_已发送:

  .流程(已标记_已发送)

  .

  联合起来实现

  继续放置

  用来保护

  想等等

  允许放置

  有望成为

  .

  示例5.3 (code_three_word_phrase.py):图5.3:使用刷卡机标签搜索三个单词的短语

  最后,让我们寻找词类标签非常模糊的词。理解为什么这些词在每个上下文中都被标记,可以帮助我们澄清标记之间的区别。

  brown _ news _ tagged=brown。tagged _ words(categories=新闻,simplify_tags=True)

  数据=nltk .ConditionalFreqDist((word。下(),标记)

  .对于布朗新闻中的(单词,标签)

  对于data.conditions()中的单词:

  .if len(data[word]) 3:

  .标签=数据[字]。按键()

  .打印单词。加入(标签)

  .

  最佳ADJADV公司

  更好的ADJADV对方阵函数

  关闭ADVADJ

  切割

  甚至ADVDETADJ五世

  授予名词短语

  击中V VD VN N

  莱形容词诉NP VD

  形容词北越南左性病

  就像全国司法委员会对形容词

  ADVADJDET附近

  公开形容词诉副词

  经过北ADJDETP

  现任ADJADV

  读虚拟名词短语

  右ADJDETADV

  第二个数字ADVDET

  设置VN V VD N -

  全国司法委员会诉WHDET

  注意

  轮到你了:打开词性一致工具nltk.app.concordance()加载完整的褐色的语料库(简化标签集)。现在挑选一些上面的单词,看看这个单词的标签是如何与这个单词的上下文相关联的。例如,搜索近的查看所有混合在一起的形式,搜索近/ADJ查看它用作形容词,搜索近N查看名词后面的情况,等等。

  -我是低调的不显眼的简洁的不会被敌人发现的分割线-

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: