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

在Django REST应用中使用NLTK提取名词和动词的技术求助

解决Django REST中用NLTK提取动词的问题

看了你的代码,我发现核心问题出在直接把序列化后的serializer.data转成字符串这一步——serializer.data是包含Task对象完整结构的OrderedDict列表,转成字符串后会带上OrderedDict([(u'id', 17), ('title'...)])这类格式符号,NLTK分词时会把这些括号、键名也当成词汇,自然没法正确识别动词。

下面是修正后的代码,我会一步步说明改动点:

@api_view(['GET'])
def test(request):
    verbs = []
    tasks = Task.objects.all()
    # 不要直接用序列化后的data,而是从Task实例中提取需要分析的文本字段(假设你要分析的是title字段)
    for task in tasks:
        # 提取目标文本,比如task.title或task.content,根据你的模型字段调整
        text_content = task.title
        # 对单条文本做分词处理
        tokens = nltk.word_tokenize(text_content)
        # 进行词性标注
        tags = nltk.pos_tag(tokens)
        # 过滤提取动词:只保留词汇本身,不要词性标签
        for word, tag in tags:
            if tag.startswith('V'):
                verbs.append(word)
    return Response(verbs)

关键改动说明:

  • 避开序列化数据的干扰:序列化后的serializer.data是给前端返回的结构化数据,自带很多非文本格式符号,不适合直接做NLP分析。直接从Task实例中提取目标文本字段(比如标题、内容)才是正确的做法。
  • 逐任务精准处理:遍历每个Task对象单独处理文本,避免多条文本混在一起导致的分词混乱。
  • 修正动词提取逻辑:原代码用verbs.extend(tag)会把词汇和词性标签都加入列表(比如['run', 'VB']),改成verbs.append(word)只保留动词本身,符合接口返回的预期。

如果需要进一步提升准确率,还可以先对文本做简单清洗,比如去掉标点、统一转小写:

import string
text_content = task.title.lower().translate(str.maketrans('', '', string.punctuation))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:40:28