Python NLTK语法RegExParser中的第二个名词无法识别

2024-05-14 02:47:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了下面的代码来识别由一个动词和一个或多个限定词构成的语法,然后是一个或多个名词。语法不会识别语法中的第二个名词(例如短语:“监控停车位”):

Testing sentence in grammar:  monitoring a parking space
Grammar Chunk: 
(S (MT monitoring/VBG a/DT parking/NN) (MT space/NN))
False

以下是Python 3.5.6中使用的代码:

import nltk

def extractMT(sent):
    grammar = r"""
    MT:
        {<VBG|VBZ|VB>?<DT>?<NN|NNS>}
    """
    chunker = nltk.RegexpParser(grammar)

    ne = set()
    chunk = chunker.parse(nltk.pos_tag(nltk.word_tokenize(sent)))
    print("Grammar Chunk: ")
    print(chunk)

    for tree in chunk.subtrees(filter=lambda t: t.label() == 'MT'):
        returnList = []
        for child in tree.leaves():
                returnList.append(child[0])

        ne.add(' '.join(returnList))

    return ne

testSentence1 = "monitoring a parking space"

print ("Testing sentence in grammar:  " + testSentence1)

print ("Is sentence in grammar?:  " + testSentence1 in extractMT(testSentence1))

Tags: in语法spacennsentencemonitoringneprint
1条回答
网友
1楼 · 发布于 2024-05-14 02:47:32

像在标准regex中一样,要获得许多元素,需要+(意思是one or more)或*(意思是zero or more

 {<VBG|VBZ|VB>?<DT>?<NN|NNS>+}

您还可以使用{,2}获取012元素,或{1,2}获取12元素,或{2}精确获取2元素

 {<VBG|VBZ|VB>?<DT>?<NN|NNS>{,2}}

相关问题 更多 >