我正在用Python研究NLP,我发现了一些奇怪的东西。
审核以下否定推文:
neg_tweets = [('I do not like this car', 'negative'),
('This view is horrible', 'negative'),
('I feel tired this morning', 'negative'),
('I am not looking forward to the concert', 'negative'),<---
('He is my enemy', 'negative')]
通过删除停用词进行一些处理。
clean_data = []
stop_words = set(stopwords.words("english"))
for (words, sentiment) in pos_tweets + neg_tweets:
words_filtered = [e.lower() for e in words.split() if e not in stop_words]
clean_data.append((words_filtered, sentiment))
部分输出是:
(['i', 'looking', 'forward', 'concert'], 'negative')
我正在努力理解为什么停用词包括&#39; not&#39;这可能会影响推文的情绪。
我的理解是,停止词在情绪方面没有价值。
所以,我的问题是为什么&#39;不是&#39;包含在停用词列表中?
答案 0 :(得分:1)
句子中的停用词“通常”很少或没有用。正如斯坦福NLP小组所说:
有时候,一些非常常见的单词在帮助选择符合用户需求的文档方面似乎没什么价值,它们完全被排除在词汇表之外。这些词被称为停用词
为什么单词“not”? :仅仅因为它经常出现在英语词汇中,并且“通常”很少或没有重要性,例如,如果您正在进行文本摘要,这些停用词几乎没有用,而且全部由频率分布决定。单词(如tf-idf
。
那你能做什么?嗯,这是一个非常广泛的主题,称为Negation Handling。这是一个非常广泛的领域,有许多不同的方法。我最喜欢的一个是在删除停用词或计算单词向量之前简单地附加前面或后面的否定子句。例如,您可以将not looking
转换为not_looking
,当计算并转换为向量空间时,它将完全不同。您可以在SO回答here中找到用于执行类似操作的代码。
我希望这有帮助!