词形还原
想象一下,你有一个魔法棒,轻轻一挥,就能把各种变形了的单词变回它们最原始、最基本的样子。这个魔法棒就是“词形还原”。
在英语里,很多单词会因为时态、数、性别、格等因素变化形式,比如“run”会变成“running”(现在分词)、“ran”(过去式)、“runs”(第三人称单数)。词形还原就像是能识别出这些变化,然后把它们都变回最基础的那个词,也就是“run”。
简单来说,词形还原就是把一个单词的各种变形都还原成它最原本的样子,方便我们理解和处理。
词干提取
词干提取则更像是用一个剪刀,把单词里那些不影响基本意思的部分剪掉,只留下最核心、最有意义的部分。
比如,“running”、“runner”、“runnable”这些单词,虽然它们看起来不一样,但都有一个共同的核心部分“run”。词干提取就是找到并提取出这个核心部分,也就是“词干”。
有时候,词干提取可能会比词形还原更“粗暴”一些,因为它可能不仅仅去掉时态、数这些变化,还可能去掉一些前缀、后缀,只要这样能保留单词的基本意思就行。
总结
- 词形还原:就像是把单词的各种变形都变回它们最原始的样子。
- 词干提取:则是把单词里那些不重要的部分剪掉,只留下最核心的部分。
使用NLTK进行词形还原和词干提取
词形还原
NLTK使用WordNetLemmatizer进行词形还原。首先,我们需要下载WordNet资源。
import nltk
nltk.download('wordnet')
from nltk.stem import WordNetLemmatizer
# 初始化WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
# 示例单词列表
words = ["running", "better", "cars", "went"]
# 进行词形还原
lemmatized_words = [lemmatizer.lemmatize(word) for word in words]
print("原始单词:", words)
print("词形还原后:", lemmatized_words)
逐行分析:
- 导入nltk库,并下载wordnet资源。
- 从nltk.stem中导入WordNetLemmatizer类。
- 初始化WordNetLemmatizer对象。
- 创建一个包含示例单词的列表。
- 使用列表推导式对每个单词进行词形还原。
- 打印原始单词列表和词形还原后的单词列表。
输出可能类似于:
代码原始单词: ['running', 'better', 'cars', 'went']
词形还原后: ['run', 'good', 'car', 'go']
词干提取
NLTK使用PorterStemmer进行词干提取。
from nltk.stem import PorterStemmer
# 初始化PorterStemmer
stemmer = PorterStemmer()
# 示例单词列表
words = ["running", "better", "cars", "went"]
# 进行词干提取
stemmed_words = [stemmer.stem(word) for word in words]
print("原始单词:", words)
print("词干提取后:", stemmed_words)
逐行分析:
- 从nltk.stem中导入PorterStemmer类。
- 初始化PorterStemmer对象。
- 创建一个包含示例单词的列表(与词形还原使用相同的列表)。
- 使用列表推导式对每个单词进行词干提取。
- 打印原始单词列表和词干提取后的单词列表。
输出可能类似于:
代码原始单词: ['running', 'better', 'cars', 'went']
词干提取后: ['run', 'better', 'car', 'went']
使用SpaCy进行词形还原和词干提取
import spacy
# 加载SpaCy的英语模型
nlp = spacy.load("en_core_web_sm")
# 示例句子
text = "The cars are running better than they went yesterday."
# 使用SpaCy处理文本
doc = nlp(text)
# 词形还原
lemmatized_words = [token.lemma_ for token in doc]
# SpaCy不直接提供词干提取功能,但我们可以使用token.text来获取原始形式
# 如果真的需要词干提取,可能需要结合其他库或自定义函数
print("原始单词:", [token.text for token in doc])
print("词形还原后:", lemmatized_words)
逐行分析:
- 导入spacy库。
- 加载SpaCy的英语模型
en_core_web_sm
。 - 创建一个包含示例句子的字符串。
- 使用SpaCy处理这个句子,得到一个
Doc
对象。 - 使用列表推导式遍历
Doc
对象中的每个Token
,并获取其词形还原形式(lemma_
属性)。 - 打印原始单词(通过
token.text
获取)和词形还原后的单词列表。
输出可能类似于:
代码原始单词: ['The', 'cars', 'are', 'running', 'better', 'than', 'they', 'went', 'yesterday', '.']
词形还原后: ['the', 'car', 'be', 'run', 'well', 'than', 'they', 'go', 'yesterday', '.']
注意:SpaCy不直接提供词干提取功能,因为它侧重于更高级的自然语言处理任务,如命名实体识别、依存句法分析等。如果你确实需要词干提取功能,并且希望使用SpaCy,你可能需要结合其他库(如NLTK)或编写自定义的词干提取函数。
(仅供参考)
Comments NOTHING