真IT小叮当深度学习:自然言语处理(四)词性 词形 停用词 标注

图灵汇官网

在自然语言处理的过程中,我们经常需要处理英文文本。英文中词形和词性的变化往往会影响语义的理解。人类可以直观地识别出“walk”、“walking”和“walked”都表示“走”的动作,只是时态不同。然而,计算机则是通过不同字母组合表示的数字化向量来理解句子或单词的含义。

为了使计算机更好地理解语义和词汇,我们通常会采用“词性归一化”方法进行处理。词性归一化包括词干提取和词形归一两种主要技术。

词干提取

词干提取(Stemming),也称为“茎干提取”,主要是去掉词尾的变化以保留词根。例如,“walking”去掉“ing”变为“walk”,“walked”去掉“ed”也变为“walk”。这种处理方式可以帮助计算机更容易地识别单词的基本形式。

在Python中,常用的词干提取工具有PorterStemmer、LancasterStemmer和SnowballStemmer。以下是使用这些工具的代码示例:

```python from nltk.stem.porter import PorterStemmer from nltk.stem.lancaster import LancasterStemmer from nltk.stem import SnowballStemmer

porterstemmer = PorterStemmer() lancasterstemmer = LancasterStemmer() snowball_stemmer = SnowballStemmer('english')

words = ['maximum', 'probably', 'cooperate'] print("Porter Stemmer:", [porterstemmer.stem(word) for word in words]) print("Lancaster Stemmer:", [lancasterstemmer.stem(word) for word in words]) print("Snowball Stemmer:", [snowball_stemmer.stem(word) for word in words]) ```

词形归一

词形归一(Lemmatization)则是将各种词形变化归一到一种标准形式。例如,“went”归一为“go”,“are”归一为“be”。词形归一通常使用WordNetLemmatizer进行处理。WordNet是一个由语言学家编撰的语义网络,可以为自然语言处理提供便利。

以下是使用WordNetLemmatizer进行词形归一的代码示例:

```python from nltk.stem import WordNetLemmatizer

wordnet_lemmatizer = WordNetLemmatizer()

words = ['tomatoes', 'noodles'] print("WordNet Lemmatizer:", [wordnet_lemmatizer.lemmatize(word) for word in words]) ```

词性标注

尽管词形归一化有助于统一单词的形式,但在某些情况下仍可能产生歧义。例如,“went”既可以是“go”的过去式,也可以是一个人名。为了解决这种歧义,我们需要进行词性标注(Part of Speech Tagging)。词性标注可以帮助计算机更准确地理解单词的实际意义。

以下是使用词性标注的代码示例:

```python from nltk.stem import WordNetLemmatizer from nltk import postag, wordtokenize

wordnet_lemmatizer = WordNetLemmatizer()

词性标注示例

print("Are (默认):", wordnetlemmatizer.lemmatize('are')) print("Is (默认):", wordnetlemmatizer.lemmatize('is'))

添加词性标注

print("Are (词性标注为动词):", wordnetlemmatizer.lemmatize('are', pos='v')) print("Is (词性标注为动词):", wordnetlemmatizer.lemmatize('is', pos='v'))

对整个句子进行词性标注

text = "what does the fox say" tokens = wordtokenize(text) print("Tokenized Text:", tokens) print("POS Tags:", postag(tokens)) ```

停用词

在自然语言处理中,一些常见词汇如“The”、“He”等往往会产生歧义,影响语义的理解。因此,我们通常会移除这些“停用词”。停用词列表可以在网上找到,使用NLTK库也可以轻松实现停用词的过滤。

```python import nltk from nltk.corpus import stopwords

nltk.download('stopwords')

text = "what does the fox say" words = nltk.wordtokenize(text) filteredwords = [word for word in words if word not in stopwords.words('english')] print("Filtered Words:", filtered_words) ```

通过上述步骤,我们可以构建一个有效的文本预处理流程,以便更好地理解和处理自然语言文本。具体的处理方法应根据实际需求进行选择和调整。

本文来源: 图灵汇 文章作者: 王婷婷