入门手册:浅谈自然言语处理!
作者头像
  • 魏铭嘉
  • 2020-09-07 14:12:21 1

自然语言处理的实际应用与技术详解

自然语言处理(NLP)的应用领域非常广泛,例如,它可以用来识别垃圾邮件、判断用户回复的情感倾向,以及根据搜索查询提供个性化的搜索结果。

自然语言处理是我认为最有趣的数据科学领域之一。机器能够以较高的准确性理解和解析文本内容,这一点既令人着迷,又有时令人感到不可思议。

那么,自然语言处理在实际中是如何运作的呢?本文将介绍自然语言处理的基本概念,并重点讲解如何在Python中使用nltk包实现这些功能。

首先,你需要安装nltk库。如果你还没有安装,可以在命令行中运行pip install nltk,然后在Python环境中运行nltk.download()

无论文本或句子输入机器,都需要进行预处理,主要包括词语切分和词形还原。词语切分即将文本分解成单词或单词组合;词形还原则是将单词转换为其基本形式,例如将复数单词转换为单数,将动词转换为其原形等。此外,还需要移除所有不具备实际意义的停用词。

让我们通过一个具体的例子来更好地理解这些概念。

示例:词语切分和词形还原

在进行词语切分时,需要选择合适的ngram值。ngram值决定了每次切分时包含的单词数量。通常情况下,默认值为1,但在某些场景下,比如分析情绪时,可能需要考虑连续的两个或多个单词,如“不开心”或“不喜欢”,因为这些短语可能影响文本的情感分析结果。

在词语切分过程中,还需要注意标点符号的处理。一般情况下,标点符号被认为不携带信息量,可以忽略。但在某些情况下,如文本中包含有意义的数字时,则需要保留这些标点符号。

下面展示了一个使用正则表达式标记器(RegexpTokenizer)的例子。正则表达式是一种由字符组成的模式,用于定义文本的结构。通过不同的参数设置,正则表达式可以实现对文本的不同切分效果。例如,w+表示匹配长度至少为1的所有单词字符,忽略空格和标点符号。

```python import nltk from nltk.tokenize import RegexpTokenizer

text = "Rome was founded in 753BC by its first king, Romulus." tokenizer = RegexpTokenizer(r'w+') tokens = tokenizer.tokenize(text) ```

执行上述代码后,生成的令牌列表为: ['Rome', 'was', 'founded', 'in', '753BC', 'by', 'its', 'first', 'king', 'Romulus']

可以看到,标点符号已经消失,只剩下有意义的单词。

接下来,我们需要从令牌中移除停用词。幸运的是,nltk库提供了多种语言的停用词列表。然而,对于特定应用场景,你可能需要自定义停用词列表。例如,如果在分析电影或音乐数据库时,某些停用词可能需要保留,因为它们可能对分析结果产生影响。

```python from nltk.corpus import stopwords

stopwords = set(stopwords.words('english')) cleantokens = [word for word in tokens if word.lower() not in stop_words] ```

执行上述代码后,清理后的令牌列表为: ['Rome', 'founded', '753BC', 'first', 'king', 'Romulus']

我们从原来的10个单词减少到了6个单词,接下来进入词形还原阶段。我们测试了两种不同的词形还原工具:WordNetLemmatizer和PorterStemmer。WordNetLemmatizer主要用于处理复数和一些特殊情况,而PorterStemmer则更加激进,不仅处理复数和派生词,还处理动词的时态变化,并将所有单词转换为小写。

```python from nltk.stem import WordNetLemmatizer, PorterStemmer

lemmatizer = WordNetLemmatizer() porter_stemmer = PorterStemmer()

lemmatizedtokens = [lemmatizer.lemmatize(word) for word in cleantokens] stemmedtokens = [porterstemmer.stem(word) for word in clean_tokens] ```

执行上述代码后,WordNetLemmatizer处理后的令牌列表为: ['rome', 'founded', '753bc', 'first', 'king', 'romulu']

PorterStemmer处理后的令牌列表为: ['rome', 'found', '753bc', 'first', 'king', 'romul']

在这两种处理方法中,PorterStemmer将单词进行了更多的简化,如将“found”变为“find”,将“Romulus”变为“romul”。

在进行建模前,还有许多方法可以用来整理和组织文本中的词汇。这些方法仅仅是众多选项中的一部分。在将文本输入机器学习模型之前,必须对其进行清洗和简化,以尽可能地减少噪声。当分析大量的文本数据时,可以借助sklearn库中的方法(如CountVectorizer、TfidfVectorizer或HashingVectorizer)将原始文本转换为令牌计数矩阵,以便进行模型训练。

    本文来源:图灵汇
责任编辑: : 魏铭嘉
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
入门言语自然手册处理
    下一篇