9.2处理特征结构

这一节内容为如何构建特征结构以及在NLTK中操作。

NLTK提供了特征结构使用的构造函数FeatStruct()声明。

>>>fs1 = nltk.FeatStruct(TENSE='past',NUM='sg')
>>>print fs1
[ NUM = 'sg' ]
[ TENSE= 'past' ]

将特征结构作为图来查看往往是有用的(有向无环图)

也会出现结构共享,或者重入。如图:

当两条路径具有相同的值时,被称为等价。

在代码中表示结构共享,如下所示:

>>>print nltk.FeatStruct("""[NAME='Lee',ADDRESS=(1)[NUMBER=74,STREET='ruePascal'],
... SPOUSE=[NAME='Kim', ADDRESS->(1)]]""")
[ ADDRESS= (1) [ NUMBER= 74 ] ]
[ [ STREET = 'rue Pascal'] ]
[                                              ]
[ NAME = 'Lee' ]
[                                                ]
[ SPOUSE =[ ADDRESS-> (1) ] ]
[ [ NAME = 'Kim' ] ]

包含和统一

包含:一个更一般的特征结构包含一个较少一般的。

统一:合并两个特征结构的信息被成为统一。

>>>fs1 = nltk.FeatStruct(NUMBER=74,STREET='ruePascal')
>>>fs2 = nltk.FeatStruct(CITY='Paris')
>>>print fs1.unify(fs2)
[ CITY = 'Paris' ]
[ NUMBER=74 ]
[ STREET= 'rue Pascal']

结构共享也可以使用变量表示,如?x

>>>fs1 = nltk.FeatStruct("[ADDRESS1=[NUMBER=74, STREET='ruePascal']]")
>>>fs2 = nltk.FeatStruct("[ADDRESS1=?x,ADDRESS2=?x]")
>>>print fs2
[ ADDRESS1= ?x ]
[ ADDRESS2= ?x ]
>>>print fs2.unify(fs1)
[ ADDRESS1= (1) [ NUMBER= 74 ] ]
[ [ STREET= 'rue Pascal'] ]
[ ]
[ ADDRESS2-> (1)

9.3扩展基于特征的文法

在本节,将会探索各种语言问题,并展示将特征纳入文法的好处。

子类别

VP[TENSE=?t,NUM=?n]-> V[SUBCAT=intrans,TENSE=?t,NUM=?n]
VP[TENSE=?t,NUM=?n]-> V[SUBCAT=trans,TENSE=?t,NUM=?n]NP
VP[TENSE=?t,NUM=?n]-> V[SUBCAT=clause,TENSE=?t,NUM=?n]SBar
V[SUBCAT=intrans,TENSE=pres,NUM=sg]-> 'disappears' | 'walks'
V[SUBCAT=trans,TENSE=pres,NUM=sg]-> 'sees' | 'likes'
V[SUBCAT=clause,TENSE=pres,NUM=sg]-> 'says' | 'claims'
V[SUBCAT=intrans,TENSE=pres,NUM=pl]-> 'disappear' | 'walk'
V[SUBCAT=trans,TENSE=pres,NUM=pl]-> 'see' | 'like'
V[SUBCAT=clause,TENSE=pres,NUM=pl]-> 'say' | 'claim'
V[SUBCAT=intrans,TENSE=past]-> 'disappeared' | 'walked'
V[SUBCAT=trans,TENSE=past]-> 'saw' | 'liked'
V[SUBCAT=clause,TENSE=past]-> 'said' | 'claimed'

SBar代表从句标签。

SBar-> CompS
Comp-> 'that'

You claim that youlike children.这句话的产生的结构如下:

例如这句话:put the book on the table

可以表示为:

V[SUBCAT=<NP,NP,PP>]

其中,NP代表主语,后面跟着PP的NP,补语子类别。

所以,Kimput the bookonthe table,这句话可以被解析为:

核心词回顾

X-bar句法通过抽象出短语级别的概念。通常认为有三个级别。

例如,如图所示:

结构36a的核心词是N,N",N'被称为N的投影。N"是最大的投影,N有时也称作零投影。

一个词汇核心X的直接补语子类别总是位于核心词的兄弟的位置,而修饰成分位于中间类别X'的兄弟的位置。

S -> N[BAR=2]V[BAR=2]
N[BAR=2]-> DetN[BAR=1]
N[BAR=1]-> N[BAR=1]P[BAR=2]
N[BAR=1]-> N[BAR=0]P[BAR=2]

助动词与倒装

(39)a. Doyoulike children?
b.CanJodywalk?
(40)a. Rarelydoyousee Kim.
b.NeverhaveI seen this dog.

但是不是什么动词都能放在前面的。可以放在从句开头的术语叫做助动词。例如:do can have,也包括be,will,shall

我们可以使用下面这个表达式:

S[+INV]-> V[+AUX] NP VP

标记[+inv]说明,包含一个助动词。

AUX区分是否是助动词。

SUBCAT代表子类别。

无限制依赖成分

填充词和缺口之间的距离没有上界。这一事实可以很容易地使用包含句子补语的成分来说明。

a. Who do you like __?
b.Who do you claim that you like __?
c.Who do you claim that Jody says that you like __?

广义短语文法中处理形式化文法的无限依赖:

一个斜线类别的形式是Y/XP;我们解释为:类别Y的短语缺少一个类别XP的子成分。例如:S/NP是缺少一个NP的S。

>>>nltk.data.show_cfg('grammars/book_grammars/feat1.fcfg')
%start S
####################
#GrammarProductions
####################
S[-INV] -> NPVP
S[-INV]/?x -> NPVP/?x
S[-INV] -> NPS/NP
S[-INV] -> Adv[+NEG]S[+INV]
S[+INV]-> V[+AUX]NPVP
S[+INV]/?x-> V[+AUX]NPVP/?x
SBar-> CompS[-INV]
SBar/?x-> CompS[-INV]/?x
VP-> V[SUBCAT=intrans,-AUX]
VP-> V[SUBCAT=trans,-AUX] NP
VP/?x-> V[SUBCAT=trans,-AUX] NP/?x
VP-> V[SUBCAT=clause,-AUX] SBar
VP/?x-> V[SUBCAT=clause,-AUX] SBar/?x
VP-> V[+AUX]VP
VP/?x-> V[+AUX]VP/?x
####################
#LexicalProductions
####################
V[SUBCAT=intrans,-AUX] -> 'walk' | 'sing'
V[SUBCAT=trans,-AUX] -> 'see' | 'like'
V[SUBCAT=clause,-AUX] -> 'say' | 'claim'
V[+AUX]-> 'do' | 'can'
NP[-WH]-> 'you' | 'cats'
NP[+WH]-> 'who'
Adv[+NEG]-> 'rarely' | 'never'
NP/NP->
Comp-> 'that'

使用文法来解析句子:

>>>tokens = 'who doyouclaim that youlike'.split()
>>>from nltk import load_parser
>>>cp = load_parser('grammars/book_grammars/feat1.fcfg')
>>>for tree in cp.nbest_parse(tokens):
... print tree
(S[-INV]
(NP[+WH] who)
(S[+INV]/NP[]
(V[+AUX] do)
(NP[-WH] you)
(VP[]/NP[]
(V[-AUX, SUBCAT='clause']claim)
(SBar[]/NP[]
(Comp[] that)
(S[-INV]/NP[]
(NP[-WH] you)
(VP[]/NP[] (V[-AUX, SUBCAT='trans']like) (NP[]/NP[] )))))))

转载于:https://www.cnblogs.com/createMoMo/archive/2013/06/03/3116121.html

【语言处理与Python】9.2处理特征结构\9.3扩展基于特征的文法相关推荐

  1. python语言特点粘性扩展_【语言处理与Python】9.2处理特征结构\9.3扩展基于特征的文法...

    9.2处理特征结构 这一节内容为如何构建特征结构以及在NLTK中操作. NLTK提供了特征结构使用的构造函数FeatStruct()声明. >>>fs1 = nltk.FeatStr ...

  2. 《用Python进行自然语言处理》第 9 章 建立基于特征的文法

    1. 我们怎样用特征扩展上下文无关文法框架,以获得更细粒度的对文法类别和产生式的控制? 2. 特征结构的主要形式化属性是什么,我们如何使用它们来计算? 3. 我们现在用基于特征的文法能捕捉到什么语言模 ...

  3. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第09章 建立基于特征的文法

    第09章 建立基于特征的文法 9.1 文法特征 句法协议 使用属性和约束 术语 9.2 处理特征结构 包含和统一 9.3 扩展基于特征的文法 子类别 核心词回顾 助动词与倒装 无限制依赖成分 9.4 ...

  4. python调用rust_转 从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例

    导读:Python 被很多互联网系统广泛使用,但在另外一方面,它也存在一些性能问题,不过 Sentry 工程师分享的在关键模块上用另外一门语言 Rust 来代替 Python 的情况还是比较罕见,也在 ...

  5. 转 从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例

    注: 转自 微信公众号"高可用架构":从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例 导读:Python 被很多互联网系统广泛使用,但在另外一方面,它也存在一 ...

  6. 程序语言python的优化版_从20秒到0.5秒:一个使用Rust语言来优化Python性能的案例...

    Sentry 是一个帮助在线业务进行监控及错误分析的云服务,它每月处理超过十亿次错误.我们已经能够扩展我们的大多数系统,但在过去几个月,Python 写的 source map 处理程序已经成为我们性 ...

  7. 基于特征点匹配的自适应目标跟踪算法

    基于特征点匹配的自适应目标跟踪算法 2016-01-29 13:11 摘 要:由于实际场景复杂多变,目标在运动过程中往往会出现形变.遮挡等问题,增加了跟踪的难度.为了解决上述问题,提出一种基于特征点匹 ...

  8. 【Python 自然语言处理 第二版】读书笔记1:语言处理与Python

    文章目录 前言 语言处理与Python 一.语言计算:文本和单词 1.NLTK入门 (1)安装(nltk.nltk.book) (2)搜索文本 (3)词汇计数 2.列表与字符串 (1)列表操作 (2) ...

  9. python语言发明者 google_谷歌的语言何以战胜Python?50%的人都应该立即学习Golang...

    全文共2623字,预计学习时长9分钟 图源:dailybtc 很多软件工程师视Python为最喜爱的语言之一,工作生活都和它死死绑定在一起.但Google, Uber, Dropbox, Soundc ...

  10. python是面向对象还是面向过程的语言_关于python是面向对象还是面向过程的分析...

    关于python是面向对象还是面向过程的分析 发布时间:2020-04-07 16:10:55 来源:亿速云 阅读:24 作者:小新 今天小编给大家分享的是关于python是面向对象还是面向过程的分析 ...

最新文章

  1. python访问数据库如何解决高并发_怎样解决数据库高并发的问题
  2. 树状数组的建树 单点修改 单点查询 区间修改 区间查询
  3. Java通过反射访问构造方法
  4. 关于Spring的几个问题
  5. Keras-5 基于 ImageDataGenerator 的 Data Augmentation实现
  6. dbeaver连接Oracle数据库
  7. Jsoup爬虫之Java爬虫工具类
  8. 柴静:我只是讨厌屈服
  9. Java 求解加油站
  10. arg min什么意思
  11. CentOS 6.8 Local time zone must be set--see zic manual page
  12. 计算机程序运行消耗的内存,电脑内存多大合适?运行内存占用率高的秘密
  13. 如何打包c#编写的程序
  14. windows输入法输入英文字母中间有空格
  15. 电影类网站如何选择服务器
  16. 7-20 奥运排行榜
  17. 交互式裁剪系统--2006-Gaze-Based Interaction for Semi-Automatic Photo Cropping
  18. 白话kali linux上可以安装什么小游戏(好奇版)
  19. 达芬奇调色 Blackmagic Design DaVinci Resolve Studio 17 中文版,整合剪辑、视觉特效、动态图形、调色和音频后期制作
  20. Java中函数及递归的使用(附思维导图)——java面试知识点

热门文章

  1. IPSEC ×××实验(一)
  2. Android 分享两个你学习android 平台开发必须碰到的几个知识点的组件【天气预报、日期】View 组件...
  3. ]MySQL操作命令语句实例
  4. 说你呢,装着JDK8,却孜孜不倦的写着 JDK6 的代码,写了3年了,JDK8的特性都没用过......
  5. 听我讲完 redo log、binlog 原理,面试官老脸一红!
  6. 为什么谷歌要执行严格的代码编写规范?
  7. 去阿里面试被问:如果是MySQL引起的CPU消耗过大,你会如何优化?
  8. 来看看国内大公司官网隐藏的彩蛋
  9. 如何快速搭建一个微服务架构?
  10. 部署速度翻6倍,知乎从0到1实现部署系统演进及优化