Python 自然语言处理入门

首先,您需要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()

token = lemmatizer.lemmatize(token, pos)

if token not in string.punctuation and token.lower() not in stop_words:

cleaned_tokens.append(token)

return cleaned_tokens

sample = “The quick brown fox jumps over the lazy dog.”

stop_words = stopwords.words(‘english’)

clean_data(word_tokenize(sample), stop_words)

该示例的输出如下:

[‘quick’, ‘brown’, ‘fox’, ‘jump’, ‘lazy’, ‘dog’]

如您所见,标点符号和停用词已被删除。

词频分布


现在你已经熟悉了 NLP 中的基本清洗技术,让我们试着找出文本中单词的频率。在本练习中,我们将使用古腾堡上免费提供的童话故事_《老鼠、鸟和香肠》的文本。_我们将把这个童话故事的文本存储在一个字符串中,text.

首先,我们使用上面定义的函数进行标记text然后清理它:clean_data

tokens = word_tokenize(text)

cleaned_tokens = clean_data(tokens, stop_words = stop_words)

要查找文本中单词的频率分布,可以使用FreqDistNLTK 类。使用标记作为参数初始化类。然后使用该.most_common()方法找到常见的术语。让我们尝试找出这种情况下的前十项:

文末有福利领取哦~

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

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

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

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

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

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

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

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

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

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

  • 26
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值