使用自定义POS标记进行NLTK分块



在NLTK中创建分块语法时,是否可以使用非标准的词性标记?例如,我有下面的句子要解析:

complication/patf associated/qlco with/prep breast/noun surgery/diap
independent/adj of/prep the/det use/inpr of/prep surgical/diap device/medd ./pd

从文本中找到我需要的短语是由专门的标签,如"medd"或"diap"极大地帮助。我认为,因为您可以使用RegEx进行解析,所以它将独立于其他任何内容,但是当我尝试运行以下代码时,我得到了一个错误:

grammar = r'TEST: {<diap>}'
cp = nltk.RegexpParser(grammar)
cp.parse(sentence)
ValueError: Transformation generated invalid chunkstring:
<patf><qlco><prep><noun>{<diap>}<adj><prep><det><inpr><prep>{<diap>}<medd><pd>

我认为这与标签本身有关,因为NLTK不能从它们生成树,但是有可能跳过这一部分,只是得到返回的分块项吗?也许NLTK不是最好的工具,如果是这样,谁能推荐另一个模块来分块文本?

我正在使用python 2.7.6开发Anaconda发行版。

提前感谢!

是的,可以使用自定义标记进行NLTK分块。我也用过。参考:如何使用nltk.Regexp.parser()解析自定义标记

ValueError和错误描述表明在语法的形成中存在错误,您需要检查该错误。

#POS Tagging
words=word_tokenize(example_sent)
pos=nltk.pos_tag(words)
print(pos)
#Chunking
chunk=r'Chunk: {<JJ.?>+<NN.?>+}'
par=nltk.RegexpParser(chunk)
par2=par.parse(pos)
print('Chunking - ',par2)
print('------------------------------ Parsing the filtered chunks')
# printing only the required chunks
for i  in par2.subtrees():
    if i.label()=='Chunk':
        print(i)
print('------------------------------NER')        
# NER
ner=nltk.ne_chunk(pos)
print(ner)

最新更新