基于主题词列表匹配的文章领域分类打标实现咨询
文章多领域标签匹配实现方案
规则说明
按照给定的分类逻辑,基于文章Topics字段的主题词做存在性匹配:
- 预设3个分类领域及对应主题词表:
- Nature(自然领域):Animals、Plants
- Technology(科技领域):Computer、HiFi、AI、Intelligent Systems、IOT、Machine Learning
- Food(美食领域):Pizza、Fast Food、Hamburger、Hot Dog、Salad、Fries
- 单篇文章的
Topics只要包含某领域下任意1个主题词,该文章对应领域列标记为1,否则标记为0 - 单篇文章可同时命中多个领域,对应多个领域列同时为1
- 若文章所有主题词都未命中上述3个领域的词表,NC(未分类)列标记为1,否则为0
实现代码(Pandas 环境)
import pandas as pd # 定义领域-主题词映射 area_word_map = { "Nature": {"Animals", "Plants"}, "Technology": {"Computer", "HiFi", "AI", "Intelligent Systems", "IOT", "Machine Learning"}, "Food": {"Pizza", "Fast Food", "Hamburger", "Hot Dog", "Salad", "Fries"} } # 读取数据集,此处用示例数据演示,实际使用时替换为你的数据读取逻辑 ds = pd.DataFrame([ [1, "abcd...", 9999, "Animals"], [2, "aabbcc..", 8888, "AI, Computer, HiFi"], [3, "aaabbb", 7777, "Hot Dog, Animals"], [4, "cccbb", 6666, "Dataset, R"], [5, "dddss", 64, "Hamburger, AI"] ], columns=["Id", "ArticleName", "Pages", "Topics"]) # 逐领域匹配打标 for area in area_word_map: ds[area] = ds["Topics"].apply( lambda topic_str: 1 if set(t.strip() for t in topic_str.split(",")) & area_word_map[area] else 0 ) # 计算未分类标记 ds["NC"] = (ds[list(area_word_map.keys())].sum(axis=1) == 0).astype(int)
运行结果
执行代码后输出的数据集结构和预期完全一致:
Id ArticleName Pages Topics Nature Technology Food NC 0 1 abcd... 9999 Animals 1 0 0 0 1 2 aabbcc.. 8888 AI, Computer, HiFi 0 1 0 0 2 3 aaabbb 7777 Hot Dog, Animals 1 0 1 0 3 4 cccbb 6666 Dataset, R 0 0 0 1 4 5 dddss 64 Hamburger, AI 0 1 1 0
注意点
- 拆分主题词时做了空格去除处理,避免
Topics字段里逗号前后的空格导致匹配失效 - 用集合交集做匹配判断,比循环遍历词表的执行效率更高,适合大批量数据集处理
- 如果后续需要新增领域或者新增主题词,直接修改
area_word_map字典即可,不需要改动核心匹配逻辑
内容的提问来源于stack exchange,提问作者Giuseppe Caputo
相关产品推荐
相关产品推荐

