2013-01-09 28 views
0

处理twitterfeed可视化。我有一个很大的数据集。我只想使用包含特定字符串的推文消息。在短的未知字符串中有效查找特定术语或短语的简单方法是什么?

我现在有这样一行:


数据= data.filter(函数(d,I){返回d.text.indexOf( '新年')= - 1真:假的? ;});


它返回包含字符串“新的一年”一个通过twitterfeed所有的鸣叫。工作正常! :)

但是,如何选择多个字符串?

其实,我想这一块也返回和/或“新年快乐”包含像“NEWYEAR”变化的鸣叫和/或“快乐2013”​​和/或拼写错误等

希望有人能帮助我..

2013年快乐!

+0

结合你想要的所有支票?即'return(d.text.indexOf('new year')!= - 1 || d.text.indexOf('newyear')!= - 1 || ...)? true:false;'可能会更好地使用正则表达式。 –

+0

性能有多重要?匹配变体有多重要?解决这些问题的质量解决方案并不简单。 – erickson

+2

http://en.wikipedia。org/wiki/String_searching_algorithm#Algorithms_using_finite_set_of_patterns – tripleee

回答

0

将您的搜索条件放在他们自己的数组中,然后在运行检查时循环。

var searchTerms = ['new year', 'christmas', 'boxing day']; 

data = data.filter(function(d, i) { 
    var termFound = false; 
    for (x in searchTerms) { 
     if (d.text.indexOf(searchTerms[x]) != -1) { 
      termFound = true; 
     } 
    } 
    return termFound; 
    }) 
+1

虽然存在一些问题,所以请注意您是否需要高度的结果准确性。例如,“我在牛肉三明治中发现多年前的肌肉”将会对上述算法的“新年”产生积极影响。 –

+0

我同意,有更好的方法来搜索。 – Elijah

0

这是一个非常经典的字符串搜索/字符串匹配问题。首先,一些术语:字符串匹配算法通常将搜索空间称为“文本” - 在这种情况下,您的推文或推文;和'模式(S)' - 您的搜索条件。

大多数字符串匹配算法的复杂性是根据文本的长度,模式的长度和匹配的数量来衡量的。

天真的方法当然是嵌套循环和线性搜索。伪代码:

foreach text (tweet) 
    foreach pattern (search term) 
     linear search the text for the pattern 

这是O(T * p),其中t是所有文本的总长度,p是所有图案的总长度。你可以在这方面做出相当大的改进,特别是如果文本或模式固定在多次运行中,允许你做一些预处理以实现高效搜索。看看Wikipedia's description of string search algorithms有几种可能性。

您对特定算法的选择可能取决于您的内存约束以及预处理时间和运行时复杂度之间的折衷。但我会抛出一些东西来看待。这听起来像你的模式可能是固定的,并且你的文本可能会有所不同(搜索不同的Twitter供稿?),所以你可能想看看the Aho-Corasick algorithm。您也可以找到一个有用的数据结构suffix tree。这些维基百科页面的链接以及Google搜索这些词语应该有助于您开始使用(您甚至可以找到实施的代码来提供帮助,尽管我没有使用JavaScript,所以我不知道该在哪里推荐)。

相关问题