谁都知道,如果您想发送电子邮件,则可以使用Jamie Zawinski的算法。但这是一个新世纪,并且有一个新的消息传递服务。
在Twitter上发布线程状态更新的最佳算法是什么?
我绝对希望它处理的事情:
最简单的部分:使用in_reply_to_status_id, in_reply_to_user_id和in_reply_to_screen_name。(顺便说一下,例如,找到这些值的适当文档本身将是有用的!例如,此类文档显然未从此处链接到 。)
in_reply_to_status_id
in_reply_to_user_id
in_reply_to_screen_name
良好的试探法,可从提及使用@约定的用户的消息中推断出“答复”关系,但未明确答复特定消息。 如果您需要,现在可以在状态的“实体”元素中提供这些“提及” 。这些试探法可能会考虑到(a)两个状态更新之间的时间间隔,(b)两个用户之间是否有后续答复,等等。(如由user85509提到的包含旧式转发和附加注释的回复)以下 只是这种回复方式的一个实例。)
@
超过两个用户之间的对话。
处理给该算法的一组推文,或Twitter上的所有推文。
…但是也许您可以想到更多。
由于只有一个答案,赏金截止日期快到了,我想我应该添加一个基线答案,这样赏金不会自动授予不会超出问题实质的答案。
显而易见的第一步是采用原始的一组推文,并遵循所有in_reply_to_status_id链接来构建许多有向无环图。您可以100%确定这些关系。(您甚至应该通过原始集合中没有的推文来跟踪这些链接,并将其添加到您正在考虑的状态更新集中。)
除了这一简单的步骤外,还必须处理“提法”。与电子邮件线程化不同,没有什么比它可以匹配的主题行更有用了–这 不可避免地 会很容易出错。我将采用的方法是为可能由该推文中的提及表示的状态ID之间的每个可能关系创建特征向量,然后训练分类器猜测最佳选项,包括“不回复”选项。
要计算“一切可能的关系”,请首先考虑提及一个或多个其他用户且不包含的每个状态更新in_reply_to_status_id。假设这些推文之一的示例是:1
@a @b no it isn't lol RT @c Yes, absolutely. /cc @stephenfry
…您将创建此更新,并在时限提前每次更新之间的关系的特征向量@a,@b,@c,和@stephenfry在上周(说),并且更新和特殊之间的一个“未回复”更新。然后,您必须创建一个特征向量- 您可以根据需要添加此向量,但是我至少建议添加:
@a
@b
@c
@stephenfry
following / followed
由于分类器将仅使用那些被证明有用的分类器,因此可以提供更好的分类器。我建议尝试使用随机森林分类器,该分类器在Weka中方便地实现。
下一个需要训练集。刚开始时,它可能很小—刚好足以获得识别正在运行的对话的服务。对于此基本服务,必须添加一个不错的界面来更正不匹配或错误链接的更新,以便用户可以对其进行更正。使用这些数据可以建立更大的训练集和更准确的分类器。
1 …这可能是Twitter上的典型讨论水平;)