使用NLTK提取文本动词和名词时得到异常返回结果如何解决
问题原因分析
- 语言不匹配:NLTK 自带的
averaged_perceptron_tagger词性标注器是基于英文语料训练的,你输入的文本是葡萄牙语,标注结果完全不符合预期,自然筛选不到正确的名词、动词。 - filter 迭代器未转换:Python 3 中
filter()函数返回的是迭代器对象,直接打印只会输出内存地址,不会展示具体的筛选结果,需要用list()转换后才能看到内容。
修正方案
1. 验证现有代码逻辑
将最后一行代码修改为如下形式,就能看到你当前筛选逻辑下的输出结果,不过因为标注器不支持葡萄牙语,结果依旧不符合预期:
NV = list(filter(lambda x:x[1]=='NN' or x[1] == 'VB', pos_tagged)) print(NV)
2. 正确处理葡萄牙语文本的词性标注
如果需要正确提取葡萄牙语的名词、动词,建议改用支持多语言的词性标注工具,比如 spaCy 安装葡萄牙语模型后使用,示例代码如下:
import spacy # 前置安装命令:pip install spacy && python -m spacy download pt_core_news_sm nlp = spacy.load("pt_core_news_sm") text = """Executam serviços de apoio nas áreas de recursos humanos, administração, finançase logística; atendem fornecedores e clientes, fornecendo e recebendo informações sobre produtos e serviços; tratam de documentos variados, cumprindo todo o procedimento necessário referente aos mesmos. atuam na concessão de microcrédito a microempresários, atendendo clientes em campo e nas agências, prospectando clientes nas comunidades.""" doc = nlp(text) # 筛选名词(NOUN)、动词(VERB) NV = [(token.text, token.pos_) for token in doc if token.pos_ in ("NOUN", "VERB")] print(NV)
运行后即可得到符合预期的葡萄牙语名词、动词提取结果。
内容的提问来源于stack exchange,提问作者waka
相关产品推荐
相关产品推荐

