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

如何使用NLTK实现CSV中标签与预设分类的自动归属匹配?

用NLTK匹配用户反馈标签与预设分类的方案

当然可以搞定!用NLTK配合一些简单的文本处理技巧,完全能给你的97条用户反馈标签匹配到对应的预设分类。毕竟你的数据集规模不大,不用上复杂的深度学习模型,轻量级的方法就够用了。

1. 先把数据“洗干净”——文本预处理

首先得把两个CSV里的文本处理成统一、干净的格式,去掉干扰信息,让后续的匹配更准确。

  • 核心步骤:去掉序号(比如1) 这类前缀)、转小写、分词、过滤停用词(比如“的”“了”这类无意义词)
  • 示例代码(针对中文文本):
import nltk
import pandas as pd
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize

# 先下载NLTK需要的资源(第一次运行时执行)
nltk.download('punkt')
nltk.download('stopwords')

# 读取你的CSV文件,记得替换成实际的列名
feedback_df = pd.read_csv('feedback_tags.csv')
categories_df = pd.read_csv('preset_categories.csv')

# 定义预处理函数
def clean_text(text):
    # 去掉开头的序号(比如"2) 我可联系谁获取技术帮助?" → "我可联系谁获取技术帮助?")
    if ') ' in text:
        text = text.split(') ', 1)[-1]
    # 转小写、分词
    tokens = word_tokenize(text.lower())
    # 过滤停用词和非汉字字符
    chinese_stopwords = set(stopwords.words('chinese'))
    filtered_tokens = [tok for tok in tokens if tok.isalpha() and tok not in chinese_stopwords]
    return ' '.join(filtered_tokens)

# 对两部分文本做预处理
feedback_df['cleaned_feedback'] = feedback_df['你的反馈标签列名'].apply(clean_text)
categories_df['cleaned_category'] = categories_df['你的预设分类列名'].apply(clean_text)

2. 用相似度匹配找对应分类

这一步的思路是:把预处理后的文本转成数值向量,然后计算每条反馈和每个预设分类的余弦相似度,相似度最高的分类就是这条反馈的归属。

  • 我们用TF-IDF来转向量(简单高效,适合小数据集),再用余弦相似度计算匹配度:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# 训练TF-IDF模型,把所有文本(反馈+分类)都喂进去
all_texts = pd.concat([feedback_df['cleaned_feedback'], categories_df['cleaned_category']])
tfidf = TfidfVectorizer()
tfidf.fit(all_texts)

# 把反馈和分类都转成TF-IDF向量
feedback_vecs = tfidf.transform(feedback_df['cleaned_feedback'])
category_vecs = tfidf.transform(categories_df['cleaned_category'])

# 定义匹配函数:给单条反馈找最相似的分类
def find_best_category(feedback_vec):
    # 计算和每个分类的相似度
    sim_scores = cosine_similarity(feedback_vec, category_vecs)[0]
    # 取相似度最高的分类索引
    top_category_idx = sim_scores.argmax()
    # 返回原始分类名称
    return categories_df['你的预设分类列名'].iloc[top_category_idx]

# 给所有反馈匹配分类
feedback_df['matched_category'] = [find_best_category(vec) for vec in feedback_vecs]

3. 优化匹配结果的小技巧

因为是自动匹配,难免会有不准的情况,你可以用这些方法调整:

  • 自定义领域词库:比如如果“技术帮助”经常被匹配到错误分类,你可以手动把它和“技术服务”分类做关联,或者在预处理时替换成统一术语。
  • 设置相似度阈值:比如如果最高相似度低于0.3,就标记为「待人工确认」,避免把不相关的反馈硬塞到分类里。
  • 手动修正错误:先随机抽20-30条结果检查,把匹配错的案例整理出来,调整预处理规则或者给特定反馈加手动匹配规则。

小提醒:如果你的预设分类里有「无关类」,可以专门整理一些无关关键词(比如广告、测试话术),在匹配前先做规则判断,优先把这类反馈分到无关类里。

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

火山引擎 最新活动