9.2处理特征结构

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

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

>>>fs1 = nltk.FeatStruct(TENSE='past',NUM='sg')>>>printfs1

[ 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')>>>printfs1.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]")>>>printfs2

[ ADDRESS1=?x ]

[ ADDRESS2=?x ]>>>printfs2.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代表主语,后面跟着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 importload_parser>>>cp = load_parser('grammars/book_grammars/feat1.fcfg')>>>for tree incp.nbest_parse(tokens):

...printtree

(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[] )))))))

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

  1. python语言程序设计难不难_零基础学Python编程开发难度大吗?从哪学起?

    转行零基础学Python编程开发难度大吗?从哪学起? 近期很多小伙伴问我,如果自己转行学习Python,完全0基础能否学会呢?Python的难度到底有多大? 今天,小编就来为大家详细解读一下这个问题. ...

  2. python做脚本语言要了解什么_你真的了解Python吗?本文可以让你对Python了解更深入...

    人们为什么使用Python? 之所以选择Python的主要因素有以下几个方面:软件质量:在很大程度上,Python更注重可读性.一致性和软件质量,从而与脚本语言世界中的其他工具区别开发.此外,Pyth ...

  3. python制作一个教学网站_小白如何入门Python? 制作一个网站为例

    首先最重要的问题是为什么要学习python?这个问题这个将指导你如何学习Python和学习的方式. 以你最终想制作一个网站为例.从一个通用的学习资源列表开始不仅会消磨你的激情,而且你获得的知识很难应用 ...

  4. python通讯录运用的知识点_案例驱动式Python学习--通讯录存取

    驱动案例 通讯录:要求打印出企业全部十名员工通讯录.(要求有文件相关操作) 内置函数 自定义函数 函数指被封装起来的.实现某种功能的一段代码.Python安装包.标准库中自带的函数统称为内置函数,用户 ...

  5. python 算法教程 pdf 英文_上手实践《Python机器学习第2版》PDF中文+PDF英文+代码+Sebastian...

    学习机器学习,推荐学习<Python机器学习(第二版)>. <Python机器学习(第2版)>,图文并茂,代码详实,原理清晰,覆盖面适度,侧重算法实现和应用,作为入门级学习还是 ...

  6. python作排产计划_企业排程python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! slicing是一种在有序的对象类型中(数组.元祖.字符串)节选某一段的语法30 ...

  7. python 鱼c工作室作业_#鱼C工作室Python作业#图解python百度云

    最好的python视频教程谁有 我这里有python全套高清教学视频,非常适合新手小白,真实分享,望采纳点赞. python 网盘 python视频教程从入门到精通 有提取码:提取码:8ste 求一个 ...

  8. python特性高移植性_用户选择使用Python的原因有哪些

    如今有众多可选的编程语言,这往往是入门者首先要面对的问题.开发工具的选择有时取决于特定的约束条件或者个人喜好. 过去的16年中对近260个团体组织和4000名学生的Python培训过程,让我见证了人们 ...

  9. 学python去哪做项目_有哪些适合 Python 刚入门者去做的项目?

    学软件开发的都知道实战项目对于学好一门语言是很重要的.在这里可以向大家推荐几个Python实战项目 项目1.Python 图片转字符画 本课程用 50 行 Python 代码完成图片转字符画小工具.通 ...

最新文章

  1. 输出字符数字空格个数
  2. TP-Link無線路由器(分享器)頻寬控管
  3. mysql 数据迁移java_使用jdk进行数据迁移(sqlite迁移mysql)
  4. 字符串匹配,KMP算法
  5. CSS3实现多样的边框效果
  6. qt自定义含有拖动功能的窗口在点击窗口的下拉列表时窗口移动
  7. 软件的可扩展性与框架的可交互性
  8. Python图形用户界面、图形绘制
  9. oracle12密码大小写,oracle 11g 设置用户密码大小写敏感测试
  10. TransactionScrope 2
  11. Linux 可执行文件结构与进程结构
  12. 【裴礼文数学分析】例1.2.1
  13. 010Editor查看PE文件
  14. MySQL的索引失效问题
  15. 【创业感悟】企业生存法则
  16. 宋词10家--一人一首成名曲
  17. crosstab交叉表_用Python统计推断——交叉表篇(上:crosstab与热图)
  18. 经典算法题型(二):二维数组(平面地图)的递归操作
  19. JWT的数据格式详解
  20. google订阅消息推送

热门文章

  1. (原)android的JNI中使用C++的类
  2. access注入大全
  3. java启动线程时 extends与implements的一个差异
  4. logrotate 命令切换linux系统日志
  5. oracle基础知识文档,Oracle 基础知识分享PPT
  6. sql取最大值的那一行_SQL高级功能
  7. SQL基础——DDL、DML、DQL、DCL速览
  8. RabbitMQ修改默认端口:4369、5672、15672、25672
  9. 剑指offer面试题[32]:从1到n整数中1出现的次数
  10. 2022“点点点”测试员如何上岸测试开发岗?附完整学习路线!