Algorithm 用于流式传输数据和识别主题的数据结构/算法

Algorithm 用于流式传输数据和识别主题的数据结构/算法,algorithm,data-structures,indexing,nlp,mapreduce,Algorithm,Data Structures,Indexing,Nlp,Mapreduce,我想知道在流式数据中识别以下信息的有效算法/数据结构 考虑像twitter这样的实时数据流。我主要对以下查询感兴趣,而不是存储实际数据 我需要在实际数据上运行查询,但不需要任何重复数据 由于我对存储完整的数据不感兴趣,我很难识别重复的帖子。但是,我可以散列所有帖子并对照它们进行检查。但我也希望找出几乎重复的帖子。我怎样才能做到这一点 确定用户讨论的前k个主题 我想确定用户讨论的热门话题。我不想要twitter上显示的最频繁的单词。相反,我想给出一些最常用单词的高级主题名称 我希望我的系统是实时的

我想知道在流式数据中识别以下信息的有效算法/数据结构

考虑像twitter这样的实时数据流。我主要对以下查询感兴趣,而不是存储实际数据

我需要在实际数据上运行查询,但不需要任何重复数据

由于我对存储完整的数据不感兴趣,我很难识别重复的帖子。但是,我可以散列所有帖子并对照它们进行检查。但我也希望找出几乎重复的帖子。我怎样才能做到这一点

确定用户讨论的前k个主题

我想确定用户讨论的热门话题。我不想要twitter上显示的最频繁的单词。相反,我想给出一些最常用单词的高级主题名称

我希望我的系统是实时的。我的意思是,我的系统应该能够处理任何流量

我可以想到map-reduce方法,但我不确定如何处理同步问题。例如,重复的帖子可以到达不同的节点,并且两个节点都可以将它们存储在索引中

在典型的新闻源中,删除数据中的任何停止词。在我的系统中,我想通过识别广泛主题中最常见的单词来更新我的停止词列表

实现这一目标的有效算法/数据结构是什么

我希望在一段时间内存储主题,以检索数据中有趣的模式。星期五晚上每个人都想去看电影。存储这些数据的有效方法是什么

我正在考虑将其存储在hadoop分布式文件系统中,但经过一段时间,这些索引变得如此之大,以至于I/O将成为我的主要瓶颈

考虑来自世界各地推特的多语言数据。我如何识别跨地理区域讨论的类似主题

这里有两个问题。一个是识别正在使用的语言。它可以根据发推文的人来识别。但是这些信息可能会影响用户的隐私。另一个想法是通过一个训练算法来运行它。目前采用的最佳方法是什么。另一个问题实际上是在字典中查找这个词,并将它与常见的中间语言(比如说英语)联系起来。如何像在不同比赛中使用同一个单词一样处理词义消歧

确定单词的边界

一种可能性是使用某种训练算法。但遵循的最佳方法是什么。这是一种类似于词义消歧的方法,因为您将能够根据实际句子识别单词边界

我正在考虑开发一个原型并评估系统,而不是具体的实现。我认为不可能放弃实时推特数据。我认为这种方法可以在网上免费获得的一些数据上进行测试。任何想法,我可以从哪里得到这些数据

非常感谢您的反馈

谢谢你抽出时间


--Bala

我不确定我是否回答了你的主要问题,但你可以通过计算两条消息之间的距离来确定它们的相似性。您可以将其视为两个字符串之间的“编辑差异”(即,需要对一个字符串进行多少次编辑才能将其转换为另一个字符串)。

这里有几个不同的问题。我不明白你问的所有问题,但据我所知,这里有一个大问题:你想按主题对邮件进行分类。您还希望删除重复项

删除重复项(相对)容易。要删除“接近”的重复项,可以首先从数据中删除不感兴趣的部分。你可以先去掉大写和标点符号。您还可以删除最常用的单词。然后,您可以将结果消息添加到Bloom筛选器中。散列对于Twitter来说还不够好,因为散列的消息不会比完整的消息小很多。你会得到一个不适合内存的散列。这就是为什么你要用布卢姆过滤器来代替。它可能必须是一个非常大的Bloom过滤器,但它仍然比哈希表小

另一部分是一个困难的分类问题。你可能不想自己写这部分。有许多库和程序可用于分类,但可能很难找到一个适合您的需要。一个例子是Vowpal Wabbit项目,它是一种用于分类的快速在线算法。但是,它一次只能处理一个类别。对于多个类别,您必须运行多个副本并分别对其进行培训

识别语言听起来不那么困难。不要尝试做一些聪明的事情,比如“培训”,而是把每种语言中最常用的单词放到字典里。对于每条消息,使用出现频率最高的语言


如果你想让算法自己列出分类,祝你好运。

您好,我们已经使用功能创建了一个非常类似的演示。 在那里,您可以创建每条推文的语义指纹。(您还可以提取最上面的关键词或一些类似的术语,它们实际上不需要成为tweet的一部分)。 我们使用指纹根据内容过滤推特流。
在上面你可以看到结果。公众1%的推特流被监控在四个不同的主题区域。

有趣的主题,糟糕的问题……
也许这应该被分成多个问题;此外,通过在问题中提供更具体的信息,你可以向潜在的回答者表明你真的关心这些问题,并且你真的考虑过它们