我正在尝试使用NLTK分块从下面的文本中收集各种关键信息。
我需要新旧表单编号,生效日期,状态列表和单独列表中的产品列表。
我使用了以下代码:
script = 'please replace the forms CA1235 and CB3456 effective from 12/26/2018 with CA5467 for the state of Alabama, California and North Carolina for CAB and WCP products.'
# POS Tagging method
scrtagged = pos_tag(word_tokenize(script, language='english'))
print('Parts of speech tagging:',scrtagged)
screntities = nltk.chunk.ne_chunk(scrtagged)
print('Entities extracted:', screntities)
pattern = """
VBD:{<VBD>}
STATE:{<GPE>}
PRODUCT: r'\D{3}'
FORM:{<IN>?<JJ>?<ORGANIZATION>+|<JJ>?<NN>+<ORGANIZATION>}
EFFDATE1: r'\d+\/*\-*\d+\/*\-*\d{2,4}'
EFFDATE:{<IN><CD>|<IN><JJ>}
"""
NPChunker = nltk.RegexpParser(pattern)
result = NPChunker.parse(list(screntities))
result.pprint()
我得到的输出如下:
(S
please/VB
replace/VB
the/DT
forms/NNS
(FORM (ORGANIZATION CA1235/NNP))
and/CC
(FORM (ORGANIZATION CB3456/NNP))
effective/JJ
(EFFDATE from/IN 12/26/2018/CD)
(FORM with/IN (ORGANIZATION CA5467/NNP))
for/IN
the/DT
state/NN
of/IN
(STATE (GPE Alabama/NNP))
,/,
(STATE (GPE California/NNP))
and/CC
(FORM (ORGANIZATION Illinois/NNP))
(FORM for/IN (ORGANIZATION CAB/NNP))
and/CC
(FORM (ORGANIZATION WCP/NNP))
products/NNS
./.)
正如您所看到的,存在多个问题。伊利诺斯州并未被nltk chunker视为GPE。 无法识别EFFDATE 1模式。 PRODUCT模式不起作用。
我需要能够清楚地识别新表单和旧表单列表。不知道该怎么做。
你可能从上面知道我是初学者并且手头有一项复杂的任务。我的目标是使用自由格式英语请求电子邮件中的值触发第三方商业软件中的工作流程。 请帮我确定问题并纠正nltk chunker的用法。