首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用自定义POS标签进行NLTK分块?

使用自定义POS标签进行NLTK分块?
EN

Stack Overflow用户
提问于 2014-05-20 02:24:43
回答 2查看 2K关注 0票数 1

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

代码语言:javascript
运行
复制
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进行解析,所以它应该独立于其他任何东西,但是当我尝试运行以下代码时,我得到了一个错误:

代码语言:javascript
运行
复制
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发行版进行开发。

提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2014-07-30 14:33:19

是的,可以对NLTK分块使用自定义标记。我也用过同样的方法。参考:How to parse custom tags using nltk.Regexp.parser()

ValueError和错误描述表明您的语法结构中存在错误,您需要检查这一点。您可以使用相同的答案更新答案,以获得有关更正的建议。

票数 1
EN

Stack Overflow用户

发布于 2018-05-10 05:14:02

代码语言:javascript
运行
复制
#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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23744659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档