You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于WordNet提取文本中名词和动词的Top20常见上位词

解决方案:文本中名词动词的Top20常见上位词统计

原代码的核心问题

  1. 目标偏离:check_hypernym函数仅筛选出有上位词的原词,统计的是原词频率而非上位词频率,完全不符合任务要求
  2. 冗余手动操作:手动创建word_list既低效又容易出错,无法动态适配文本内容
  3. 词性不匹配:未针对原词的词性过滤WordNet Synset,可能获取到错误词性的上位词
  4. 循环逻辑错误:final_list在循环内部初始化,最终仅保留最后一个词的上位词结果

优化后的连贯解决方案

以下代码整合了文本处理、高频词筛选、上位词提取和频率统计的全流程,避免冗余操作并保证结果准确性:

import spacy
from nltk.corpus import wordnet
from nltk.probability import FreqDist

# 加载Spacy英文模型
nlp = spacy.load("en_core_web_sm")

# 读取目标文本文件(替换为你的文件路径)
with open("hamlet.txt", "r", encoding="utf-8") as f:
    text_content = f.read()

# 用Spacy处理文本
doc = nlp(text_content)

# 提取非停用词、非标点的名词/动词,同时保留词性(统一转为小写避免大小写重复)
filtered_tokens = [
    (token.text.lower(), token.pos_) 
    for token in doc 
    if not token.is_stop 
    and not token.is_punct 
    and token.pos_ in ["NOUN", "VERB"]
]

# 统计原词的出现频率,取Top20高频词
word_freq = FreqDist([word for word, pos in filtered_tokens])
top_20_source_words = word_freq.most_common(20)

# 映射Spacy词性到WordNet词性标记
pos_mapping = {
    "NOUN": wordnet.NOUN,
    "VERB": wordnet.VERB
}

# 收集所有有效上位词
hypernym_collection = []

for word, _ in top_20_source_words:
    # 获取该词在原文本中的主要词性(避免同一词多词性混淆)
    word_pos_stats = FreqDist([pos for w, pos in filtered_tokens if w == word])
    dominant_pos = word_pos_stats.most_common(1)[0][0]
    wordnet_pos = pos_mapping.get(dominant_pos)
    
    if not wordnet_pos:
        continue
    
    # 获取对应词性的Synset,避免跨词性匹配
    synsets = wordnet.synsets(word, pos=wordnet_pos)
    for syn in synsets:
        # 提取当前Synset的所有上位词
        for hypernym in syn.hypernyms():
            # 将上位词的下划线替换为空格,转为自然语言格式
            hypernym_term = hypernym.lemmas()[0].name().replace("_", " ")
            hypernym_collection.append(hypernym_term)

# 统计上位词的出现频率,取Top20
hypernym_freq = FreqDist(hypernym_collection)
top_20_hypernyms = hypernym_freq.most_common(20)

# 输出结果
print("Top 20 最常见上位词:")
for term, count in top_20_hypernyms:
    print(f"{term}: {count}")

关键优化点说明

  • 自动高频词筛选:直接从文本统计Top20名词/动词,无需手动维护词表
  • 词性精准匹配:根据原词在文本中的主要词性过滤WordNet Synset,确保上位词词性一致
  • 高效上位词提取:一次性完成Synset遍历和上位词收集,避免冗余循环
  • 结果可读性优化:将WordNet中带下划线的术语转为自然语言格式
  • 逻辑连贯性:从文本读取到最终结果输出形成完整流程,减少中间手动操作

内容的提问来源于stack exchange,提问作者Gnothi Sauton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 16:01:28