What'是一种简单的方法,可以有效地在短的未知字符串中找到特定的术语或短语

What's a simple way to efficiently find specific terms or phrases within a short unknown string?

本文关键字:未知 字符串 有效地 短语 术语 方法 简单 一种 What      更新时间:2023-09-26

正在制作twitterfeed可视化。我有一个很大的数据集。我只想使用包含特定单词字符串的tweet消息。

现在有了这一行:


data = data。Filter (function(d, i){返回d.text。indexOf(新年)!= 1 ?});


返回twitterfeed中包含字符串'new year'的所有tweet。没问题!:)

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

实际上,我希望这篇文章还返回包含诸如'newyear'和/或'newyear'和/或'happy 2013'和/或拼写错误等变化的推文。

希望有人能帮助我…

2013年快乐!

将您的搜索词放在自己的数组中,然后在运行检查时循环遍历。

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;
   })

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

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

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

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

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

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