如何修正代码以从《哈姆雷特》语料库筛选正确的-est型形容词最高级词汇
解决方案:筛选《哈姆雷特》中的形容词最高级词汇
原代码仅通过-est后缀筛选词汇,无法区分真正的形容词最高级与其他以-est结尾的名词、动词或普通形容词(如priest、honest)。要精准筛选,需结合词性标注,识别出标记为形容词最高级的词汇(NLTK中对应标签为JJS)。
修正后的代码
from nltk.corpus import shakespeare from nltk import pos_tag import nltk # 若未下载词性标注模型,先执行以下两行(仅首次运行需要) # nltk.download('averaged_perceptron_tagger') def get_superlative_adjectives(word_list): # 转小写并去重(可选,避免重复词汇) lower_words = list(set([word.lower() for word in word_list])) # 词性标注 tagged_words = pos_tag(lower_words) # 筛选形容词最高级(标签JJS) superlatives = [word for word, tag in tagged_words if tag == 'JJS'] return sorted(superlatives) # 获取《哈姆雷特》词汇并调用函数 hamlet_words = shakespeare.words('hamlet.xml') print(get_superlative_adjectives(hamlet_words))
代码说明
- 词性标注:
pos_tag函数会为每个词汇添加词性标签,JJS专门对应英语形容词的最高级形式(包括规则变化如mightiest和不规则变化如best)。 - 去重处理:使用
set去除重复词汇,最后排序让结果更规整(若需要保留原出现频次可去掉这一步)。 - 修正变量错误:原代码中调用
est(words_list)但未定义words_list,修正为使用实际获取的hamlet_words变量。
预期输出
运行后会得到仅包含形容词最高级的列表:
['best', 'blackest', 'chariest', 'chiefest', 'darkest', 'dearest', 'eldest', 'highest', 'littlest', 'lowest', 'mightiest', 'noblest', 'profoundest', 'strongest', 'unworthiest', 'weakest', 'wisest']
内容的提问来源于stack exchange,提问作者Denzel
相关产品推荐
相关产品推荐

