`
hereson3
  • 浏览: 160675 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

使用正则表达式处理句法分析树

阅读更多

1, 正则表达式如何处理嵌套结构

a.        .net 处理嵌套结构的方法

举例说明:

问题描述:从 before (nope (yes (here) okay) after 中匹配得到最大的被 ”()” 包含的文本。即显示红色的部分。

答案: .net \((?>[^()]+|\((?<DEPTH>)|\)(?<-DEPTH>))*(?(DEPTH)(?!))\)

        分析:

        (1) \( 匹配左括号; \) 匹配右括号; [^()]+ 匹配非括号字符串

(2) (?> .) 固化分组,固化分组的作用在于:一旦括号内的子表达式匹配之后,匹配的内容就固定下来,在接下来的匹配过程中不会改变,除非整个固化分组的括号都被弃用,在外部回溯中重新应用。该处使用固化分组的作用在于提高匹配速度。

(3) DEPTH 的使用 :DEPTH 实际使用了命名捕获的 <?>…> ,它总是能够匹配成功。正则表达式引擎的回溯堆栈保存了当前匹配成功分组的相关信息,而 (?<DEPTH>) 跟在 \( 后,所以它的成功匹配便可以保存 \( 的个数。跟随在 \) 后的结构 (?<-DEPTH>) .NET 独有的结构,它会在匹配 \) 成功之后去掉最近的 ”successful DEPTH” 标记。如果不存在这样的 ”successful DEPTH” 标记,就会报告失败,整个正则表达式匹配失败: 1, 每匹配一个 \( 会把正则表达式保存的当前括号嵌套深度值加 1 2, 每匹配一个 \) 会把正则表达式保存的当前括号嵌套深度值减 1 3, (?(DEPTH)(?!)) 确保匹配最后的 \) 时,深度为 0

2, 如何使用正则表达式处理句法分析树

如何使用正则表达式识别一棵类似如下表示的句法分析树?

(TOP (S (NPB (DT The) (NN question) ) (VP (VBZ remains) (SBAR-A (IN whether) (S-A (NPB (PRP they) ) (VP (MD will) (VP-A (VB be) (ADJP (JJ able) (SG (VP (TO to) (VP-A (VB help) (PUNC. us.) ) ) ) ) ) ) ) ) ) ) )

答案: \((?>[^()]+|\([^()\s]+\s(?<DEPTH>)|\)\s(?<-DEPTH>))*(?(DEPTH)(?!))\)

分析类似。

3, 使用正则表达式处理句法分析树实例

a.        使用正则表达式获取所有的叶结点 :    \((?<POS>[^()]+)\s(?<Leaf>[^()]+)\)

b.       使用正则表达式获取所有的名词短语 NP:

\(NP\s(?>[^()]+|\([^()\s]+\s(?<DEPTH>)|\)\s(?<-DEPTH>))*(?(DEPTH)(?!))\)

c.        使用正则表达式获取满足如下性质的子树

        i.   该子句的标记为 SBAR[^()]*

                   ii.       该子句根节点的第一个儿子为一个词性为 IN 的词。

                  iii.       该子句的第二个儿子为一个子句:使用 S[^()]* 识别

                 iv.       该子句没有其他的儿子

 

 

(?<Clause>\(S[^() ]*\s(?<INWH>\(IN\s[^()]+\)\s)(?<ClauseAfterInWh>\(S[^() ]*\s(?>[^()]+|\([^()\s]+\s(?<DEPTH>)|\)\s(?<-DEPTH>))*(?(DEPTH)(?!))\)\s)\)\s(?#Clause))

分享到:
评论

相关推荐

    .net正则表达式如何处理嵌套结构

    实例讲解 .net处理嵌套结构的方法: 如何使用正则表达式处理句法分析树 使用正则表达式处理句法分析树实例

    正则表达式(regex)错误使用导致功能漏洞分析

    很多刚刚使用正则表达式都是从听说这个,然后在要使用时候去网上搜索。 很少人一开始就系统去学习正则表达式,从定义原理使用系统学习。因为,对应初学者觉得它太麻烦了,好多原字符。看到那么长一串字符,就很头痛...

    Python爬虫之正则表达式基本用法实例分析

    正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。 compile 函数根据一个模式字符串和可选的标志参数生成一个...

    JavaScript学习小结(7)之JS RegExp

     RegExp即正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE/re/reg),就是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式,搜索模式可用于文本搜索和文本替换。...

    c-sharp-language-parser:执行词法分析、句法分析和中间代码生成的 C# 解析器

    词法分析: token 读取是通过使用正则表达式来实现的。 指令“#if”是使用语法实现的(这很慢,所以我将来会改变这种方式)。 语法分析:应用程序使用 CYK 算法构建解析树。 有关更多信息,请参阅 。 项目遵循 ...

    lexerific:一个基于底层有限状态机的简单流标记器

    该库仅用于基于词典进行扫描/标记化,不支持句法分析或构建任何典型的解析器抽象语法树。 对于基于字符的词法分析,该库不支持正则表达式,但有一些有用的宏可以帮助涵盖最常见的用例。 造成这种情况的主要原因是...

    自然语言处理综论 冯志伟译著

    从层次的角度看,本书的论述是按照自然语言的不同层面逐步展开的,首先论述单词的自动形态分析,接着论述自动句法分析,然后论述各种语言单位的自动语义分析,最后论述连贯文本的自动分析、对话与会话的智能代理以及...

    自然语言处理综论

    从层次的角度看,本书的论述是按照自然语言的不同层面逐步展开的,首先论述单词的自动形态分析,接着论述自动句法分析,然后论述各种语言单位的自动语义分析,最后论述连贯文本的自动分析、对话与会话的智能代理以及...

    Speech and Language Processing,自然语言处理综论

    从层次的角度看,本书的论述是按照自然语言的不同层面逐步展开的,首先论述单词的自动形态分析,接着论述自动句法分析,然后论述各种语言单位的自动语义分析,最后论述连贯文本的自动分析、对话与会话的智能代理以及...

    自然语言处理期末复习A4纸.pdf

    正则表达式是指使用特殊的字符和符号来描述字符串的模式,例如[A-Z]匹配从A到Z的任何字符。 错误的类别包括假阳性和假阴性。假阳性是指计算机错误地匹配了不该匹配的结果,例如将“bank”识别为银行而不是河岸。假...

    基于知识图谱神经网络技术的数控领域故障诊断专家系统python源码+项目说明+数据库sql(含前端+后端).zip

    首先,我们爬取了大量数控机床维修案例,使用NLP自然语言处理技术对文本做了噪声移除和句法分析,然后使用CNN卷积神经网络识别出了故障描述中用户所做的操作和出现的故障现象,结合词性标注,正则表达式处理等技术,...

    PHP动态网页设计与制作案例教程

    本书展示一个完整网站的设计和实现过程,详细地介绍动态网页设计和制作的技术和相关理论,全书共分为8章,主要内容包括:动态网站设计概述、动态网站编程环境、网站主页设计与PHP...8.4.3 正则表达式的法则 参考文献

    基于javatcpsocket通信的拆包和装包源码-python-interview-questions.io:python-intervie

    该语言带有一个大型标准库,涵盖了诸如正则表达式等字符串处理、Unicode、计算文件之间的差异、HTTP、FTP、SMTP、XML-RPC、POP、IMAP、CGI 编程等互联网协议、单元等软件工程等领域。测试、记录、分析、解析 Python ...

    c-minus词法分析器

    (3)其他标记为 ID 和 NUM ,通过下列正则表达式定义: ID = letter letter* NUM = digit digit* letter = a|..|z|A|..|Z digit = 0|..|9 (4)空格由空白、换行符、制表符组成。 (5)注释由 /*...*/ 围起来,不能...

    代码之美(中文完整版).pdf

    第1章 正则表达式匹配器 。 1.1 编程实践 1.2 实现 1.3 讨论 1.4 其他的方法 1.5 构建 1.6 小结 第2章 Subversion中的增量编辑器:像本体一样的接口 2.1 版本控制与目录树的转换 2.2 表达目录树的差异 2.3 增量编辑...

Global site tag (gtag.js) - Google Analytics