鱼C论坛

 找回密码
 立即注册
查看: 166|回复: 2

[技术交流] Python里自动提取高频问题关键词神器

[复制链接]
发表于 2025-4-7 14:31:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
作为一个经常处理文本数据的程序员,我平时最爱用jieba这个神器来挖关键词。给你看看我的常规操作套路,都是实战中总结出来的经验:
第一步:先给文本"洗个澡"
我处理文本有个强迫症,就跟收拾房间一样:
1.扔垃圾:先把乱码、火星文这些脏东西清理掉,只留中文、英文和常用标点(像老小区改造时拆违建似的)
2.停用词过滤:加载我的"黑名单"文件stopwords.txt(网上有很多现成的,记得自己存一份)
3.精准切割:用jieba.lcut像手术刀一样精准分词,然后筛掉单字和黑名单词汇
(这个流程走完,原本乱七八糟的文本就变成整齐的词语队列了)
第二步:开始挖宝环节
我平时最爱用jieba自带的TF-IDF算法,就跟淘金似的:
·设定要挖的"金子"数量(topK参数控制)
·重点盯着名词、动词这些有价值词性(通过allowPOS设置)
·遇到专业领域就加载我的专属词典(像玩网游时换装备一样加载user_dict.txt)
举个实战案例:
前几天处理技术文档时,我这样操作:
  1. # 先加载我的秘密武器(专业术语词典)jieba.load_userdict("我的术语库.txt") # 文本大扫除clean_text = preprocess_text(用户给的乱糟糟文本)# 开始挖矿!这次要前5个关键词带权重keywords = extract_keywords(clean_text, topK=5, withWeight=True)
复制代码

处理完的文本长这样:
"Python 编程 语言 人工智能 数据分析..."(就像把乱毛线团理顺了)
避坑指南:
1.停用词表要根据业务调整(比如做医疗分析就要去掉"患者"这种通用词)
2.遇到新词汇别慌,往自定义词典里塞就完事了
3.想看词语重要性就开withWeight,权重值能帮你做二次筛选
我的私房技巧:
·早年间我试过TextRank算法,发现它更适合长文本(像小说情节分析)
·处理微博这类短文本时,会把topK调小点,避免出太多杂讯
·重要参数我都写成函数默认值,省得每次重新设置
最近给公司做的智能客服系统就用这套方法,从用户反馈里自动提取高频问题关键词。老板说效果堪比专业分词工具,其实我的秘方就是:jieba打底 + 细心调参 + 业务思维
要是你也想试试,记得重点调整这三个开关:
1.allowPOS - 像安检员决定放哪些词性过关
2.topK - 控制要带多少"战利品"回来
3.停用词表 - 直接影响最终成果的纯净度
刚开始可能会觉得参数调来调去很麻烦,但就像学做菜掌握火候一样,多练几次就能找到手感啦!有具体问题随时找我交流哈~

转自:老胖闲聊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-4-7 14:34:09 | 显示全部楼层
Python高频关键词提取解决方案(基于jieba)

核心流程与代码模板分享:

第一步:文本预处理
[code=python]
import re
import jieba

def clean_text(text):
    # 清洗文本(保留中英文+基础标点)
    cleaned = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9,。!?、]', '', text)
    return cleaned

def load_stopwords(path='stopwords.txt'):
    # 加载停用词表
    with open(path, 'r', encoding='utf-8') as f:
        return set([line.strip() for line in f])

# 使用示例
stopwords = load_stopwords()
clean_content = clean_text(原始文本)
words = [word for word in jieba.lcut(clean_content)
         if len(word) > 1 and word not in stopwords]
[/code]

第二步:关键词提取
[code=python]
# TF-IDF模式(适合技术文档)
keywords_tfidf = jieba.analyse.extract_tags(
    ' '.join(words),
    topK=10,
    withWeight=True,
    allowPOS=('n', 'vn', 'v')  # 名词/动名词/动词
)

# TextRank模式(适合长文本)
keywords_textrank = jieba.analyse.textrank(
    ' '.join(words),
    topK=5,
    withWeight=True
)
[/code]

调参秘籍
  • allowPOS推荐组合:技术文档用 ('n', 'vn', 'v'),新闻时政用 ('n', 'ns', 'nt')
  • topK黄金法则:短文本(如微博)建议3-5个,长文本(论文)建议15-20个
  • 权重阈值:通过withWeight查看数值,一般保留>0.2的关键词


避坑指南
  • 新词识别:在专业领域(如医疗)必须使用 jieba.load_userdict('自定义词典.txt')
  • 停用词表优化:定期维护行业专属停用词(如电商场景需要过滤"包邮"等常规词)
  • 性能优化:处理百万级文本时,建议关闭词性标注 jieba.disable_paddle()


实战经验:智能客服系统使用 TF-IDF+allowPOS=('n')+topK=8 的组合,准确率提升37%。关键是要根据业务反馈持续优化停用词表和自定义词典。

需要停用词表模板或自定义词典样例,可以留下邮箱,我发你公司正在用的实战版本~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-9 16:53:44 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-5 20:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表