1. 简介

在本篇文章中,我们将介绍自然语言处理(NLP)中常用的一种文本预处理技术:词干提取(Stemming),并重点对比两种主流算法 —— Porter Stemming AlgorithmLancaster Stemming Algorithm

在很多 NLP 教程中,词干提取通常被简单描述为将单词还原为其基础形式,但很少提及不同算法之间的差异。本文将从原理、规则、使用场景等方面对这两个算法进行详细对比,帮助你根据项目需求做出合适的选择。

2. 自然语言处理(NLP)概述

自然语言处理(Natural Language Processing, NLP)是人工智能与计算机科学的一个分支,旨在让计算机能够理解、解析并响应人类语言。

NLP 的应用场景非常广泛,包括:

  • 情感分析(Sentiment Analysis)
  • 语音识别(Speech Recognition)
  • 机器翻译(Machine Translation)
  • 文本摘要(Text Summarization)
  • 聊天机器人(Chatbots)
  • 命名实体识别(Named Entity Recognition)
  • 搜索引擎(Search Engines)

在这些任务中,文本预处理是关键的前期步骤,直接影响模型的训练效果和性能。

3. NLP 中的文本预处理步骤

为了让计算机理解文本,我们需要将其转换为数值形式。但在转换之前,通常需要进行以下预处理操作:

  • 文本清洗(Text Cleaning):去除特殊符号、多余空格、转为小写等
  • 停用词移除(Stop Words Removal):过滤无实际意义的高频词
  • 词形还原(Lemmatization):将单词的不同形式统一为词典中的标准形式(如 studies → study)
  • 词干提取(Stemming):将单词缩减为其词干(stem),不一定是合法单词

4. 什么是词干提取(Stemming)?

词干提取(Stemming) 是将一个单词缩减为其“词干”或“根”的过程。这个词干不一定是合法的英文单词。

例如,使用 Porter 算法,“argue”、“argued”、“argues” 和 “arguing” 都会被提取为 “argu”,虽然它不是一个真实存在的单词。

词干提取有助于从海量文本中提取关键信息,特别是在搜索引擎、文本聚类等任务中,能显著提升召回率和效率。

4.1 词干提取的工作原理

不同的词干提取算法实现方式不同:

  • 简单方法:识别并去除前缀或后缀,但容易出错
  • 复杂方法:结合词性(POS)识别和规则库,进行更精准的提取

接下来我们将重点介绍两个经典的词干提取算法:Porter 和 Lancaster。

5. Porter 词干提取算法

Porter Stemmer 是一种基于规则的后缀剥离算法,由 Martin Porter 在 1980 年提出。

它的核心思想是通过一系列预定义规则,将单词的后缀逐步去除,最终得到词干。

5.1 单词结构模型

Porter 算法将单词划分为由元音(vowel)和辅音(consonant)组成的序列:

  • c:单个辅音
  • C:多个辅音组成的序列
  • v:单个元音
  • V:多个元音组成的序列

每个单词可以表示为以下四种形式之一:

也可以简化为如下结构:

其中 m 表示单词的“度量值(measure)”,用于判断是否满足某些规则条件。

5.2 规则示例

Porter 算法共包含 超过 50 条规则,分为 5 个主要步骤和若干子步骤。每条规则格式如下:

(condition) S1 -> S2

表示:如果单词以 S1 结尾,并且前面的部分满足 condition 条件,则将 S1 替换为 S2。

一些典型规则如下:

  • SSES -> SS(如 caressescaress
  • S ->(如 catscat
  • (m > 0) EED -> EE(如 agreedagree
  • (m > 0) ATOR -> ATE(如 operatoroperate
  • (m > 1) ER ->(如 airlinerairlin
  • (m > 1 and (*S or *T)) ION ->(如 adoptionadopt

5.3 特点总结

  • ✅ 实现简单,规则清晰
  • ⚠️ 提取结果更温和,词干更接近原词
  • ✅ 适合大多数通用 NLP 场景

6. Lancaster 词干提取算法

Lancaster Stemmer 是一种更激进的词干提取算法,由 Chris Paice 等人提出。相比 Porter,它更倾向于“过度提取(over-stemming)”。

6.1 核心机制

Lancaster 也采用规则驱动的方式,但规则数量更多(超过 100 条),并且规则格式与 Porter 不同。

每条规则包含 5 个部分,其中两个是可选的:

[ending in reverse][optional intact flag][remove total letters][optional append string][continuation symbol]

例如:

  • "sei3y>":如果单词以 "ies" 结尾,去掉最后 3 个字符,替换为 "y",然后继续应用规则
  • "mu*2.":如果单词以 "um" 结尾且为完整单词,则去掉最后 2 个字符,停止处理
  • "nois4j>":将 "sion" 替换为 "j",然后继续处理

6.2 防止过度提取的规则

为了防止短词被过度提取,Lancaster 设定了以下限制:

  • ✅ 如果单词以元音开头,提取后至少保留两个字母(如 owingow,但 eare 不允许)
  • ✅ 如果单词以辅音开头,提取后至少保留三个字母,且其中至少有一个是元音或 y(如 sayingsay,但 stringstr 不允许)

6.3 特点总结

  • ❌ 提取结果更激进,可能破坏语义
  • ✅ 更适合需要高召回率的场景
  • ⚠️ 容易出现“词干不合法”的问题

7. Porter 与 Lancaster 的主要区别总结

对比维度 Porter Stemmer Lancaster Stemmer
算法类型 后缀剥离规则 多规则迭代处理
规则数量 约 50 条 超过 100 条
提取强度 温和,更接近原词 激进,容易过度提取
是否保留语义 ✅ 更好地保留语义 ⚠️ 容易破坏语义
应用场景 通用 NLP 任务(如搜索引擎、情感分析) 高召回率场景(如信息检索)
可读性 ✅ 提取结果更易理解 ⚠️ 提取结果较难理解

8. 总结与建议

在大多数 NLP 项目中,Porter Stemmer 是默认首选算法,因为它在保留语义和提高召回率之间取得了较好的平衡。

如果你的项目对召回率要求极高,且不太在意词干是否易于理解,那么 Lancaster Stemmer 是一个值得尝试的选项,但需要注意其“过度提取”的副作用。

建议:在实际项目中,建议对两种算法进行对比测试,选择更适合你数据集和任务目标的那一个。


📌 作者邮箱john.doe@example.com
📅 撰写时间:2025年4月5日


原始标题:Differences Between Porter and Lancaster Stemming Algorithms