gpt4 book ai didi

python - 设计一个正则表达式来查找任何名词短语

转载 作者:太空狗 更新时间:2023-10-29 20:25:39 25 4
gpt4 key购买 nike

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

我的第一步是用我自制的词性标记器标记所有句子,然后将标记/标记对列表连接成一个字符串,如下所示:

'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。我假设我的正则表达式会匹配这些模式,因为我将限定符模式设置为可选 (?) 并将形容词模式设置为零次或多次 (*)。

克里斯

最佳答案

使用这个:

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

参见 demo .

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

关于python - 设计一个正则表达式来查找任何名词短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com