使用NLTK实现指定词性(如名词、动词)标注的操作方法
NLTK仅标注特定词性的实现方法
NLTK原生没有直接针对指定词性做标注的接口,常规实现逻辑是先对输入句子做完整的全词性标注,再过滤出你需要的词性结果即可,以下是可直接修改运行的代码:
完整可运行代码
import nltk # 首次运行需执行下方2行下载依赖数据包,后续运行可注释 # nltk.download('punkt') # nltk.download('averaged_perceptron_tagger') # 自定义需要保留的词性标签集合,可按需修改 TARGET_POS = { # 名词类标签:普通单数名词、普通复数名词、专有单数名词、专有复数名词 'NN', 'NNS', 'NNP', 'NNPS', # 动词类标签:原形动词、过去式动词、现在分词、过去分词、非第三人称单数动词、第三人称单数动词 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ' } def tag_specified_pos(input_sentence, target_tags=TARGET_POS): # 句子分词 word_tokens = nltk.word_tokenize(input_sentence) # 全词性标注 full_tag_result = nltk.pos_tag(word_tokens) # 过滤仅保留目标词性的结果 return [item for item in full_tag_result if item[1] in target_tags] # 测试示例 if __name__ == '__main__': test_sentence = "The little cat is chasing a butterfly on the green lawn." filtered_tags = tag_specified_pos(test_sentence) print(filtered_tags)
代码输出示例
运行上述测试代码会输出:[('cat', 'NN'), ('is', 'VBZ'), ('chasing', 'VBG'), ('butterfly', 'NN'), ('lawn', 'NN')]
自定义修改说明
- 若需要增加其他标注词性,只需将对应词性标签添加到
TARGET_POS集合中即可,比如要新增形容词就添加'JJ', 'JJR', 'JJS' - 若只需要输出匹配词性的词语、不需要附带标签,将函数返回值修改为
[item[0] for item in full_tag_result if item[1] in target_tags]即可
内容的提问来源于stack exchange,提问作者Fade
相关产品推荐
相关产品推荐

