Python 自然语言处理入门

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

要执行nltk本教程中的某些操作,您可能需要下载特定资源。我们将在需要时描述每个资源。

但是,如果您想避免在教程后面下载单个资源并立即获取它们,请运行以下命令:

python -m nltk.downloader all

第 1 步:转换为代币


计算机系统本身无法在自然语言中找到意义。处理自然语言的第一步是将原始文本转换为标记。记号是连续字符的组合,具有一定的含义。由您决定如何将句子分解为标记。例如,一个简单的方法是用空格分割一个句子以将其分解为单个单词。

在 NLTK 库中,您可以使用该word_tokenize()函数将字符串转换为标记。但是,您首先需要下载punkt资源。在终端中运行以下命令:

nltk.download(‘punkt’)

接下来,您需要导入word_tokenizefromnltk.tokenize才能使用它:

from nltk.tokenize import word_tokenize

print(word_tokenize(“Hi, this is a nice hotel.”))

代码的输出如下:

[‘Hi’, ‘,’, ‘this’, ‘is’, ‘a’, ‘nice’, ‘hotel’, ‘.’]

您会注意到,word_tokenize它不仅根据空格简单地拆分字符串,而且还将标点符号拆分为标记。如果您想在分析中保留标点符号,这取决于您。

第 2 步:将单词转换为其基本形式


在处理自然语言时,您经常会注意到同一个词有多种语法形式。例如,“go”、“going”和“gone”是同一个动词“go”的形式。

虽然项目的必要性可能要求您保留各种语法形式的单词,但让我们讨论一种将同一单词的各种语法形式转换为其基本形式的方法。您可以使用两种技术将单词转换为其基础。

第一种技术是词干。词干提取是一种从单词中删除词缀的简单算法。NLTK中有多种词干提取算法可供使用。我们将在本教程中使用 Porter 算法。

我们首先PorterStemmernltk.stem.porter. 接下来,我们将词干分析器初始化为stemmer变量,然后使用该.stem()方法找到一个单词的基本形式:

from nltk.stem.porter import PorterStemmer

stemmer = PorterStemmer()

print(stemmer.stem(“going”))

上面代码的输出是go. 如果您为上述其他形式的“go”运行词干分析器,您会注意到词干分析器返回相同的基本形式“go”。但是,由于词干提取只是一种基于去除词缀的简单算法,因此当词在语言中不太常用时,它就会失败。

例如,当您尝试对单词“构成”进行词干分析时,它会给出不直观的结果:

print(stemmer.stem(“constitutes”))

您会注意到输出是“构成”。

这个问题通过转向一种更复杂的方法来解决给定上下文中单词的基本形式。该过程称为词形还原。词形还原根据文本的上下文和词汇对单词进行规范化。在 NLTK 中,您可以使用WordNetLemmatizer类对句子进行词形还原。

首先,您需要wordnet从 Python 终端中的 NLTK 下载器下载资源:

nltk.download(‘wordnet’)

下载后,您需要导入WordNetLemmatizer该类并对其进行初始化:

from nltk.stem.wordnet import WordNetLemmatizer

lem = WordNetLemmatizer()

要使用词形还原器,请使用.lemmatize()方法。它需要两个参数:单词和上下文。在我们的示例中,我们将使用“v”作为上下文。在查看方法的输出之后,让我们进一步探索上下文.lemmatize()

print(lem.lemmatize(‘constitutes’, ‘v’))

您会注意到该.lemmatize()方法正确地将单词“构成”转换为其基本形式“构成”。您还会注意到词形还原比词干提取花费的时间更长,因为算法更复杂。

.lemmatize()让我们检查如何以编程方式确定方法的第二个参数。NLTK 具有pos_tag()帮助确定句子中单词上下文的功能。但是,您首先需要averaged_perceptron_tagger通过 NLTK 下载器下载资源:

nltk.download(‘averaged_perceptron_tagger’)

接下来,导入pos_tag()函数并在一句话上运行:

from nltk.tag import pos_tag

sample = “Hi, this is a nice hotel.”

print(pos_tag(word_tokenize(sample)))

您会注意到输出是对的列表。每对都由一个标记及其标记组成,它表示整个文本中标记的上下文。请注意,标点符号的标签本身就是:

[(‘Hi’, ‘NNP’),

(‘,’, ‘,’),

(‘this’, ‘DT’),

(‘is’, ‘VBZ’),

(‘a’, ‘DT’),

(‘nice’, ‘JJ’),

(‘hotel’, ‘NN’),

(‘.’, ‘.’)]

你如何解码每个令牌的上下文?以下是Web 上所有标签及其对应含义的完整列表。请注意,所有名词的标签都以“N”开头,所有动词的标签都以“V”开头。我们可以在.lemmatize()方法的第二个参数中使用此信息:

def lemmatize_tokens(stentence):

lemmatizer = WordNetLemmatizer()

lemmatized_tokens = []

for word, tag in pos_tag(stentence):

if tag.startswith(‘NN’):

pos = ‘n’

elif tag.startswith(‘VB’):

pos = ‘v’

else:

pos = ‘a’

lemmatized_tokens.append(lemmatizer.lemmatize(word, pos))

return lemmatized_tokens

sample = “Legal authority constitutes all magistrates.”

print(lemmatize_tokens(word_tokenize(sample)))

上面代码的输出如下:

[‘Legal’, ‘authority’, ‘constitute’, ‘all’, ‘magistrate’, ‘.’]

该输出是预期的,其中“构成”和“地方法官”已分别转换为“构成”和“地方法官”。

第三步:数据清理


准备数据的下一步是清理数据并删除任何不会对您的分析增加意义的内容。从广义上讲,我们将着眼于从您的分析中删除标点符号和停用词。

删除标点符号是一项相当容易的任务。该库的punctuation对象string包含所有英文标点符号:

import string

print(string.punctuation)

此代码段的输出如下:

‘!"#$%&amp;</span>’()*+,-./:;&lt;=&gt;?@[</span></span>]^_`{|}~’

为了从标记中删除标点符号,您可以简单地运行以下命令:

for token in tokens:

if token in string.punctuation:

# Do something

接下来,我们将专注于删除停用词。停用词是语言中的常用词,如“I”、“a”和“the”,在分析文本时对文本的意义不大。因此,我们将从分析中删除停用词。首先,stopwords从 NLTK 下载器下载资源:

nltk.download(‘stopwords’)

stopwords下载完成后,导入nltk.corpus并使用.words()以“english”为参数的方法。这是英语中 179 个停用词的列表:

from nltk.corpus import stopwords

stop_words = stopwords.words(‘english’)

我们可以将词形还原示例与本节中讨论的概念结合起来创建以下函数clean_data()。此外,在比较一个词是否是停用词列表的一部分之前,我们将其转换为小写。这样,如果停用词出现在句子的开头并且大写,我们仍然会捕获它:

def clean_data(tokens, stop_words = ()):

cleaned_tokens = []

for token, tag in pos_tag(tokens):

if tag.startswith(“NN”):

pos = ‘n’

elif tag.startswith(‘VB’):

pos = ‘v’

else:

pos = ‘a’

lemmatizer = WordNetLemmatizer()

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值