当前位置: 首页 > news >正文

特征工程三:数据特征之词干提取器(stemmer)

SnowballStemmer(雪球词干提取器)是自然语言处理(NLP)中用于词形归并的核心工具,其主要用途可归纳为以下几个关键方面:

1. 核心功能:词汇规范化

  • 词干提取:将单词的各种屈折形式还原为基本词干

    • 示例:
      • “running” → “run”
      • “better” → “good”(英语比较级处理)
      • “计算”、“计算中” → “计算”(中文场景)
  • 跨语言支持:支持英语、法语、西班牙语等15种语言

    # 多语言示例
    english_stemmer = SnowballStemmer("english")
    french_stemmer = SnowballStemmer("french")
    print(english_stemmer.stem("running"))  # 输出: run
    print(french_stemmer.stem("mangerons"))  # 输出: mang(法语"吃"的未来时)
    

2. 核心应用场景

(1) 文本预处理增强

  • 搜索系统:提升查询扩展能力
    • 用户搜索"swimming"时,也能匹配"swim"相关文档
  • 情感分析:合并评价词汇变体
    • “happy”, “happiness” → 统一识别为积极情感

(2) 特征空间压缩

  • 降低维度:典型减少30-50%特征量

    • 原始特征:[“compute”, “computing”, “computation”]
    • 词干处理后:[“comput”, “comput”, “comput”]
  • 效果对比

    # 处理前词汇表大小:15,000词
    # 词干处理后词汇表:9,800词(减少34.7%)
    

(3) 语义相关性提升

  • 跨文档关联:识别不同词形的相同概念
    • 学术文献中:“analyze”, “analysis”, “analytical” → 相同研究主题
    • 医疗文本中:“fracture”, “fractured”, “fracturing” → 相同医学术语

3. 技术优势特点

特性PorterStemmerSnowballStemmer说明
语言支持仅英语15种语言包括欧洲主要语言
处理规则固定规则可扩展规则Snowball更灵活
过度削减问题较严重较轻如"university"→"univers"
性能稍快稍慢但更准确差异在10%以内

4. 实际应用示例

搜索引擎实现

from nltk.stem import SnowballStemmerstemmer = SnowballStemmer("english")
queries = ["machine learning", "learned machines"]# 查询预处理
def preprocess_query(query):return ' '.join([stemmer.stem(word) for word in query.split()])processed_queries = [preprocess_query(q) for q in queries]
# 输出: ["machin learn", "learn machin"]

与TF-IDF结合使用

from sklearn.feature_extraction.text import TfidfVectorizerdef stem_tokenizer(text):return [stemmer.stem(token) for token in text.split()]tfidf = TfidfVectorizer(tokenizer=stem_tokenizer)
corpus = ["Deep learning algorithms", "Algorithmic learning"]
X = tfidf.fit_transform(corpus)
# 特征名: ['algorithm', 'deep', 'learn']

5. 使用注意事项

  1. 专有名词保护

    protected_words = ["Google", "Python"]
    def custom_stem(word):return word if word in protected_words else stemmer.stem(word)
    
  2. 中文处理建议

    • 需先分词再处理
    import jieba
    text = "计算语言学很有趣"
    words = [stemmer.stem(word) for word in jieba.cut(text)]
    
  3. 性能优化

    • 批量处理文本时,先编译正则表达式:
    stemmer = SnowballStemmer("english", ignore_stopwords=True)
    

SnowballStemmer作为NLP流水线的标准组件,能显著提升后续文本分析任务的效果,是文本预处理过程中不可或缺的工具。

相关文章:

  • 如何有效防止 SQL 注入攻击?
  • 使用wavesurferJs实现录音音波效果
  • 数据可视化 —— 直方图
  • git 基础开发操作
  • memcpy 使用指南 (C语言)
  • Node.js API 安全的主要策略:最佳实践
  • 来自B站AIGC科技官的“vLLM简介“视频截图
  • FPGA时钟设计
  • XMOS直播声卡——可支持实时音频DSP处理的低延迟音频方案
  • 音频转base64
  • SQL面试之--明明建了索引为什么失效了?
  • C语言复习笔记--内存函数
  • 《代码整洁之道》第10章 类 - 笔记
  • 跨境电商货物体积与泡重计算器:高效便捷的物流计算工具
  • Zookeeper实现分布式锁实战应用
  • 【Office-Excel】单元格输入数据后自动填充单位
  • 增强版wps-plugin-deepseek开源插件是DeepSeek 支持的 WPS 插件,在您的办公工作流程中提供智能文档自动化和 AI 驱动的生产力增强
  • 【计算机哲学故事1-2】输入输出(I/O):你吸收什么,便成为什么
  • QT6 源(53)篇三:存储 c 语言字符串的类 QByteArray 的使用举例,
  • NodeJs模块化与JavaScript的包管理工具
  • 生于1987年,万宏宇已任内蒙古鄂温克旗委常委
  • 江苏、安徽跨省联动共治“样板间”:进一扇门可办两省事
  • 商务部就海外社交平台上发布从所谓中国“代工厂”低价购买国际知名品牌事答问
  • 小马智行彭军:今年是Robotaxi量产元年,有望3年后盈亏平衡
  • 最高法:侵犯著作权罪中的“复制发行”不包括单纯发行行为
  • 中国工程院院士、歼八Ⅱ飞机系统工程副总设计师温俊峰逝世