每个人都知道,如果您想要使用Jamie Zawinski's algorithm来发送电子邮件。但这是一个新世纪,而且还有一个世纪 新的消息服务。
发布线程状态更新的最佳算法是什么 推土机,?
我非常希望能够应对的事情:
简单的部分:使用in_reply_to_status_id
,
in_reply_to_user_id
和in_reply_to_screen_name
。
(顺便提一下,找到这些值的适当文档
本身就很有用!这样的文件不是
显然与来自
here,
例如。)
用于推断“回复”关系的良好启发式方法
提及具有@
约定的用户但未提及的消息
明确地回复特定消息。这些
“提及”are provided in the "entities" element of
statuses now
如果你要求。这些启发式方法可能会涉及到
帐户(a)两次状态更新之间的时间,(b)是否
两个用户之间有后续的回复等。
(包含旧式转发的回复
附加评论,mentioned by user85509
below
只是这种回复方式的一个例子。)
两个以上用户之间的对话。
使用给定算法的一组推文,或全部 Twitter上的推文。
......但也许你可以想到更多。
答案 0 :(得分:6)
由于只有一个答案,并且赏金截止日期即将到来,我认为我应该添加一个基线答案,因此赏金不会自动授予答案,而答案不会超出问题的范围。< / p>
显而易见的第一步是获取原始推文并遵循所有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
和{{时间轴中的较早日期1}}用于上周(比如说)和一个在更新和特殊的“无回复”更新之间。然后你必须创建一个特征向量 - 你可以添加任何你想要的,但我至少建议添加:
@stephenfry
比率。这些中的越多越好,因为分类器只会使用那些最有用的分类器。我建议您尝试使用random forest分类器,该分类器可以在Weka中方便地实现。
下一个需要训练集。这可能很小 - 刚好足以获得识别对话正常运行的服务。对于这个基本服务,人们必须添加一个很好的界面来纠正不匹配或错误链接的更新,以便用户可以纠正它们。使用这些数据可以构建更大的训练集和更准确的分类器。
1 ...这可能是Twitter上话语水平的典型特征;)
答案 1 :(得分:0)
在Twitter上,人们经常在他们回复的信息前面写“RT”。