0

致力于推特可视化。我有一个大数据集。我只想使用包含特定字符串的推文消息。

我现在有这一行:


data = data.filter(function(d, i) { return d.text.indexOf('new year')!=-1 ? true : false;});


它返回 twitterfeed 中包含字符串'new year' 的所有推文。工作正常!:)

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

实际上,我希望这篇文章还返回包含“新年”和/或“新年快乐”和/或“2013 年快乐”和/或拼写错误等变体的推文。

希望可以有人帮帮我..

2013 年快乐!

4

2 回答 2

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;
   })
于 2013-01-09T15:20:33.557 回答
0

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

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

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

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

这是 O(t * p),其中 t 是所有文本的总长度,p 是所有模式的总长度。您可能会在这方面有很大的改进,特别是如果文本或模式在多次运行中是固定的,允许您进行一些预处理以进行有效搜索。查看Wikipedia 对字符串搜索算法的描述,了解一些可能性。

您对特定算法的选择可能取决于您的内存限制以及预处理时间和运行时复杂性之间的权衡。但我会抛出一些东西来看看。听起来您的模式可能是固定的,并且您的文本可能会有所不同(搜索不同的 twitter 提要?),因此您可能需要查看Aho-Corasick 算法。您可能会发现后缀树也是一种有用的数据结构。来自这些 Wikipedia 页面的链接以及对这些术语的 Google 搜索应该可以帮助您入门(您甚至可能会找到已实现的代码来提供帮助,尽管我不使用 JavaScript,所以我不知道在那里推荐什么)。

于 2013-01-10T18:10:43.917 回答