我正在尝试在一个非常大的文件中获取正数和负数。我只需要一个原始的方法(不需要花很多时间)。我尝试了sendiwordnet,但一直得到IndexError: list index out of range
,我认为这是由于单词未在wordnet词典中列出。文本中包含很多错别字和“非单词”。
如果有人可以提出任何建议,我将非常感激!
答案 0 :(得分:1)
这一切都取决于您的数据是什么样的,以及任务的最终目标是什么。您需要给我们一些有关您的项目的更详细的描述,但是通常,这里是您的选择:
-制作自己的情绪分析词典:我真的怀疑这是您要执行的操作,因为这需要花费大量时间和精力,但是如果您的数据足够简单,那么它是可行的。
-清理数据:如果由于噪音过多和拼写错误的单词而使令牌不在senti-wordnet中,请在将其通过wordnet之前尝试对其进行更正,这将至少限制您将获得的错误数量。
-使用sendi-wordnet替代方法:顺便说一句,没有那么多好的方法,但是如果您使用的是python,则可以随时尝试sentiment_classifier或nltk's sentiment(从错误的外观来看,你是)。
-只对您可以进行的分类:这是我的建议。如果该单词不在senti-wordnet中,请继续进行下一个。只需捕获错误(try: ... except IndexError: pass
),然后尝试通过计算您实际捕获的情感词来推断数据的总体情感是什么。
PS:我们需要确定您的代码,但是我认为还有另一个原因导致您收到IndexError。如果单词不在sendi-wordnet中,则将得到KeyError,但这还取决于您对函数进行编码的方式。
祝您好运,希望对您有所帮助。
答案 1 :(得分:0)
我决定使用sentiwordnet
来代替opinion_lexicon
,该列表包含一个否定和肯定的单词。但是,我遇到了列表问题,因为将我的语料库中的每个标记与opinion_lesion
中的单词列表进行比较花费了太长时间。
解决方案:
不要将您的语料库与list
的{{1}}进行比较,而是将带有正面和负面词的Opinion_lexicon文件放入opinion_lexicon
中。 set()
是无序的,因此不会遍历每个元素,从而显着减少了计算时间(几分钟,错误O(1),而列表花费了大约一个小时,错误O(n))。
(相当基本,我知道)
希望这可以节省一些时间。