Python 使用NLTK在文本中查找原因
对于我的工作项目,我的任务是浏览大量用户生成的文本,其中一些文本是取消他们的互联网服务的原因,以及该原因发生的频率。可能是他们搬家了,只是不喜欢,或者服务不好,等等 虽然这不一定是Python的问题,但我想知道是否有某种方法可以以某种方式使用NLTK或Textblob来确定取消的原因。我高度怀疑是否有任何自动化的东西可以完成这样一项专门的任务,我意识到我可能需要建立一个神经网络,但任何关于如何解决这个问题的建议都将不胜感激 到目前为止,我一直在想: 1) 使用词干和标记,并总结最常用的单词。简单的方法,不是那么准确。 2) n克。计算密集,但可能有一些希望。 3) 词性标注和组块,可能会找到跟在连词后面的词,比如“因为”。 4) 手动检查所有文本字段,并记下取消的原因。效率不高,破坏了找到某种算法的全部目的。 5) 我完全不知道,我也不知道这是否可行 如果你能给我一些建议,我将不胜感激 如果这个答案太笼统或者你不能理解,不要担心 这是学术性的东西,需要一些基本的准备。 如果您愿意,请随时与我联系(询问我的邮件 在comment或smth中,我们将找出一些问题) 我觉得这个问题更适合我 无论如何,您需要做的第一件事是创建一些训练集。您需要找到尽可能多的带有原因的文档,并对它们进行注释,标记指定原因的短语。文档越多越好。 如果您要使用用户报告,请使用示例报告,以便培训数据和真实数据来自同一来源。 这就是您将如何为您的处理构建某种语料库的方法 然后,您必须指定需要哪些功能。这可能是POS标签、n-gram特征、引理/茎等。这需要实验和一些实践。在这里,我将使用一些n-gram特性(可能是2-gram或3-gram)和一些基于Wordnet的知识 最后一步是构建chunker或annotator。这是一个组件,将采取你的训练集,分析它,并了解它应该标记什么。 您将遇到所谓的“语义鸿沟”——这个术语描述了当您的程序“学到”了您不想要的东西时的情况(这是一种简化)。例如,您可以使用这样一组功能,您的chunker将学习查找“我不”短语而不是理性短语。这实际上取决于您的培训集和功能集。 如果出现这种情况,您应该尝试更改功能集,并在一段时间后尝试使用培训集,因为它可能不具有代表性 如何构建这样的chunker?对于您的情况,我会使用HMM(隐马尔可夫模型)或更好的CRF(条件随机场)。这两种是流注释常用的统计方法,您的文本基本上是一个令牌流。另一种方法是使用任何“标准”分类器(从朴素贝叶斯,通过一些决策树,从神经网络到支持向量机),并在文本中的每个n-gram上使用它 当然,选择特征集在很大程度上取决于所选择的方法,所以请阅读一些关于它们的信息并明智地选择 注:这是一个过于简单的答案,遗漏了许多关于训练集准备、选择特征、预处理语料库、为语料库寻找来源等的重要内容。这不是走一遍——这些是你应该自己探索的基本步骤 PPS。不确定,但NLTK可能有一些CRF或HMM实现。如果没有,我可以推荐Markov和CRF。注意——后者功能强大,但可以从Java或python安装和使用 ==编辑== 关于功能: 首先,我们能想象出什么样的特征Python 使用NLTK在文本中查找原因,python,python-2.7,neural-network,nltk,textblob,Python,Python 2.7,Neural Network,Nltk,Textblob,对于我的工作项目,我的任务是浏览大量用户生成的文本,其中一些文本是取消他们的互联网服务的原因,以及该原因发生的频率。可能是他们搬家了,只是不喜欢,或者服务不好,等等 虽然这不一定是Python的问题,但我想知道是否有某种方法可以以某种方式使用NLTK或Textblob来确定取消的原因。我高度怀疑是否有任何自动化的东西可以完成这样一项专门的任务,我意识到我可能需要建立一个神经网络,但任何关于如何解决这个问题的建议都将不胜感激 到目前为止,我一直在想: 1) 使用词干和标记,并总结最常用的单词。简单
- 引理/词干-你在语料库中找到每个单词的词干或引理,选择最重要的(通常是频率最高的,或者至少你会从那里开始),然后将每个单词/n-gram表示为二进制向量,说明词干/引理化后表示的单词或序列是否包含该特征引理/词干
- n-grams-与上面的类似,但您选择的不是单个单词,而是长度为n的最重要序列。“n-gram”表示“长度n的序列”,因此,例如,“我坐在长凳上”的双格图(2-gram)将是:“我坐”、“坐在”、“在椅子上”、“在长凳上”。
- skipgrams-与n-grams相似,但在原始句子中包含“间隙”。例如,“棕色狐狸跳过某物”(对不起,我现在记不起这个短语:P)的间距为3的Biskipgram将是:[“快速”,“超过”],[“棕色”,“某物”]。通常,间隙大小为m的n-skipgram是通过获取一个单词、跳过m、获取一个单词等方式获得的,除非您有n个单词
- POS标签——我总是把它们误认为是“位置”标签,但这是“词性”的首字母缩写。当您需要查找具有共同语法结构的短语,而不是普通单词时,它非常有用