如何使用nltk.Regexp.parser()解析自定义标签

发布于 2021-01-29 16:03:01

我的问题类似于这个未解决的问题:使用自定义POS标签进行NLTK分块吗?,但我得到的错误却有所不同。我正在尝试分析添加了我自己的域特定标签的句子。

例如:

(u'greatest', 'P'), (u'internet', 'NN'), (u'ever', 'A'), 
(u',', ','), (u'and', 'CC'), (u'its', 'PRP$'), (u'being', 'VBG'), 
(u'slow', 'N'), (u'as', 'IN'), (u'hell', 'NN')`

(u'slow', 'N')自定义标签在哪里'N'

我正在尝试使用以下方法对此进行解析:

grammar=r"""
Chunk:`{<A>?*<P>+}`
"""
parser=nltk.RegexpParser(grammar)

但是我收到以下错误:

ValueError: Illegal chunk pattern: `{<A>?*<P>+}`

是否nltk.RegexpParser处理自定义标签?是否还有其他基于nltk或python的解析器可以做到这一点?

关注者
0
被浏览
194
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    nltk.RegexpParser 可以 处理自定义标签。

    您可以通过以下方式修改代码以使其正常工作:

    # Import the RegexpParser
    from nltk.chunk import RegexpParser
    
    # Define your custom tagged data. 
    tags = [(u'greatest', 'P'), (u'internet', 'NN'), (u'ever', 'A'), 
    (u',', ','), (u'and', 'CC'), (u'its', 'PRP$'), (u'being', 'VBG'), 
    (u'slow', 'N'), (u'as', 'IN'), (u'hell', 'NN')]
    
    # Define your custom grammar (modified to be a valid regex).
    grammar = """ CHUNK: {<A>*<P>+} """
    
    # Create an instance of your custom parser.
    custom_tag_parser = RegexpParser(grammar)
    
    # Parse!
    custom_tag_parser.parse(tags)
    

    这是您将得到的测试数据结果:

    Tree('S', [Tree('CHUNK', [(u'greatest', 'P')]), (u'internet', 'NN'), (u'ever', 'A'), (u',', ','), (u'and', 'CC'), (u'its', 'PRP$'), (u'being', 'VBG'), (u'slow', 'N'), (u'as', 'IN'), (u'hell', 'NN')])
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看