【问题标题】:Designing a Regex to find any Noun Phrase设计一个正则表达式来查找任何名词短语
【发布时间】:2014-08-14 03:25:05
【问题描述】:

我正在尝试使用正则表达式(并且没有 NLTK)构建一个分块器(或浅解析器),但无法提出一个正则表达式来完成我想要它做的事情。这是我的直接目标:找到自然语言文本中的所有名词短语。

我的第一步是用我自制的词性标注器标记所有句子,然后将标记/标记对列表加入到单个字符串中,如下所示:

'he PRN and CC bill NP could MOD hear VB them PRN on IN the DT large JJ balcony NN near IN the DT house NN'

我的下一步是使用正则表达式在字符串中搜索名词短语的实例。现在,名词短语的通用语言公式是:可选限定词 (DT)、零个或多个形容词 (JJ)、名词 (NN)、专有名词 (NP) 或代词 (PRN)。鉴于这个通用公式,我尝试了这个正则表达式(记住标记字符串在单词和标签之间交替):

'(\w+ DT)? (\w+ JJ)* (\w+ (NN|NP|PRN))'

这是我的代码:

text = 'he PRN and CC bill NP could MOD hear VB them PRN on IN the DT large JJ balcony NN near IN the DT house NN'

regex = re.compile(r'(\w+ DT)? (\w+ JJ)* (\w+ (NN|NP|PRN))')
m = regex.findall(text)

if m:
     print m

这是我的输出:

[('the DT', 'large JJ', 'balcony NN', 'NN')]

它没有找到代词或专有名词,并且由于某种原因仅匹配 '\w+ DT \w+ NN' 模式中的 'NN'。我假设我的正则表达式会匹配这些模式,因为我将确定模式设置为可选 (?) 并将形容词模式设置为零次或多次 (*)。

克里斯

【问题讨论】:

    标签: python regex chunking


    【解决方案1】:

    使用这个:

    (?:(?:\w+ DT )?(?:\w+ JJ )*)?\w+ (?:N[NP]|PRN)
    

    demo

    • (?:(?:\w+ DT )?(?:\w+ JJ )*)? 可选匹配 DT,后跟零个或多个形容词
    • '\w+ (?:N[NP]|PRN)' 匹配 NNNPPRN

    【讨论】:

    • 好的,我更改了正则表达式和演示。让我知道这是否是你想要的。 :)
    • 你好,跟进这个,有一个答案为你解决了吗,还是问题仍然存在?
    • 你是对的。我移动了一个空格字符的位置,我认为可以解决它。试试新的演示。 :)
    • 谢谢...下次见。 :)
    • 快速修补后查看解决方案,希望它不会引入新的错误。 :)
    【解决方案2】:

    你的正则表达式是,

    (\w+ DT)? (\w+ JJ)*|(\w+ (?:NN|NP|PRN))
    

    DEMO

    【讨论】:

    • 感谢您的帮助。您的演示显示它工作得很好,但是当我将它插入我的程序时,我的输出是这样的: [('', '', 'he PRN'), ('', '', ''), (' ', '', ''), ('', '', ''), ('', '', 'bill NP'), ('', '', ''), ('', '' , ''), ('', '', ''), ('', '', ''), ('', '', ''), ('', '', '他们的PRN') , ('', '', ''), ('', '', ''), ('', '', ''), ('DT', '大JJ', ''), ( '', '', ''), ('', '', '阳台NN'), ('', '', ''), ('', '', ''), ('', ' ', ''), ('the DT', '', ''), ('', '', 'house NN')] 这不是我想要的。不知道出了什么问题(也许 Python 处理正则表达式的方式有所不同)。
    【解决方案3】:

    一般语言公式

    但是捕捉名词短语是有问题的。

    名词短语可以包含连词,副词,并且可以在包含动词的从句中后修饰,以及如何处理动名词?

    真的好男人和女人 卖了他们出售的书 = 全部 1 个名词短语

    慈善机构本地、国家和国际 = 形容词列表

    不过,查找不是特定事物的组(例如动词或介词 FIRST)可能更容易。 (请记住,短语也可以在其他短语中)

    ^V^I

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 2016-03-13
      • 2013-11-09
      • 1970-01-01
      相关资源
      最近更新 更多