[英]How to extract chunks with multiple patterns from pos tagged sentences?
给定一个在 nltk 中使用 pos_tag function 进行 pos 标记的输入句子:
[('Veer', 'NNP'), ('Singh', 'NNP'), ('Rathore', 'NNP'), ('auctioned', 'VBD'), ('his', 'PRP$' ), ('gigantic', 'JJ'), ('house', 'NN'), ('in', 'IN'), ('New', 'NNP'), ('York', 'NNP' ), ('.', '.')]
我需要提取遵循某种模式的短语。 例如,“NNP NNP”或“JJ NN”。 可以有“n”不。 我们可能想要提取的模式。 例如,这里我们需要 2 个模式,即“NNP NNP”和“JJ NN”。
对于上面输入的句子,我想要的 output 是以下短语的列表:
output:
['Veer Singh Rathore','巨大的房子','纽约']
我尝试过这样的事情:
> grammar = (''' Chunk:{<JJ><NN>|<NNP>+<NNP>} ''')
>
> def pos_and_chunking(question):
> words = word_tokenize(question)
> pos_words = pos_tag(words)
> chunkParser = RegexpParser(grammar)
> chunked_phrases = chunkParser.parse(pos_words)
> chunked_phrases.draw()
> for subtree in chunked_phrases.subtrees():
> print(subtree)
但是我得到的 output 是一棵树的形式。
Output:
(S (Chunk Veer/NNP Singh/NNP Rathore/NNP) 拍卖/VBD his/PRP$ (Chunk gigantic/JJ house/NN) in/IN (Chunk New/NNP York/NNP)./.) (Chunk Veer/ NNP Singh/NNP Rathore/NNP) (Chunk gigantic/JJ house/NN) (Chunk New/NNP York/NNP)
如何解决?
我参考了这个链接进行分块: https://www.codespeedy.com/chunking-rules-in-nlp/
如果您期望一个带有语法标签的简单标记列表,那么您可以简单地展平树:忽略结构,只过滤掉带有标记的标记,然后使用结果列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.