You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Pandas统计关键词频次,实现用户能力等级(初/中/高)划分

首先,这个需求很实际!要根据作者的长文本和给定的关键词列表把他们划分成初级、中级、高级三个能力等级,核心思路是结合关键词的出现频率/覆盖范围,再加上对关键词使用语境的分析。下面是一套可落地的步骤:

一、先明确清晰的分级规则

首先得制定客观的判定标准,要紧扣你的关键词列表和不同能力层级的典型特征:

  • 初级

    • 仅提及1-2种基础语言(比如Python、Java、Visual Basic)
    • 关键词总出现次数少(比如小于5次)
    • 文本内容聚焦入门问题:比如“如何入门”“基本语法”“安装教程”“新手指南”这类表述
  • 中级

    • 提及3-4种语言(基础+中阶,比如C++、JavaScript、Pascal)
    • 关键词总出现次数适中(5-15次)
    • 文本内容围绕实际实现:比如“调试”“面向对象”“整合X和Y”“优化简单代码”这类表述
  • 高级

    • 提及5种及以上关键词(包含复杂领域,比如MATLAB、Objective-C、Statistics)
    • 关键词总出现次数多(大于15次)
    • 文本内容涉及进阶话题:比如“C++内存管理”“统计建模”“MATLAB机器学习”“设计模式”“性能优化”这类表述
二、用Pandas一步步实现

假设你的DataFrame df 包含 author_id(作者唯一标识)和 text(长文本内容)两列,接下来把规则转化为代码:

2.1 预处理文本

先清洗文本,方便后续分析:

import pandas as pd
import re
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

# 若未下载过nltk资源,先执行以下两行
import nltk
nltk.download('stopwords')
nltk.download('punkt')

def preprocess_text(text):
    # 转小写
    text = text.lower()
    # 去除标点和特殊字符
    text = re.sub(r'[^\w\s]', '', text)
    # 停用词过滤
    stop_words = set(stopwords.words('english'))
    tokens = word_tokenize(text)
    filtered_text = ' '.join([word for word in tokens if word not in stop_words])
    return filtered_text

# 对文本列应用预处理
df['cleaned_text'] = df['text'].apply(preprocess_text)

2.2 计算关键词指标

对每个作者,统计:

  • 关键词总出现次数
  • 用到的不同关键词数量
searchterms = ['Java language', 'C Language', 'C++', 'Python Language', 'JavaScript', 'Pascal Language', 'Statistics', 'Visual Basic', 'Objective-C', 'MATLAB']

# 关键词转小写,实现大小写不敏感匹配
lower_terms = [term.lower() for term in searchterms]

def count_keywords(text):
    total_count = 0
    unique_terms = set()
    for term in lower_terms:
        count = text.count(term)
        if count > 0:
            total_count += count
            unique_terms.add(term)
    return pd.Series([total_count, len(unique_terms)], index=['total_keyword_count', 'unique_keyword_count'])

# 按作者分组计算指标(如果一个作者有多条文本,用groupby合并后计算)
author_metrics = df.groupby('author_id')['cleaned_text'].apply(lambda x: count_keywords(' '.join(x))).reset_index()

2.3 分析语境关键词

通过统计不同层级的典型表述,增加语境维度的评分:

# 定义各层级的语境短语
beginner_phrases = ['how to start', 'basic syntax', 'install', 'beginner guide', 'learn', 'first program']
intermediate_phrases = ['debug', 'oop', 'integrate', 'optimize code', 'error handling', 'project']
advanced_phrases = ['memory management', 'statistical modeling', 'machine learning', 'design pattern', 'performance optimization', 'low-level']

def count_context_phrases(text, phrases):
    return sum(text.count(phrase.lower()) for phrase in phrases)

# 给作者指标表添加语境计数
author_metrics['beginner_context'] = df.groupby('author_id')['cleaned_text'].apply(lambda x: count_context_phrases(' '.join(x), beginner_phrases)).values
author_metrics['intermediate_context'] = df.groupby('author_id')['cleaned_text'].apply(lambda x: count_context_phrases(' '.join(x), intermediate_phrases)).values
author_metrics['advanced_context'] = df.groupby('author_id')['cleaned_text'].apply(lambda x: count_context_phrases(' '.join(x), advanced_phrases)).values

2.4 分配能力等级

结合所有指标计算得分,再映射到对应的等级(权重和阈值可以根据你的实际数据调整):

def assign_level(row):
    # 计算加权得分(权重可根据实际情况调整)
    score = (row['unique_keyword_count'] * 2) + (row['total_keyword_count'] * 0.5) + \
            (row['beginner_context'] * -1) + (row['intermediate_context'] * 1) + (row['advanced_context'] * 3)
    
    # 定义得分阈值(根据数据分布微调)
    if score < 5:
        return '初级'
    elif 5 <= score < 20:
        return '中级'
    else:
        return '高级'

# 应用等级分配
author_metrics['skill_level'] = author_metrics.apply(assign_level, axis=1)
三、验证与迭代
  • 抽样检查:从每个等级里选几个作者,手动查看他们的文本,确认分类是否合理
  • 调整阈值:如果出现大量误分类,就修改得分权重或阈值范围
  • 优化语境短语:根据你的数据补充/删除语境短语(比如如果高级作者经常提到“编译器优化”,就把它加到高级短语里)

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

火山引擎 最新活动