我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python中的自然语言处理入门

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python中的自然语言处理入门

[[434759]]

让我们开始吧!

先决条件

在本教程中,我们将使用 Python 的nltk库对文本执行所有 NLP 操作。在撰写本教程时,我们使用的是 3.4 版的nltk. 要安装库,您可以pip在终端上使用命令:

 

  1. pip install nltk==3.4 

要检查系统中的版本nltk,您可以将库导入 Python 解释器并检查版本:

 

  1. import nltk  
  2. print(nltk.__version__) 

 

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

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

  1. python -m nltk.downloader all 

第 1 步:转换为代币

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

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

 

  1. nltk.download('punkt'

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

 

  1. from nltk.tokenize import word_tokenize 
  2. print(word_tokenize("Hi, this is a nice hotel.")) 

 

代码的输出如下:

 

  1. ['Hi'',''this''is''a''nice''hotel''.'

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

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

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

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

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

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

 

  1. from nltk.stem.porter import PorterStemmer  
  2. stemmer = PorterStemmer() 
  3. print(stemmer.stem("going")) 

 

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

例如,当您在单词“constitutes”上尝试词干分析时,它给出了一个不直观的结果:

 

  1. print(stemmer.stem("constitutes")) 

你会注意到输出是“constitut”。

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

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

 

  1. nltk.download('wordnet'

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

 

  1. from nltk.stem.wordnet import WordNetLemmatizer  
  2. lem = WordNetLemmatizer() 

 

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

 

  1. print(lem.lemmatize('constitutes''v')) 

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

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

averaged_perceptron_tagger通过 NLTK 下载器下载资源:

 

  1. nltk.download('averaged_perceptron_tagger'

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

 

  1. from nltk.tag import pos_tag 
  2. sample = "Hi, this is a nice hotel." 
  3. print(pos_tag(word_tokenize(sample))) 

 

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

 

  1. [('Hi''NNP'), 
  2. (','','), 
  3. ('this''DT'), 
  4. ('is''VBZ'), 
  5. ('a''DT'), 
  6. ('nice''JJ'), 
  7. ('hotel''NN'), 
  8. ('.''.')] 

 

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

 

  1. def lemmatize_tokens(stentence): 
  2.   lemmatizer = WordNetLemmatizer() 
  3.   lemmatized_tokens = [] 
  4.   for word, tag in pos_tag(stentence): 
  5.     if tag.startswith('NN'): 
  6.       pos = 'n' 
  7.     elif tag.startswith('VB'): 
  8.       pos = 'v' 
  9.     else
  10.       pos = 'a' 
  11.     lemmatized_tokens.append(lemmatizer.lemmatize(word, pos)) 
  12.   return lemmatized_tokens 
  13.  
  14. sample = "Legal authority constitutes all magistrates." 
  15. print(lemmatize_tokens(word_tokenize(sample))) 

 

上面代码的输出如下:

 

  1. ['Legal''authority''constitute''all''magistrate''.'

此输出是预期的,其中“constitutes”和“magistrates”已分别转换为“constitute”和“magistrate”。

第 3 步:数据清理

准备数据的下一步是清理数据并删除任何对您的分析没有意义的内容。从广义上讲,我们将考虑从您的分析中删除标点符号和停用词。

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

 

  1. import string 
  2. print(string.punctuation) 

 

此代码片段的输出如下:

 

  1. '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' 

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

 

  1. for token in tokens: 
  2.   if token in string.punctuation: 
  3.     # Do something 

 

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

 

  1. nltk.download('stopwords'

一旦下载完成后,进口stopwords从nltk.corpus和使用.words()方法与“英语”作为参数。这是一个包含 179 个英语停用词的列表:

 

  1. from nltk.corpus import stopwords 
  2. stop_words = stopwords.words('english'

 

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

 

  1. def clean_data(tokens, stop_words = ()): 
  2.  
  3.   cleaned_tokens = [] 
  4.  
  5.   for token, tag in pos_tag(tokens): 
  6.     if tag.startswith("NN"): 
  7.       pos = 'n' 
  8.     elif tag.startswith('VB'): 
  9.       pos = 'v' 
  10.     else
  11.       pos = 'a' 
  12.  
  13.     lemmatizer = WordNetLemmatizer() 
  14.     token = lemmatizer.lemmatize(token, pos) 
  15.  
  16.     if token not in string.punctuation and token.lower() not in stop_words: 
  17.       cleaned_tokens.append(token) 
  18.   return cleaned_tokens 
  19.  
  20. sample = "The quick brown fox jumps over the lazy dog." 
  21. stop_words = stopwords.words('english'
  22.  
  23. clean_data(word_tokenize(sample), stop_words) 

 

该示例的输出如下:

 

  1. ['quick''brown''fox''jump''lazy''dog'

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

词频分布

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

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

 

  1. tokens = word_tokenize(text) 
  2. cleaned_tokens = clean_data(tokens, stop_words = stop_words) 

 

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

 

  1. from nltk import FreqDist 
  2.  
  3. freq_dist = FreqDist(cleaned_tokens) 
  4. freq_dist.most_common(10) 

 

以下是这个童话故事中最常见的十个术语:

 

  1. [('bird', 15), 
  2. ('sausage', 11), 
  3. ('mouse', 8), 
  4. ('wood', 7), 
  5. ('time', 6), 
  6. ('long', 5), 
  7. ('make', 5), 
  8. ('fly', 4), 
  9. ('fetch', 4), 
  10. ('water', 4)] 

 

不出所料,三个最常见的词是童话故事中的三个主要人物。

在分析文本时,单词的频率可能不是很重要。通常,NLP 的下一步是生成一个统计数据——TF-IDF(词频——逆文档频率)——它表示一个单词在文档列表中的重要性。

结论

在本教程中,我们首先了解了 Python 中的自然语言处理。我们将文本转换为标记,将单词转换为它们的基本形式,最后,清理文本以删除任何对分析没有意义的部分。

尽管我们在本教程中研究了简单的 NLP 任务,但还有更多技术需要探索。例如,我们可能想要对文本数据执行主题建模,其目标是找到文本可能正在谈论的共同主题。NLP 中更复杂的任务是实现情感分析模型,以确定任何文本背后的感觉。

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python中的自然语言处理入门

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中的自然语言处理入门

今天生成的数据中有很大一部分是非结构化的。非结构化数据包括社交媒体评论、浏览历史记录和客户反馈。您是否发现自己处于需要分析大量文本数据的情况,却不知道如何继续?Python 中的自然语言处理可以提供帮助。

NLP入门系列之自然语言处理

本章为自然语言处理提供了一个高层次的介绍。解释了自然语言处理是什么,最常见的自然语言处理应用是哪些以及开发自然语言处理应用程序的基本方法是什么。
Python2024-12-03

【Python NLTK】教程:轻松入门,玩转自然语言处理

Python NLTK是一款功能强大的自然语言处理工具包,其简便易用的特性使其成为初学者的理想选择。本文将介绍NLTK的基本使用,并通过演示代码让您快速掌握自然语言处理的技巧。
【Python NLTK】教程:轻松入门,玩转自然语言处理
2024-02-24

自然语言处理(一):词嵌入

词嵌入 词嵌入(Word Embedding)是自然语言处理(NLP)中的一种技术,用于将文本中的单词映射到一个低维向量空间中。它是将文本中的单词表示为实数值向量的一种方式。 在传统的文本处理中,通常使用独热编码(One-Hot Encod
2023-08-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录