是否有任何NLP python库可以将句子拆分或连接成相关的单词对?例如:
这不是坏例子 - > “那”“是”“不坏”“例子”
“不坏”意味着同样好,因此在机器学习中将其处理为“不”和“坏”是没有用的。 我甚至不知道如何调用这些相关的单词对。 (术语提取?相萃取?) 或者更好的是用名词分成形容词,例如:
关于减税的不诚实媒体 - > “不诚实的媒体”,“相关”,“关于”,“减税”
我找到了topia.termextract,但它不适用于python3。
答案 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
来查看文本为您提供更多见解的客观性或主观性