由于只有一个答案,而赏金截止日期即将到来,我认为我应该添加一个基准答案,以便自动授予赏金的答案不会比问题中提供的答案更多。
显然的第一步是获取您原始的推文集,并跟随所有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的时间线上比这个更新早的每个更新之间创建一个特征向量,最近一周(例如),以及一个特殊的“无回复”更新之间。然后,您需要创建一个特征向量——您可以添加任何您想要的内容,但我至少建议添加以下内容:
- 两次更新之间经过的时间——回复很可能是对最近的更新。
- 在提到中单词方面的完成度比例。例如,如果这是第一个单词,那么得分为0,这可能更有可能表示回复而不是在更新后期提到。
- 被提到用户的粉丝数——名人很可能会被用作垃圾邮件提到。
- 更新之间最长公共子字符串的长度,这可能表示直接引用。
- 提到是否以“/cc”或其他标识符为前导,表明这不是针对该人的直接回复?
- 原始更新的作者的跟随/被跟随比率。
- 等等。
- 等等。
建议尽可能提供更多这样的内容,因为分类器只会使用那些被证明有用的内容。我建议尝试使用随机森林分类器,它方便地在Weka中实现。
接下来需要一个训练集。一开始可以很小,只要足够让服务识别对话即可。对于这个基本服务,还需要添加一个漂亮的界面来纠正不匹配或错误链接的更新,以便用户进行更正。使用这些数据,可以构建一个更大的训练集和更准确的分类器。
1 ...这可能是Twitter上典型的话语水平;)