Da es nur eine Antwort gibt und die Bounty-Deadline bald naht, dachte ich, ich sollte eine Grundantwort hinzufügen, damit die Bounty nicht automatisch zu einer Antwort hinzugefügt wird, die nicht viel über die Frage hinausgeht.
Der offensichtliche erste Schritt besteht darin, Ihre ursprünglichen Tweets zu nehmen und alle in_reply_to_status_id
Links zu folgen, um viele gerichtete azyklische Graphen zu erstellen. Über diese Beziehungen kann man sich nahezu 100% sicher sein. (Sie sollten den Links auch durch Tweets folgen, die nicht im ursprünglichen Satz enthalten sind, und diese zu den Statusaktualisierungen hinzufügen, die Sie in Betracht ziehen.)
Über diesen einfachen Schritt hinaus muss man sich mit dem " erwähnt ". Anders als beim E-Mail-Threading gibt es nichts hilfreiches wie eine Betreffzeile, auf die man sich anpassen kann - das ist zwangsläufig wird sehr fehleranfällig sein. Der Ansatz, den ich wählen würde, besteht darin, einen Merkmalsvektor für jede mögliche Beziehung zwischen Status-IDs zu erstellen, die durch Erwähnungen in diesem Tweet repräsentiert werden könnten, und dann einen Klassifizierer zu schulen, um die beste Option zu erraten, einschließlich einer "keine Antwort" -Option.
Um das Bit "jede mögliche Beziehung" auszuarbeiten, betrachten Sie zunächst alle Statusaktualisierungen, die einen oder mehrere andere Benutzer enthalten, und enthält keine in_reply_to_status_id
. Nehmen sich ein Beispiel für eine dieser tweets ist:
@a @b no it isn't lol RT @c Yes, absolutely. /cc @stephenfry
... Sie einen Merkmalsvektor für die Beziehung zwischen diesem Update schaffen würden und jeden Update mit einem frühen Zeitpunkt in dem Zeitrahmen von @a
, @b
, @c
, und @stephenfry
für die letzte Woche (sagen wir) und eine zwischen diesem Update und einem speziellen "no reply" -Update. Dann müssen Sie einen Merkmalsvektor erstellen - Sie können diese hinzufügen, was auch immer Sie möchten, aber ich würde zumindest vorschlagen Zugabe:
- Die Zeit, die zwischen den beiden Updates verstrichene - vermutlich Antworten sind eher zu sein, kürzliche Updates.
- Der Anteil des Weges durch den Tweet in Bezug auf Wörter, die eine Erwähnung auftritt. z.B. Wenn dies das erste Wort ist, wäre dies eine Punktzahl von 0, und das ist wahrscheinlich eher eine Antwort als Erwähnungen später im Update.
- Die Anzahl der Anhänger des genannten Benutzers - Prominente sind vermutlich eher Spam-Erwähnung.
- Die Länge des längsten gemeinsamen Teilstrings zwischen den Aktualisierungen, der ein direktes Angeben anzeigen könnte.
- Wird vor der Erwähnung "/ cc" oder andere Zeichen angezeigt, die darauf hinweisen, dass dies nicht direkt eine Antwort auf diese Person ist?
- Das
following/followed
Verhältnis für den Autor des ursprünglichen Updates.
- usw.
- usw.
Je mehr von diesen kann man mit dem besser kommen, da der Klassifikator nur diejenigen, die erweisen sich als nützlich verwenden. Ich würde vorschlagen, einen random forest Klassifikator zu versuchen, der bequem in Weka implementiert wird.
Als nächstes braucht man ein Trainingset. Dies kann zunächst klein sein - gerade genug, um einen Dienst zu erhalten, der die laufenden Unterhaltungen identifiziert. Zu diesem Basisdienst müsste man eine nette Schnittstelle hinzufügen, um nicht übereinstimmende oder falsch verknüpfte Aktualisierungen zu korrigieren, so dass Benutzer sie korrigieren können. Mit diesen Daten kann man ein größeres Trainingset und einen genaueren Klassifikator erstellen.
..., die von der Ebene des Diskurses auf Twitter typisch sein könnte;)
Eine RT ist keine Antwort, es ist ein "retweet". Es bedeutet nur, dass Sie wiederholen, was jemand anderes gesagt hat, gefolgt von einer Zuschreibung. –
Nach meiner Erfahrung wird es für beide verwendet. Leute benutzen oft das Format " RT <@name>" für ihre Antworten. –
user85509