【语言处理与Python】8.2文法有什么用?8.3上下文无关文法8.4上下文无关文法分析.pdfVIP

【语言处理与Python】8.2文法有什么用?8.3上下文无关文法8.4上下文无关文法分析.pdf

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

【【语语⾔⾔处处理理与与Python】】8.2⽂⽂法法有有什什么么⽤⽤??8.3上上下下⽂⽂⽆⽆关关⽂⽂法法8.4

上上下下⽂⽂⽆⽆关关⽂⽂法法分分析析

8.2⽂法有什么⽤?

超越n-grams

⽤bigrams中的频率信息⽣成句,短的时候可以接收,但是长的时候就显得⽆法接受。

我们系统地可以⽤较短的序列替代较长的序列,并使其依然符合语法规则。

例如下⾯这句话:

我们可以为这幅图上添上⽂法类别标签。

NP为名词短语;VP为动词短语;PP为介词短语;

⽤树来表⽰:

句可以有任意的长度。短语结构树可以有任意深度。

在下⼀节中,将看到⼀个指定的⽂法如何将句细分成它的直接成分,以及如何将这些进⼀步细分,直到到达单独词汇层⾯。

8.3上下⽂⽆关⽂法

context-freegrammar,CFG上下⽂⽆关⽂法(更多关于上下⽂⽆关⽂法请⾃⾏了解)

grammar1=ntk.parse_cfg(

S-NPVP

VP-VNP|VNPPP

PP-PNP

V-saw|ate|waked

NP-John|Mary|Bob|DetN|DetNPP

Det-a|an|the|my

N-man|dog|cat|teescope|park

P-in|on|by|with

)

sent=MarysawBob.spit()

rd_parser=ntk.RecursiveDescentParser(grammar1)

fortreeinrd_parser.nbest_parse(sent):

...printtree

(S(NPMary)(VP(Vsaw)(NPBob)))

写⾃⼰的⽂法

我们可以写⾃⼰的⽂法,保存在cfg的⽂件中。

grammar1=ntk.data.oad(fie:mygrammar.cfg)

sent=MarysawBob.spit()

rd_parser=ntk.RecursiveDescentParser(grammar1)

fortreeinrd_parser.nbest_parse(sent):

printtree

如果没有任何输出,可能是sent也就是句不符合⽂法,可以打开追踪,进⾏调试和检查。

rd_parser=ntk.RecursiveDescentParser(grammar1,trace=2)

句法结构中的递归

句法递归请参考⽂法相关资料。

递归深度是没有限制的,我们可以尝试分析更深层次的嵌套结构的句。

RecursiveDescentParser是⽆法处理形如X-XY的左递归。

8.4上下⽂⽆关⽂法分析

在这⾥介绍两种简单的分析⽅法,⼀种⾃上⽽下的⽅法成为递归下降分析,⼀种⾃下⽽上的⽅法成为移近-归约分析。同样,也会看到更复杂

的算法,⼀种带⾃下⽽上过滤的⾃上⽽下的⽅法称为左⾓落分析。

⼀种动态规划技术成为图表分析。

递归下降分析

我们可以使⽤图形化师范ntk.app.rdparser()中看到递归下降的过程。

从S节点开始匹配。

NLTK提供了⼀个递归下降分析器:

rd_parser=ntk.RecursiveDescentParser(grammar1)

sent=Marysawadog.spit()

fortinrd_parser.nbest_parse(sent):

...printt

(S(NPMary)(VP(Vsaw)(NP(Deta)(Ndog))))

递归下降是有缺点的:

1、左递归产⽣式会进⼊死循环。

2、分析器浪费了很多时间处理不符合输⼊句的词和结构

3、回溯过程中可能丢弃分析过的成分,他们需要在之后重新建⽴

移进-归约分析(简单的⾃下⽽上分析)

移位:分析器反复将下⼀个输⼊词推到堆栈中,这是移位操作。

归约:如果堆栈上的前N项匹配⼀些产⽣式右侧的N个项⽬,那么就把他们弹出栈,并把产⽣式左边的项⽬压⼊栈。这种替换的操作就是归约

操作。

同样,可以使⽤图形化⽰范ntk.app.srparser()

相关代码:

sr_parse=ntk.ShiftReduceParser(g

文档评论(0)

movie + 关注
实名认证
文档贡献者

喜欢分享的作者

1亿VIP精品文档

相关文档