词形还原与词干提取插图

词形还原

想象一下,你有一个魔法棒,轻轻一挥,就能把各种变形了的单词变回它们最原始、最基本的样子。这个魔法棒就是“词形还原”。

在英语里,很多单词会因为时态、数、性别、格等因素变化形式,比如“run”会变成“running”(现在分词)、“ran”(过去式)、“runs”(第三人称单数)。词形还原就像是能识别出这些变化,然后把它们都变回最基础的那个词,也就是“run”。

简单来说,词形还原就是把一个单词的各种变形都还原成它最原本的样子,方便我们理解和处理。

词干提取

词干提取则更像是用一个剪刀,把单词里那些不影响基本意思的部分剪掉,只留下最核心、最有意义的部分。

比如,“running”、“runner”、“runnable”这些单词,虽然它们看起来不一样,但都有一个共同的核心部分“run”。词干提取就是找到并提取出这个核心部分,也就是“词干”。

有时候,词干提取可能会比词形还原更“粗暴”一些,因为它可能不仅仅去掉时态、数这些变化,还可能去掉一些前缀、后缀,只要这样能保留单词的基本意思就行。

总结

  • 词形还原:就像是把单词的各种变形都变回它们最原始的样子。
  • 词干提取:则是把单词里那些不重要的部分剪掉,只留下最核心的部分。
词形还原与词干提取插图1

使用NLTK进行词形还原和词干提取

词形还原

NLTK使用WordNetLemmatizer进行词形还原。首先,我们需要下载WordNet资源。

逐行分析

  1. 导入nltk库,并下载wordnet资源。
  2. 从nltk.stem中导入WordNetLemmatizer类。
  3. 初始化WordNetLemmatizer对象。
  4. 创建一个包含示例单词的列表。
  5. 使用列表推导式对每个单词进行词形还原。
  6. 打印原始单词列表和词形还原后的单词列表。

输出可能类似于:

词干提取

NLTK使用PorterStemmer进行词干提取。

逐行分析

  1. 从nltk.stem中导入PorterStemmer类。
  2. 初始化PorterStemmer对象。
  3. 创建一个包含示例单词的列表(与词形还原使用相同的列表)。
  4. 使用列表推导式对每个单词进行词干提取。
  5. 打印原始单词列表和词干提取后的单词列表。

输出可能类似于:

使用SpaCy进行词形还原和词干提取

逐行分析

  1. 导入spacy库。
  2. 加载SpaCy的英语模型en_core_web_sm
  3. 创建一个包含示例句子的字符串。
  4. 使用SpaCy处理这个句子,得到一个Doc对象。
  5. 使用列表推导式遍历Doc对象中的每个Token,并获取其词形还原形式(lemma_属性)。
  6. 打印原始单词(通过token.text获取)和词形还原后的单词列表。

输出可能类似于:

注意:SpaCy不直接提供词干提取功能,因为它侧重于更高级的自然语言处理任务,如命名实体识别、依存句法分析等。如果你确实需要词干提取功能,并且希望使用SpaCy,你可能需要结合其他库(如NLTK)或编写自定义的词干提取函数。

(仅供参考)