2017-04-13 47 views
0

语言本身并不重要,但我想我会坚持使用Javascript。Javascript - 最有效的方式来搜索数以千计的单词的文字?

本质上,我每个月都有成千上万的“评论”,并且希望通过自动化获得一份天真的快乐“评估”,并在这些评论中搜索10,000个单词(每个评论的平均单词数为21个单词,远)。

公式的工作方式(从Hedonometer借用) - 将文本中每个单词的“幸福”得分(如果在10k列表中找到)取平均值。

我会测试一些东西,也许编辑回来的结果在这里,但我甚至不知道从哪里开始。似乎是非常繁重的数据提取(虽然只需要按照课程评论进行一次) - 也许它更适合于R或SQL(可能不适用),但不确定。

我相信这个问题有时候被称为'词袋'或'词频饱和度'。

+0

“最有效的”依赖于一堆因素.... – epascarello

+0

呀做一些阅读和教训有很多复杂的快速字符串搜索方法上地狱。嗯。也许我会在维基百科的一些简单的方法,看看处理时间是否可以接受。 – user45867

回答

1

你可以创建你的话,像这样(略)哈希表:

let wordRanks = {'hate':-100,'love':100,'ok':10}; 

然后有一个这样的字符串,并将其分割成单词。

let str = `I hate love it's just ok`; 
let words = str.split(' '); 

然后你就可以通过的话迭代,并得到一个分数:

let commentScore = 0; 
words.forEach(function(word){ 
    if(wordRanks[word]){ 
    commentScore += parseInt(wordRanks[word]) 
    } 
}); 
console.log(commentScore); //should be 10 

使用哈希表的不应该是查找计算昂贵。应该工作,虽然你可能要拆分的话更好地删除尾随标点符号,因为我有爱后一个逗号在我最初的代码,它给了错误的结果,因为没有为没有哈希表匹配“爱”

+0

嗯非常有趣。我会试着去测试一下。事情是,根据Hedonometer期刊论文,他们没有总结单词分数,他们对它们进行了平均。因此,在你虚构的例子中,平均值将是3.33(10/3) - 实际上,'分数'这个词是从1-10开始的,因此没有负面因素。肯定会尝试这个,看看从时间的角度来看是否可行,谢谢。 – user45867

+0

酷,希望你应该能够适应这种方法,无论你的评分系统是什么,只要你了解循环和哈希表背后的代码。如果您正在处理浮动数字,那么parseInt也可能是parseFloat。 – chairmanmow

+0

这种方法的更新:它的工作速度惊人地超出了我的预期。在一台平庸的计算机上,它应用并在9秒内对1000个21-avg-word-comments进行评分。可能不是最优化的方法,但肯定有效。每个月有大约2-3k条评论,大约18-27秒。只有'不雅'部分是在Javascript中获取单词列表。 10k列表是静态的,所以我只是使用一些处理将HUGE列表放在一个Javascript行上,但是想知道是否有更好的方法来维护这个列表,通过SQL或其他格式。谢谢! – user45867

1

我肯定会去Python's Natural Language Toolkit (NLTK)它带有一组功能,可以让你的生活更轻松,如文本频率,删除重复项,删除停用词,查找同义词等,这个想法正在减少大小你的文字尽可能做情感分析。

在一个类似的项目我的做法是:

  1. 删除中性词,代词,介词,限定词,姓名等
  2. 删除重复。
  3. 当我进入文本并从文本的其余部分删除它们时,检查单词同义词。
  4. 动态创建一个段落的情感阈值分数,所以一旦达到了那个分数,我就会停止对该段落进行处理并转到下一个段落,对于整体文本也是如此。

希望这个作品!

+0

感谢 - 在该网站的伟大指南,也。是的,我不是想彻底重新发明轮子。我会通读一遍。 – user45867

+0

这是一个注释,如果你做了类似的事情,如果你删除了同义词或重复项,他们应该添加到总谱中,所以如果你从段落中删除了“笑”这个单词6次,并且不计算6次迭代,这个特定的段落最可能有错误的分数。 NLTK还有一套很好的工具用于分析上下文,这非常有用,像“哭泣”这样的词语可能意味着悲伤或愤怒,因此语境很重要。 – Boris

+0

我试图复制Hedonometer的方法,仅仅是因为它看起来从他们自己的内部测试中是健壮的。是的,他们一次次地重复或重复三次。他们没有考虑上下文。当然,我不会精确准确(人类评估可以做到这一点) - 更多的是通过分数/基本分类的初始传球。但是,是的,即使是这个平均分词快乐评分的“简单”模型 - 在技术上很难实现,至少对我来说现在是这样。 – user45867

相关问题