用于Python实现hedonometer的字标记器

时间:2017-03-19 01:15:13

标签: python tokenize sentiment-analysis

我正在学习this paper"故事的情感弧线由六种基本形状主导,其中一个hedonometer(主要用于推特上的情感分析)被应用于一本创造情感的书。

我试图用Python重现这些论文的结果,但是,虽然我理解了算法计算器算法,但我无法理解单词被标记的方式(论文在这个问题上真的很差,而且我对此并不十分自信。)

在上面的链接中,在底部有Electronic Supplementary Material,其中,在页面S8,声称书籍"The Picture of Dorian Gray"(删除前后物质后)有84,591个单词

我尝试了两个标记器(假设文本位于变量text中)。

第一个是天真的

words = text.split()

并且只获得78,934个单词。

第二个,使用一个众所周知的库(代码可能是次优的,因为我之前从未使用过NLTK,之前没有做任何与自然语言处理相关的事情)

from nltk.tokenize import sent_tokenize, word_tokenize
words = [word for sent in sent_tokenize(text) for word in word_tokenize(sent)]

我得到了令人难以置信的95,285个单词!如果我使用以下代码过滤掉标点符号

words2 = [word for word in words if word not in ',-.:\'\"!?;()[]']

它减少到83,141个单词。

然而,没有什么真正接近84,591字的纸张数量。我究竟做错了什么?我不是在理解分词器的工作原理吗?

P.S。我已尝试过其他书籍,但结果相似。我总是低估或高估2000字以下的字数。

奖金问题:正如文章指出的那样,有一个单词词典,其中包含相关的幸福分数(用于分配文本块的平均幸福分数)。在这样的字典中,还有诸如" can' t"之类的字,而NLTK标记器分裂"可以'#34;进入" ca"和" n&#t;#34;。此外,查看电子补充材料第S5页上的标记化文本,我认为NLTK行为是理想的行为。然而,它不应该起作用,即离开" can'#34;通过字典建立的方式联合起来?

0 个答案:

没有答案