如何将句子分成相关词(术语提取)?

时间:2018-02-21 18:51:10

标签: python nlp nltk sentiment-analysis text-extraction

是否有任何NLP python库可以将句子拆分或连接成相关的单词对?例如:

  

这不是坏例子 - > “那”“是”“不坏”“例子”

“不坏”意味着同样好,因此在机器学习中将其处理为“不”和“坏”是没有用的。 我甚至不知道如何调用这些相关的单词对。 (术语提取?相萃取?) 或者更好的是用名词分成形容词,例如:

  关于减税的不诚实媒体 - > “不诚实的媒体”,“相关”,“关于”,“减税”

我找到了topia.termextract,但它不适用于python3。

3 个答案:

答案 0 :(得分:1)

结帐Spacy library(参见链接)。

它没有开箱即用的功能,因为你需要建立规则,但规则是非常人性化的,你可以提供很多选项(POS标签,正则表达式,引理,或其任何组合等。)

特别值得注意的是PhraseMarker() class上的部分。

直接从文档中复制的是代码示例:

import spacy
from spacy.matcher 
import PhraseMatcher

nlp = spacy.load('en')
matcher = PhraseMatcher(nlp.vocab)
terminology_list = ['Barack Obama', 'Angela Merkel', 'Washington, D.C.']
patterns = [nlp(text) for text in terminology_list]
matcher.add('TerminologyList', None, *patterns)

doc = nlp(u"German Chancellor Angela Merkel and US President Barack Obama "
          u"converse in the Oval Office inside the White House in Washington, D.C.")
matches = matcher(doc)

答案 1 :(得分:1)

要自动检测句子流中的常用短语,我建议您检查Gensim Phrase (collocation) detection

它如何运作的好例子:

  

bigram = Phraser(短语)

     

发送= [你','你'','你',你'','uyy',你是',u'there']

     

打印(两字组[发送])

     

输出:[u'the',u'mayor',u'of', u'new_york',u'was',u'there']

答案 2 :(得分:0)

这取决于您使用的ML模型及其训练方式。 标准是nltk或textblob

我相信应该已经对

textblob进行了培训,以应对这些语言干扰:

import re
x = ' '.join(re.sub('(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)', ' ', 'That is not bad example').split())

from textblob import TextBlob
analysis = TextBlob(x)
sentiment = analysis.sentiment.polarity

上面的代码应产生以下情感:

'That is bad example' : -0.6999999999999998    
'That is not bad example' : 0.3499999999999999
'That is good example' : 0.7
'That is not good example' : -0.35

您已经可以看到,该情绪分析器已经掌握了双负和负正的一些概念。可以通过调用

对其进行进一步培训
from textblob.classifiers import NaiveBayesClassifier
cl = NaiveBayesClassifier(training_Set) 

并使用cl,但最好通过设定任意阈值(如果> 0.1则表示良好)来定义什么是积极情绪,这样会更好。我的意思是“不好”和“不好”已经是负面的...那么为什么要尝试重新发明轮子呢?

ML现在已经足够“聪明”了……您通常必须使用自己的智能来弥补机器缺乏的缺口...

您还可以使用sentiment = analysis.sentiment.subjectivity来查看文本为您提供更多见解的客观性或主观性