使用nltk停止词词干词特征情感分析标记器下载ordet语料库,corporawordnetnotfoundleaseusethe博客

[Errno 61] connection refused.

在python命令行下执行如下命令

出现如下表示安装成功

另外:

LookupError:

**********************************************************************

Resource u'corpora/wordnet' not found. Please use the NLTK

解决方法:

出现下面的图形界面:

一、前言

二、NLTK模块

三、使用 NLTK 分析单词和句子

python进行自然语言处理,有一些第三方库供大家使用:

语言处理任务

NLTK模块

功能描述

获取和处理语料库

语料库和词典的标准化接口

字符串处理

分词,句子分解提取主干

搭配发现

t-检验,卡方,点互信息PMI

词性标识符

n-gram, backoff, Brill, HMM, TnT

分类

决策树,最大熵,贝叶斯,EM,k-means

分块

正则表达式,n-gram,命名实体

解析

图表,基于特征,一致性,概率,依赖

语义解释

λ演算,一阶逻辑,模型检验

指标评测

精度,召回率,协议系数

概率与估计

频率分布,平滑概率分布

应用

图形化的关键词排序,分析器,WordNet查看器,聊天机器人

语言学领域的工作

处理SIL工具箱格式的数据

三、使用 NLTK 分析单词和句子

NLTK 模块是一个巨大的工具包,目的是在整个自然语言处理(NLP)方法上帮助您。 NLTK 将为您提供一切,从将段落拆分为句子,拆分词语,识别这些词语的词性,高亮主题,甚至帮助您的机器了解文本关于什么。在这个系列中,我们将要解决意见挖掘或情感分析的领域。

在我们学习如何使用 NLTK 进行情感分析的过程中,我们将学习以下内容:

为了开始,你需要 NLTK 模块,以及 Python。

接下来,您需要 NLTK 3。安装 NLTK 模块的最简单方法是使用​​pip​​。

接下来,我们需要为 NLTK 安装一些组件。通过你的任何常用方式打开 python,然后键入:

除非你正在操作无头版本,否则一个 GUI 会弹出来,可能只有红色而不是绿色:

为所有软件包选择下载“全部”,然后单击“下载”。 这会给你所有分词器,分块器,其他算法和所有的语料库。 如果空间是个问题,您可以选择手动选择性下载所有内容。 NLTK 模块将占用大约 7MB,整个​​nltk_data​​目录将占用大约 1.8GB,其中包括您的分块器,解析器和语料库。

如果您正在使用 VPS 运行无头版本,您可以通过运行 Python ,并执行以下操作来安装所有内容:

这将为你下载一切东西。

现在你已经拥有了所有你需要的东西,让我们敲一些简单的词汇:

这些是在进入自然语言处理(NLP)领域时,最常听到的词语,但是我们将及时涵盖更多的词汇。以此,我们来展示一个例子,说明如何用 NLTK 模块将某些东西拆分为标记。

起初,你可能会认为按照词或句子来分词,是一件相当微不足道的事情。 对于很多句子来说,它可能是。 第一步可能是执行一个简单的​​.split('. ')​​,或按照句号,然后是空格分割。 之后也许你会引入一些正则表达式,来按照句号,空格,然后是大写字母分割。 问题是像​​Mr. Smith​​这样的事情,还有很多其他的事情会给你带来麻烦。 按照词分割也是一个挑战,特别是在考虑缩写的时候,例如​​we​​和​​we're​​。 NLTK 用这个看起来简单但非常复杂的操作为您节省大量的时间。

上面的代码会输出句子,分成一个句子列表,你可以用​​for​​循环来遍历。

所以这里,我们创建了标记,它们都是句子。让我们这次按照词来分词。

这里有几件事要注意。 首先,注意标点符号被视为一个单独的标记。 另外,注意单词​​shouldn't​​分隔为​​should​​和​​n't​​。 最后要注意的是,​​pinkish-blue​​确实被当作“一个词”来对待,本来就是这样。很酷!

现在,看着这些分词后的单词,我们必须开始思考我们的下一步可能是什么。 我们开始思考如何通过观察这些词汇来获得含义。 我们可以想清楚,如何把价值放在许多单词上,但我们也看到一些基本上毫无价值的单词。 这是一种“停止词”的形式,我们也可以处理。 这就是我们将在下一个教程中讨论的内容。

自然语言处理的思想,是进行某种形式的分析或处理,机器至少可以在某种程度上理解文本的含义,表述或暗示。

这显然是一个巨大的挑战,但是有一些任何人都能遵循的步骤。然而,主要思想是电脑根本不会直接理解单词。令人震惊的是,人类也不会。在人类中,记忆被分解成大脑中的电信号,以发射模式的神经组的形式。对于大脑还有很多未知的事情,但是我们越是把人脑分解成基本的元素,我们就会发现基本的元素。那么,事实证明,计算机以非常相似的方式存储信息!如果我们要模仿人类如何阅读和理解文本,我们需要一种尽可能接近的方法。一般来说,计算机使用数字来表示一切事物,但是我们经常直接在编程中看到使用二进制信号(​​True​​或​​False​​,可以直接转换为 1 或 0,直接来源于电信号存在​​(True, 1)​​或不存在​​(False, 0)​​)。为此,我们需要一种方法,将单词转换为数值或信号模式。将数据转换成计算机可以理解的东西,这个过程称为“预处理”。预处理的主要形式之一就是过滤掉无用的数据。在自然语言处理中,无用词(数据)被称为停止词。

我们可以立即认识到,有些词语比其他词语更有意义。我们也可以看到,有些单词是无用的,是填充词。例如,我们在英语中使用它们来填充句子,这样就没有那么奇怪的声音了。一个最常见的,非官方的,无用词的例子是单词​​umm​​。人们经常用​​umm​​来填充,比别的词多一些。这个词毫无意义,除非我们正在寻找一个可能缺乏自信,困惑,或者说没有太多话的人。我们都这样做,有...呃...很多时候,你可以在视频中听到我说​​umm​​或​​uhh​​。对于大多数分析而言,这些词是无用的。

我们不希望这些词占用我们数据库的空间,或占用宝贵的处理时间。因此,我们称这些词为“无用词”,因为它们是无用的,我们希望对它们不做处理。 “停止词”这个词的另一个版本可以更书面一些:我们停在上面的单词。

例如,如果您发现通常用于讽刺的词语,可能希望立即停止。讽刺的单词或短语将因词库和语料库而异。就目前而言,我们将把停止词当作不含任何含义的词,我们要把它们删除。

您可以轻松地实现它,通过存储您认为是停止词的单词列表。 NLTK 用一堆他们认为是停止词的单词,来让你起步,你可以通过 NLTK 语料库来访问它:

这里是这个列表:

以下是结合使用​​stop_words​​集合,从文本中删除停止词的方法:

我们的输出是:

我们的数据库感谢了我们。数据预处理的另一种形式是“词干提取(Stemming)”,这就是我们接下来要讨论的内容。

词干的概念是一种规范化方法。 除涉及时态之外,许多词语的变体都具有相同的含义。

考虑:

这两句话意味着同样的事情。 ​​in the car​​(在车上)是一样的。 ​​I​​(我)是一样的。 在这两种情况下,​​ing​​都明确表示过去式,所以在试图弄清这个过去式活动的含义的情况下,是否真的有必要区分​​riding​​和​​taking a ride​​?

不,并没有。

这只是一个小例子,但想象英语中的每个单词,可以放在单词上的每个可能的时态和词缀。 每个版本有单独的字典条目,将非常冗余和低效,特别是因为一旦我们转换为数字,“价值”将是相同的。

最流行的瓷感提取算法之一是 Porter,1979 年就存在了。

首先,我们要抓取并定义我们的词干:

现在让我们选择一些带有相似词干的单词,例如:

下面,我们可以这样做来轻易提取词干:

我们的输出:

现在让我们尝试对一个典型的句子,而不是一些单词提取词干:

现在我们的结果为:

接下来,我们将讨论 NLTK 模块中一些更高级的内容,词性标注,其中我们可以使用 NLTK 模块来识别句子中每个单词的词性。

NLTK模块的一个更强大的方面是,它可以为你做词性标注。 意思是把一个句子中的单词标注为名词,形容词,动词等。 更令人印象深刻的是,它也可以按照时态来标记,以及其他。 这是一列标签,它们的含义和一些例子:

我们如何使用这个? 当我们处理它的时候,我们要讲解一个新的句子标记器,叫做​​PunktSentenceTokenizer​​。 这个标记器能够无监督地进行机器学习,所以你可以在你使用的任何文本上进行实际的训练。 首先,让我们获取一些我们打算使用的导入:

现在让我们创建训练和测试数据:

一个是 2005 年以来的国情咨文演说,另一个是 2006 年以来的乔治·W·布什总统的演讲。

接下来,我们可以训练 Punkt 标记器,如下所示:

之后我们可以实际分词,使用:

现在我们可以通过创建一个函数,来完成这个词性标注脚本,该函数将遍历并标记每个句子的词性,如下所示:

输出应该是元组列表,元组中的第一个元素是单词,第二个元素是词性标签。 它应该看起来像:

到了这里,我们可以开始获得含义,但是还有一些工作要做。 我们将要讨论的下一个话题是分块(chunking),其中我们跟句单词的词性,将单词分到,有意义的分组中。

现在我们知道了词性,我们可以注意所谓的分块,把词汇分成有意义的块。 分块的主要目标之一是将所谓的“名词短语”分组。 这些是包含一个名词的一个或多个单词的短语,可能是一些描述性词语,也可能是一个动词,也可能是一个副词。 这个想法是把名词和与它们有关的词组合在一起。

为了分块,我们将词性标签与正则表达式结合起来。 主要从正则表达式中,我们要利用这些东西:

如果您需要正则表达式的帮助,请参阅上面链接的教程。 最后需要注意的是,词性标签中用​​<​​和​​>​​表示,我们也可以在标签本身中放置正则表达式,来表达“全部名词”(​​<N.*>​​)。

结果是这样的:

这里的主要一行是:

把这一行拆分开:

​​  <RB.?>*​​:零个或多个任何时态的副词,后面是:

​​  <VB.?>*​​:零个或多个任何时态的动词,后面是:

​​  <NNP>+​​:一个或多个合理的名词,后面是:

​​  <NN>?​​:零个或一个名词单数。

尝试玩转组合来对各种实例进行分组,直到您觉得熟悉了。

视频中没有涉及,但是也有个合理的任务是实际访问具体的块。 这是很少被提及的,但根据你在做的事情,这可能是一个重要的步骤。 假设你把块打印出来,你会看到如下输出:

现在,我们执行过滤,来显示标签为“块”的子树。 请记住,这不是 NLTK 块属性中的“块”...这是字面上的“块”,因为这是我们给它的标签:​​chunkGram = r"""Chunk: {<RB.?>*<VB.?>*<NNP>+<NN>?}"""​​。

如果我们写了一些东西,类似​​chunkGram = r"""Pythons: {<RB.?>*<VB.?>*<NNP>+<NN>?}"""​​,那么我们可以通过​​"Pythons."​​标签来过滤。 结果应该是这样的:

完整的代码是:

你可能会发现,经过大量的分块之后,你的块中还有一些你不想要的单词,但是你不知道如何通过分块来摆脱它们。 你可能会发现添加缝隙是你的解决方案。

添加缝隙与分块很像,它基本上是一种从块中删除块的方法。 你从块中删除的块就是你的缝隙。

代码非常相似,你只需要用​​}{​​来代码缝隙,在块后面,而不是块的​​{}​​。

使用它,你得到了一些东西:

现在,主要的区别是:

这意味着我们要从缝隙中删除一个或多个动词,介词,限定词或​​to​​这个词。

现在我们已经学会了,如何执行一些自定义的分块和添加缝隙,我们来讨论一下 NLTK 自带的分块形式,这就是命名实体识别。

自然语言处理中最主要的分块形式之一被称为“命名实体识别”。 这个想法是让机器立即能够拉出“实体”,例如人物,地点,事物,位置,货币等等。

这可能是一个挑战,但 NLTK 是为我们内置了它。 NLTK 的命名实体识别有两个主要选项:识别所有命名实体,或将命名实体识别为它们各自的类型,如人物,地点,位置等。

这是一个例子:

在这里,选择​​binary = True​​,这意味着一个东西要么是命名实体,要么不是。 将不会有进一步的细节。 结果是:

如果你设置了​​binary = False​​,结果为:

你可以马上看到一些事情。 当​​binary​​是假的时候,它也选取了同样的东西,但是把​​White House​​这样的术语分解成​​White​​和​​House​​,就好像它们是不同的,而我们可以在​​binary = True​​的选项中看到,命名实体的识别 说​​White House​​是相同命名实体的一部分,这是正确的。

根据你的目标,你可以使用​​binary​​选项。 如果您的​​binary​​为​​false​​,这里是你可以得到的,命名实体的类型:

无论哪种方式,你可能会发现,你需要做更多的工作才能做到恰到好处,但是这个功能非常强大。

在接下来的教程中,我们将讨论类似于词干提取的东西,叫做“词形还原”(lemmatizing)。

与词干提权非常类似的操作称为词形还原。 这两者之间的主要区别是,你之前看到了,词干提权经常可能创造出不存在的词汇,而词形是实际的词汇。

所以,你的词干,也就是你最终得到的词,不是你可以在字典中查找的东西,但你可以查找一个词形。

有时你最后会得到非常相似的词语,但有时候,你会得到完全不同的词语。 我们来看一些例子。

在这里,我们有一些我们使用的词的词形的例子。 唯一要注意的是,​​lemmatize​​接受词性参数​​pos​​。 如果没有提供,默认是“名词”。 这意味着,它将尝试找到最接近的名词,这可能会给你造成麻烦。 如果你使用词形还原,请记住!

在接下来的教程中,我们将深入模块附带的 NTLK 语料库,查看所有优秀文档,他们在那里等待着我们。

NLTK 语料库中的几乎所有文件都遵循相同的规则,通过使用 NLTK 模块来访问它们,但是它们没什么神奇的。 这些文件大部分都是纯文本文件,其中一些是 XML 文件,另一些是其他格式文件,但都可以通过手动或模块和 Python 访问。 让我们来谈谈手动查看它们。根据您的安装,您的​​nltk_data​​目录可能隐藏在多个位置。 为了找出它的位置,请转到您的 Python 目录,也就是 NLTK 模块所在的位置。 如果您不知道在哪里,请使用以下代码:

代码的重要部分是:

在那里,你可以看到​​nltk_data​​的各种可能的目录。 如果你在 Windows 上,它很可能是在你的​​appdata​​中,在本地目录中。 为此,你需要打开你的文件浏览器,到顶部,然后输入​​%appdata%​​。

接下来点击​​roaming​​,然后找到​​nltk_data​​目录。 在那里,你将找到你的语料库文件。 完整的路径是这样的:

现在,我们将讨论通过 NLTK 访问这些文档。 正如你所看到的,这些主要是文本文档,所以你可以使用普通的 Python 代码来打开和阅读文档。 也就是说,NLTK 模块有一些很好的处理语料库的方法,所以你可能会发现使用他们的方法是实用的。 下面是我们打开“古腾堡圣经”,并阅读前几行的例子:

其中一个更高级的数据集是​​wordnet​​。 Wordnet 是一个单词,定义,他们使用的例子,同义词,反义词,等等的集合。 接下来我们将深入使用 wordnet。

WordNet 是英语的词汇数据库,由普林斯顿创建,是 NLTK 语料库的一部分。

您可以一起使用 WordNet 和 NLTK 模块来查找单词含义,同义词,反义词等。 我们来介绍一些例子。

首先,你将需要导入​​wordnet​​:

之后我们打算使用单词​​program​​来寻找同义词:

一个同义词的例子:

只是单词:

第一个同义词的定义:

单词的使用示例:

接下来,我们如何辨别一个词的同义词和反义词? 这些词形是同义词,然后你可以使用​​.antonyms​​找到词形的反义词。 因此,我们可以填充一些列表,如:

你可以看到,我们的同义词比反义词更多,因为我们只是查找了第一个词形的反义词,但是你可以很容易地平衡这个,通过也为​​bad​​这个词执行完全相同的过程。

接下来,我们还可以很容易地使用 WordNet 来比较两个词的相似性和他们的时态,把 Wu 和 Palmer 方法结合起来用于语义相关性。

我们来比较名词​​ship​​和​​boat​​:

接下来,我们将讨论一些问题并开始讨论文本分类的主题。

现在我们熟悉 NLTK 了,我们来尝试处理文本分类。 文本分类的目标可能相当宽泛。 也许我们试图将文本分类为政治或军事。 也许我们试图按照作者的性别来分类。 一个相当受欢迎的文本分类任务是,将文本的正文识别为垃圾邮件或非垃圾邮件,例如电子邮件过滤器。 在我们的例子中,我们将尝试创建一个情感分析算法。

为此,我们首先尝试使用属于 NLTK 语料库的电影评论数据库。 从那里,我们将尝试使用词汇作为“特征”,这是“正面”或“负面”电影评论的一部分。 NLTK 语料库​​movie_reviews​​数据集拥有评论,他们被标记为正面或负面。 这意味着我们可以训练和测试这些数据。 首先,让我们来预处理我们的数据。

导入我们想要的数据集后,您会看到:

基本上,用简单的英文,上面的代码被翻译成:在每个类别(我们有正向和独享),选取所有的文件 ID(每个评论有自己的 ID),然后对文件 ID存储​​word_tokenized​​版本(单词列表),后面是一个大列表中的正面或负面标签。

接下来,我们用​​random​​来打乱我们的文件。这是因为我们将要进行训练和测试。如果我们把他们按序排列,我们可能会训练所有的负面评论,和一些正面评论,然后在所有正面评论上测试。我们不想这样,所以我们打乱了数据。

然后,为了你能看到你正在使用的数据,我们打印出​​documents[1]​​,这是一个大列表,其中第一个元素是一列单词,第二个元素是​​pos​​或​​neg​​标签。

接下来,我们要收集我们找到的所有单词,所以我们可以有一个巨大的典型单词列表。从这里,我们可以执行一个频率分布,然后找出最常见的单词。正如你所看到的,最受欢迎的“词语”其实就是标点符号,​​the​​,​​a​​等等,但是很快我们就会得到有效词汇。我们打算存储几千个最流行的单词,所以这不应该是一个问题。

以上给出了15个最常用的单词。 你也可以通过下面的步骤找出一个单词的出现次数:

最初,我们的代码:

几乎和以前一样,只是现在有一个新的变量,​​word_features​​,它包含了前 3000 个最常用的单词。 接下来,我们将建立一个简单的函数,在我们的正面和负面的文档中找到这些前 3000 个单词,将他们的存在标记为是或否:

下面,我们可以打印出特征集:

之后我们可以为我们所有的文档做这件事情,通过做下列事情,保存特征存在性布尔值,以及它们各自的正面或负面的类别:

真棒,现在我们有了特征和标签,接下来是什么? 通常,下一步是继续并训练算法,然后对其进行测试。 所以,让我们继续这样做,从下一个教程中的朴素贝叶斯分类器开始!

现在是时候选择一个算法,将我们的数据分成训练和测试集,然后启动!我们首先要使用的算法是朴素贝叶斯分类器。这是一个非常受欢迎的文本分类算法,所以我们只能先试一试。然而,在我们可以训练和测试我们的算法之前,我们需要先把数据分解成训练集和测试集。

你可以训练和测试同一个数据集,但是这会给你带来一些严重的偏差问题,所以你不应该训练和测试完全相同的数据。为此,由于我们已经打乱了数据集,因此我们将首先将包含正面和负面评论的 1900 个乱序评论作为训练集。然后,我们可以在最后的 100 个上测试,看看我们有多准确。

这被称为监督机器学习,因为我们正在向机器展示数据,并告诉它“这个数据是正面的”,或者“这个数据是负面的”。然后,在完成训练之后,我们向机器展示一些新的数据,并根据我们之前教过计算机的内容询问计算机,计算机认为新数据的类别是什么。

我们可以用以下方式分割数据:

下面,我们可以定义并训练我们的分类器:

首先,我们只是简单调用朴素贝叶斯分类器,然后在一行中使用​​.train()​​进行训练。

足够简单,现在它得到了训练。 接下来,我们可以测试它:

砰,你得到了你的答案。 如果你错过了,我们可以“测试”数据的原因是,我们仍然有正确的答案。 因此,在测试中,我们向计算机展示数据,而不提供正确的答案。 如果它正确猜测我们所知的答案,那么计算机是正确的。 考虑到我们所做的打乱,你和我可能准确度不同,但你应该看到准确度平均为 60-75%。

这对于每个人都不一样,但是你应该看到这样的东西:

这个告诉你的是,每一个词的负面到正面的出现几率,或相反。 因此,在这里,我们可以看到,负面评论中的​​insulting​​一词比正面评论多出现 10.6 倍。​​Ludicrous​​是 10.1。

现在,让我们假设,你完全满意你的结果,你想要继续,也许使用这个分类器来预测现在的事情。 训练分类器,并且每当你需要使用分类器时,都要重新训练,是非常不切实际的。 因此,您可以使用​​pickle​​模块保存分类器。 我们接下来做。

训练分类器和机器学习算法可能需要很长时间,特别是如果您在更大的数据集上训练。 我们的其实很小。 你可以想象,每次你想开始使用分类器的时候,都要训练分类器吗? 这么恐怖! 相反,我们可以使用​​pickle​​模块,并序列化我们的分类器对象,这样我们所需要做的就是简单加载该文件。

那么,我们该怎么做呢? 第一步是保存对象。 为此,首先需要在脚本的顶部导入​​pickle​​,然后在使用​​.train()​​分类器进行训练后,可以调用以下几行:

之后,我们按照我们的要求关闭文件,这就是说,我们现在在脚本的目录中保存了一个​​pickle​​或序列化的对象!

接下来,我们如何开始使用这个分类器? ​​.pickle​​文件是序列化的对象,我们现在需要做的就是将其读入内存,这与读取任何其他普通文件一样简单。 这样做:

现在,我们可以使用这个对象,每当我们想用它来分类时,我们不再需要训练我们的分类器。

虽然这一切都很好,但是我们可能不太满意我们所获得的 60-75% 的准确度。 其他分类器呢? 其实,有很多分类器,但我们需要 scikit-learn(sklearn)模块。 幸运的是,NLTK 的员工认识到将 sklearn 模块纳入 NLTK 的价值,他们为我们构建了一个小 API。 这就是我们将在下一个教程中做的事情。

现在我们已经看到,使用分类器是多么容易,现在我们想尝试更多东西! Python 的最好的模块是 Scikit-learn(sklearn)模块。

如果您想了解 Scikit-learn 模块的更多信息,我有一些关于 Scikit-Learn 机器学习的教程。

幸运的是,对于我们来说,NLTK 背后的人们更看重将 sklearn 模块纳入NLTK分类器方法的价值。 就这样,他们创建了各种​​SklearnClassifier​​ API。 要使用它,你只需要像下面这样导入它:

从这里开始,你可以使用任何​​sklearn​​分类器。 例如,让我们引入更多的朴素贝叶斯算法的变体:

之后,如何使用它们?结果是,这非常简单。

就是这么简单。让我们引入更多东西:

现在,我们所有分类器应该是这样:

运行它的结果应该是这样:

所以,我们可以看到,SVC 的错误比正确更常见,所以我们可能应该丢弃它。 但是呢? 接下来我们可以尝试一次使用所有这些算法。 一个算法的算法! 为此,我们可以创建另一个分类器,并根据其他算法的结果来生成分类器的结果。 有点像投票系统,所以我们只需要奇数数量的算法。 这就是我们将在下一个教程中讨论的内容。

现在我们知道如何使用一堆算法分类器,就像糖果岛上的一个孩子,告诉他们只能选择一个,我们可能会发现很难只选择一个分类器。 好消息是,你不必这样! 组合分类器算法是一种常用的技术,通过创建一种投票系统来实现,每个算法拥有一票,选择得票最多分类。

为此,我们希望我们的新分类器的工作方式像典型的 NLTK 分类器,并拥有所有方法。 很简单,使用面向对象编程,我们可以确保从 NLTK 分类器类继承。 为此,我们将导入它:

我们也导入​​mode​​(众数),因为这将是我们选择最大计数的方法。

现在,我们来建立我们的分类器类:

我们把我们的类叫做​​VoteClassifier​​,我们继承了 NLTK 的​​ClassifierI​​。 接下来,我们将传递给我们的类的分类器列表赋给​​self._classifiers​​。

接下来,我们要继续创建我们自己的分类方法。 我们打算把它称为​​.classify​​,以便我们可以稍后调用​​.classify​​,就像传统的 NLTK 分类器那样。

很简单,我们在这里所做的就是,遍历我们的分类器对象列表。 然后,对于每一个,我们要求它基于特征分类。 分类被视为投票。 遍历完成后,我们返回​​mode(votes)​​,这只是返回投票的众数。

这是我们真正需要的,但是我认为另一个参数,置信度是有用的。 由于我们有了投票算法,所以我们也可以统计支持和反对票数,并称之为“置信度”。 例如,3/5 票的置信度弱于 5/5 票。 因此,我们可以从字面上返回投票比例,作为一种置信度指标。 这是我们的置信度方法:

现在,让我们把东西放到一起:

所以到了最后,我们对文本运行一些分类器示例。我们所有输出:

我们将讨论一些问题。最主要的问题是我们有一个相当有偏差的算法。你可以通过注释掉文档的打乱,然后使用前 1900 个进行训练,并留下最后的 100 个(所有正面)评论来测试它。测试它,你会发现你的准确性很差。

相反,你可以使用前 100 个数据进行测试,所有的数据都是负面的,并且使用后 1900 个训练。在这里你会发现准确度非常高。这是一个不好的迹象。这可能意味着很多东西,我们有很多选择来解决它。

也就是说,我们所考虑的项目建议我们继续,并使用不同的数据集,所以我们会这样做。最后,我们会发现这个新的数据集仍然存在一些偏差,那就是它更经常选择负面的东西。原因是负面评论的负面往往比正面评论的正面程度更大。这个可以用一些简单的加权来完成,但是它也可以变得很复杂。也许是另一天的教程。现在,我们要抓取一个新的数据集,我们将在下一个教程中讨论这个数据集。

所以现在是时候在新的数据集上训练了。 我们的目标是分析 Twitter 的情绪,所以我们希望数据集的每个正面和负面语句都有点短。 恰好我有 5300+ 个正面和 5300 + 个负面电影评论,这是短得多的数据集。 我们应该能从更大的训练集中获得更多的准确性,并且把 Twitter 的推文拟合得更好。

现在,我们可以像以前一样建立新的数据集。 需要改变什么呢?

我们需要一种新的方法来创建我们的“文档”变量,然后我们还需要一种新的方法来创建​​all_words​​变量。 真的没问题,我是这么做的:

接下来,我们还需要调整我们的特征查找功能,主要是按照文档中的单词进行标记,因为我们的新样本没有漂亮的​​.words()​​特征。 我继续并增加了最常见的词语:

除此之外,其余的都是一样的。 这是完整的脚本,以防万一你或我错过了一些东西:

这个过程需要一段时间..你可能想要干些别的。 我花了大约 30-40 分钟来全部运行完成,而我在 i7 3930k 上运行它。 在我写这篇文章的时候(2015),一般处理器可能需要几个小时。 不过这是一次性的过程。

输出:

是的,我敢打赌你花了一段时间,所以,在下一个教程中,我们将谈论​​pickle​​所有东西!

有了这个新的数据集和新的分类器,我们可以继续前进。 你可能已经注意到的,这个新的数据集需要更长的时间来训练,因为它是一个更大的集合。 我已经向你显示,通过​​pickel​​或序列化训练出来的分类器,我们实际上可以节省大量的时间,这些分类器只是对象。

我已经向你证明了如何使用​​pickel​​来实现它,所以我鼓励你尝试自己做。 如果你需要帮助,我会粘贴完整的代码...但要注意,自己动手!

所以在这里,除了最终的函数外,其实并没有什么新东西,这很简单。 这个函数是我们从这里开始与之交互的关键。 这个我们称之为“情感”的函数带有一个参数,即文本。 在这里,我们用我们早已创建的​​find_features​​函数,来分解这些特征。 现在我们所要做的就是,使用我们的投票分类器返回分类,以及返回分类的置信度。

有了这个,我们现在可以将这个文件,以及情感函数用作一个模块。 以下是使用该模块的示例脚本:

正如预期的那样,带有​​python​​的电影的评论显然很好,没有任何​​python​​的电影是垃圾。 这两个都有 100% 的置信度。

我花了大约 5 秒钟的时间导入模块,因为我们保存了分类器,没有保存的话可能要花 30 分钟。 多亏了​​pickle​​ 你的时间会有很大的不同,取决于你的处理器。如果你继续下去,我会说你可能也想看看​​joblib​​。

现在我们有了这个很棒的模块,它很容易就能工作,我们可以做什么? 我建议我们去 Twitter 上进行实时情感分析!

现在我们有一个情感分析模块,我们可以将它应用于任何文本,但最好是短小的文本,比如 Twitter! 为此,我们将把本教程与 Twitter 流式 API 教程结合起来。

该教程的初始代码是:

既然我们有了一条推文,我们可以轻易将其传入我们的​​sentiment_mod​​模块。

接下来,什么没有图表的数据分析是完整的? 让我们再结合另一个教程,从 Twitter API 上的情感分析绘制实时流式图。

现在我们已经从 Twitter 流媒体 API 获得了实时数据,为什么没有显示情绪趋势的活动图呢? 为此,我们将结合本教程和 matplotlib 绘图教程。

如果您想了解代码工作原理的更多信息,请参阅该教程。 否则:

斯坦福 NER 标记器提供了 NLTK 的命名实体识别(NER)分类器的替代方案。这个标记器在很大程度上被看作是命名实体识别的标准,但是由于它使用了先进的统计学习算法,它的计算开销比 NLTK 提供的选项更大。

斯坦福 NER 标记器的一大优势是,为我们提供了几种不同的模型来提取命名实体。我们可以使用以下任何一个:

传递给​​StanfordNERTagger​​类的参数包括:

以下是我们设置它来使用三类模型标记句子的方式:

一旦我们按照单词分词,并且对句子进行分类,我们就会看到标记器产生了如下的元组列表:

太好了! 每个标记都使用​​PERSON​​,​​LOCATION​​,​​ORGANIZATION​​或​​O​​标记(使用我们的三类模型)。 ​​O​​只代表其他,即非命名的实体。

这个列表现在可以用于测试已标注数据了,我们将在下一个教程中介绍。

我们知道了如何使用两个不同的 NER 分类器! 但是我们应该选择哪一个,NLTK 还是斯坦福大学的呢? 让我们做一些测试来找出答案。

我们需要的第一件事是一些已标注的参考数据,用来测试我们的 NER 分类器。 获取这些数据的一种方法是查找大量文章,并将每个标记标记为一种命名实体(例如,人员,组织,位置)或其他非命名实体。 然后我们可以用我们所知的正确标签,来测试我们单独的 NER 分类器。

不幸的是,这是非常耗时的! 好消息是,有一个手动标注的数据集可以免费获得,带有超过 16,000 英语句子。 还有德语,西班牙语,法语,意大利语,荷兰语,波兰语,葡萄牙语和俄语的数据集!

这是一个来自数据集的已标注的句子:

让我们阅读,分割和操作数据,使其成为用于测试的更好格式。

好的,看起来不错! 但是,我们还需要将这些数据的“整洁”形式粘贴到我们的 NER 分类器中。 让我们来做吧。

这读入数据,按照空白字符分割,然后以二的增量(从第零个元素开始),取​​split_annotations​​中的所有东西的子集。 这产生了一个数据集,类似下面的(小得多)例子:

让我们继续并测试 NLTK 分类器:

由于 NLTK NER 分类器产生树(包括 POS 标签),我们需要做一些额外的数据操作来获得用于测试的适当形式。

现在我们可以测试 NLTK 的准确率。

哇,准确率为​​.8971​​!

现在让我们测试斯坦福分类器。 由于此分类器以元组形式生成输出,因此测试不需要更多的数据操作。

​​  .9223​​的准确率!更好!

如果你想绘制这个,这里有一些额外的代码。 如果你想深入了解这如何工作,查看 matplotlib 系列:

我们已经测试了我们的 NER 分类器的准确性,但是在决定使用哪个分类器时,还有更多的问题需要考虑。 接下来我们来测试速度吧!

很棒! 现在让我们写一些函数来拆分我们的分类任务。 因为 NLTK NEG 分类器需要 POS 标签,所以我们会在我们的 NLTK 函数中加入 POS 标签。

对于我们的绘图,我们使用​​time_plot()​​函数:

哇,NLTK 像闪电一样快! 看来斯坦福更准确,但 NLTK 更快。 当平衡我们偏爱的精确度,和所需的计算资源时,这是需要知道的重要信息。

但是等等,还是有问题。我们的输出比较丑陋! 这是斯坦福大学的一个小样本:

以及 NLTK:

让我们在下个教程中,将它们转为可读的形式。

现在我们已经完成了测试,让我们将我们的命名实体转为良好的可读格式。

再次,我们将使用来自 NBC 新闻的同一篇新闻:

我们的 NTLK 输出已经是树了(只需要最后一步),所以让我们来看看我们的斯坦福输出。 我们将对标记进行 BIO 标记,B 分配给命名实体的开始,I 分配给内部,O 分配给其他。 例如,如果我们的句子是​​Barack Obama went to Greece today​​,我们应该把它标记为​​Barack-B Obama-I went-O to-O Greece-B today-O​​。 为此,我们将编写一系列条件来检查当前和以前的标记的​​O​​标签。

现在我们将 BIO 标记后的标记写入树中,因此它们与 NLTK 输出格式相同。

遍历并解析出所有命名实体:

在我们的调用中,我们把所有附加函数聚到一起。

之后调用这些函数:

这里是来自斯坦福的看起来不错的输出:

以及来自 NLTK 的:

分块在一起,可读性强。

在之前的系列文章中,我们探讨了Python的基础知识、Web开发、并发编程、数据处理、机器学习以及深度学习。本文将介绍如何使用Python进行自然语言处理(NLP)。我们将探索两个流行的库:NLTK和Transformers,并通过实际案例展示它们的应用。目录自然语言处理简介安装与环境配置使用 NLTK 进行基础文本处理使用 Hugging Face Transformers 实现高级NLP任务案

1. 黑神话悟空背景介绍最近黑神话悟空这款游戏可谓红遍大江南北,不仅IGN给出了8分的高分,就连央视新闻都有报道。作为国内第一款单机大作:出圈的是游戏,输出的是中国文化,受到了广大游戏玩家的追捧和赞扬。针对此热门事件,老王我用python爬虫和情感分析技术,针对B站的弹幕数据,分析了黑神话悟空这款热门游戏弹幕的舆论导向,并生成了词云图,下面我们来看一下,python代码是如何实现的。2. B站弹幕

1、简介聚类是一种无监督学习任务,该算法基于数据的内部结构寻找观察样本的自然族群(即集群)。使用案例包括细分客户、新闻聚类、文章推荐等。因为聚类是一种无监督学习(即数据没有标注),并且通常使用数据可视化评价结果。如果存在「正确的回答」(即在训练集中存在预标注的集群),那么分类算法可能更加合适。依据算法原理,聚类算法可以分为基于划分的聚类算法(比如 K-means)、基于密度的聚类算法(比如D

WordNet是面向语义的英语词典,类似于传统字典。它是NLTK语料库的一部分,可以被这样调用:更简洁的写法:1.单词查看一个单词的同义词集用

# Python NLTK WordNet中文处理实现教程## 引言在自然语言处理(Natural Language Processing)中,WordNet是一个非常有用的工具,它提供了大量的词汇资源和词义关系。在Python中,通过使用NLTK库,我们可以方便地使用WordNet来处理中文文本。本文将指导你如何使用NLTK库来实现Python中文处理。## 整体流程以下是整个处

nltk中安装语料库wordNet报[nltk_data] Error loading wordnet: <urlopen error [Errno 111]

那个,网上的不少相关内容的整理真的是难懂,而且不少错误,稍稍整理一下。 注:真是百度5小时,谷歌5分钟……整理了这么多中文资料,都缺的厉害,然后谷歌了一下,就发现了一个很不错的材料,后面也整理一下。python版本:Python 3.6.4 (v3.6.4:d4...

本文出自:【奥特曼超人的博客】提起聊天机器人, 想必大家会想起一个优秀的库,

在这篇博文中,将记录使用Python的NLTK库来进行情感分析的整个过程。NLTK(Natural Language Toolkit)是一个用于处理人类语言数据和进行自然语言处理的强大工具。以下是使用NLTK进行情感分析的详细指南。### 环境准备首先,需要确保开发环境的软硬件要求符合以下标准:| 组件 | 要求 ||------------

# 使用Python NLTK实现共现词分析在自然语言处理(NLP)领域,共现词(co-occurring words)指的是在特定文本或语境中同时出现的词。共现词分析可以帮助我们发现文本中的潜在关系与模式。本文将带您逐步深入理解如何使用Python中的NLTK库实现共现词分析。## 流程概述下表展示了实现共现词分析的主要步骤:| 步骤 | 描述

# Python评论情感分析使用NLTK## 摘要在当今数字化时代,人们在社交媒体上发布了大量的评论和评价。了解这些评论的情感倾向对于企业和个人来说都非常重要。Python提供了许多工具和库来进行情感分析,其中NLTK(Natural Language Toolkit)是一个非常流行的工具,它可以帮助我们分析文本中的情感。在本文中,我们将介绍如何使用NLTK进行评论的情感分析,包括如何准

# Python NLTK高频词提取在自然语言处理(Natural Language Processing, NLP)中,高频词提取是一个常见的任务。通过提取文本中出现频率较高的词汇,我们可以更好地了解文本的主题和内容。Python的NLTK(Natural Language Toolkit)库提供了强大的工具来进行文本分析,包括高频词提取。## NLTK库介绍NLTK是一个用于处理人

# 使用Python NLTK进行英文情感分析情感分析是自然语言处理(NLP)中的一项重要任务,其目标是识别文本中的主观信息,判断其情感倾向(如积极、消极或中性)。Python中有许多库可供使用,其中最流行的之一就是NLTK(Natural Language Toolkit)。在本文中,我们将探索如何使用NLTK进行情感分析,并提供相应的代码示例。## NLTK简介NLTK是一个用于处

NLTK是Python很强大的第三方库,可以很方便的完成很多自然语言处理(NLP)的任务,包括分词、词性标注、命名实体识别(NER)及句法分析。 一 nltk安装教程     首先,保证已经安装成功python。然后终端输入命令:pip install nltk;安装完成后

文章目录前言一、python编写情感分析代码TextBlob库NLTK库VADER库感想 前言一、python编写情感分析代码情感分析是一种将自然语言文本中的情感信息提取出来的技术。在Python中,有多种工具和库可用于进行情感分析。下面是一些常用的情感分析工具和库,以及如何使用它们进行情感分析。TextBlob库TextBlob是一个Python库,可用于进行情感分析和自然语言处理。要使用Te

一、项目介绍Python语言+Django框架+sqlite/mysql数据库+jieba分词+scikit_learn机器学习+情感分析 snownlpSnowNLP是一个常用的Python文本分析库,是受到TextBlob启发而发明的。由于当前自然语言处理库基本都是针对英文的,而中文没有空格分割特征词,Python做中文文本挖掘较难,后续开发了一些针对中文处理的库,例如SnowNLP、Jieb

序因女朋友毕业设计,涉及到自然语言处理,所以笔者简单研究下了python的两个做自然语言处理的模块,如有错误之处欢迎大家留言。本文主要内容:使用自然语言处理的几个模块简单实现对FaceBook用户评论做情感极性分析,不做过多介绍。本文受众:没写过爬虫的萌新。入门0.准备工作需要准备的东西: Python2.7、一个IDE或者随便什么文本编辑工具。安装所需要的模块.技术部已经研究决定了,你来写爬虫。

我始终认为,手写笔记与涂鸦才是最直接高效的记录方式。由于手写非常自由,无需理会排版换行,无论在学习课堂还是工作开会等场景,效率和直观性上都秒杀传统的打字输入方式。加上如今 Apple Pencil、Surface Pen 等触控笔的出现,使得在 iPad Pro、Surface 上面有着极佳的书写体验。然而,像印象笔记、OneNote、Notability、Word&

市场每天都在生成海量的舆情信息,这些信息可以帮助我们识别市场情绪的转变。如果只是人工地去跟踪大量的舆论和研报显然缺乏效率。我们可以试试让机器来完成这个工作。数据科学在数值领域中很常见,但这个不断壮大的领域现在也可以应用于非数值数据,比如文本。本文将探索一些理解文本数据的关键算法,包括基本文本分析、马尔可夫链和情感分析。许多数据(比如文本)是非结构化的,需要采用不同的机制来提取洞察。文本分析或文本数

THE END
0.法语助手法汉汉法词典符号学是什么意思显示所有包含 符号学 的法语例句 用户正在搜索 norbornylène, norcamphane, norcamphanyl, norcamphényl, norcamphre, norcarane, norcarène, norcholestérine, nord, nord-africain, 相似单词 符号沦, 符号逻辑, 符号体系, 符号位, 符号显示, jvzq<84vkpm/g~ike0tfv8ikevy0h{4'G9+BE.F8'G;&:O*D9'K6'JI'C84ivvq
1.词汇分类(精选5篇)一词多义指一个单词表示多个意思,因而具有多种用法,即一个符号对应多个含义。大部分法语词汇都有这个现象。如rose一词,在植物学中指一种花卉,即玫瑰花;在建筑学中,指装饰教堂正门或教堂耳堂的圆形彩绘大玻璃窗,也叫玫瑰花窗;后者的意思是由前者演变而来的。又如,corniche一词,在古典建筑中,指柱顶盘的一部分(柱jvzquC41yy}/3vnujw4dqv4jcq}fp86677?80qyon
2.NBA篮球25个最美法语单词!你认识几个?25个最美法语单词!你认识几个? 朝生暮死 éphémère adj. 只活一天的,朝生暮死的,短命的,瞬息即逝的,昙花一现的 n.m. [昆虫]蜉蝣;短生植物 详细释义 adj. 1. 只活一天的,朝生暮死的,短命的,瞬息即逝的,昙花一现的 La vie est éphémère.jvzquC41o0nvlrfpi0ipo8jpaphb1y<462>:1
3.词汇教学范文在词汇搭配中,既存在统一词性内相近词的混淆,又存在词性的混淆使用。同一词性内拼写相近的词混淆使用如respectable, respective与respectful; surprising与surprised; reliant与 reliable;及近义词receive与accept;purchase与buy等的混淆使用。不同词性的单词混淆使用,如affect与effect; intent与intend等的误用。另外,英语中有jvzquC41yy}/i€~qq0ipo8mcqyko1?84424ivvq
4.法语阴阳性:容易搞错阴阳性的单词法语以其“性”(词分阴阳性)、“变”(动词变位)、“态”(时态和语态)的复杂闻名。今天我们就来谈谈在区分法语名词阴阳性方面,容易搞错的种种“例外”。 注意:本文讨论的阴阳性,都是以单词常见意义的性别为准哦~ 首先,我们来复习一下名词阴阳性的一般规律: 阳性词尾:-age, -aire, -eau, -ème, -et, -eu, -ier,jvzquC41ht4iwsncpi4dqv4pgy5q9<:2975
5.法语1修订本(马晓宏)课后练习答案.pdf法语法语1修订本(马晓宏)课后练习答案.pdf 160页内容提供方:heraclitus 大小:40.79 MB 字数:约36.17万字 发布时间:2024-03-05发布于福建 浏览人气:2203 下载次数:仅上传者可见 收藏次数:6 需要金币:*** 金币 (10金币=人民币1元)法语1修订本(马晓宏)课后练习答案.pdf 关闭预览 想预览更多内容,点击jvzquC41o0hpqt63:0ipo8mvon532;9125621@6863673:62286577xjvo
6.法语考试复习攻略:词汇语法听说读写全维度技巧词汇是法语考试的 “根基”,无论是阅读中的理解、写作中的表达,还是听力中的抓取,都离不开扎实的词汇储备。但高效积累绝非 “每日硬背 20 词”,关键在 “科学规划 + 场景绑定”。 1. 规划式记忆:用 “高频优先” 搭建词汇体系 备考初期需摒弃 “按字母表背单词” 的低效模式,优先攻克考试高频词: jvzquC41z{€/zmk0ep5gc‚z1vgyu1;5472?03=>6;5?20qyon
7.法语助手」法汉汉法词典为您提供权威的法语单词解释相似单词字母表, 字母词, 字母大写的标题, 字母的, 字母的前后换位, 字母的组合, 字母旗, 字母数字的, 字母顺序, 字母顺序地, 法汉-汉法词典 combinaison de lettres法语例句库 Un mot est un assemblage de lettres. 词是字母的组合。 :上例句、词性分类均由互联网资源动生成,部分未经过人工审核,其表亦jvzq<84vkpm/g|ikev4dp8rfkezt1ow1'G;&CM*;9'K7'JK':F+F9.>C'::&G@*DD'>5'N:';2+9:
8.法语助手法汉汉法词典拼音是什么意思声明:以上例句、词性分类均由互联网资源自生成,部分未经过人工审核,其表达内容亦不代表本软件的观点;若发现问题,欢迎向我们指正。显示所有包含 拼音 的法语例句 用户正在搜索 traduire, traduisible, trafic, traficoter, trafiquant, trafiquer, trafiqueur, tragédie, tragédien, tragi-comédie, 相似单词 拼写jvzquC41yy}/h{ike0ipo8ikevy0p~4'G8+9D.GE'G?&;O*D50nuou