[JAVA] Ich habe einen Butler gemacht, der die Tweets zusammenfasst [Maximum Covering Model]

Einführung

Dieses Mal habe ich eine Tweet-Zusammenfassungs-API unter Verwendung des Maximum-Coverage-Modells erstellt. Es ist eine API wie ein Butler, die das neueste Thema zusammenfasst und Ihnen sagt, wenn Sie ein Schlüsselwort angeben. Sie können es beispielsweise für Zwecke wie "Ich möchte die Marktstimme des Produkts kennen, an dem ich interessiert bin", "Ich möchte die Nachrichten und den Ruf meines Unternehmens kennen", "Ich möchte die FGO-bezogenen Nachrichten-Tweets kennen, die jetzt beliebt sind" verwenden.

API veröffentlicht

public class Api27TwitterSummarizeExample {

  static String ENDPOINT     = "https://api.apitore.com/api/27/twitter-summarize/get";
  static String ACCESS_TOKEN = "YOUR-ACCESS-TOKEN";

  public static void main(String[] args) {
    RestTemplate restTemplate = new RestTemplate();
    Map<String, String> params = new HashMap<String, String>();
    params.put("access_token", ACCESS_TOKEN);
    params.put("q", "Apitore");
    params.put("iter", "1");
    params.put("num", "3");
    String url = UrlFormatter.format(ENDPOINT, params);

    TwitterSummarizeResponseEntity response =
        restTemplate.getForObject(url, TwitterSummarizeResponseEntity.class, params);

    System.out.println(response.getLog());
    System.out.println(response.getTweets().get(0).getText());
    System.out.println(response.getTweets().get(0).getScore());
  }

}

Was ist eine Dokumentzusammenfassung?

Der Eintrag [Automatische Zusammenfassung] von Wikipedia (https://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95%E8%A6%81%E7%B4%84) ist hilfreich. Ich werde. Dieses Mal haben wir den Ansatz gewählt, "eine beliebige Anzahl wichtiger Sätze (Tweets) im Modell der maximalen Abdeckung auszuwählen". Eine sehr grobe Erklärung der Dokumentzusammenfassung vom Satzauswahltyp durch das Maximum-Coverage-Modell lautet "Wählen Sie N Sätze aus, die viele wichtige Wörter enthalten, damit die Gesamtzeichenlänge die Länge M nicht überschreitet". Sie wird normalerweise nach der gierigen Methode mit garantierter Leistung berechnet. Die Wichtigkeit eines Wortes kann mit etwas wie TF-IDF berechnet werden, oder Sie können Ihr eigenes Wichtigkeitswörterbuch erstellen und darauf verweisen.

Algorithmus

Ich werde die Details weglassen, aber der allgemeine Ablauf ist wie folgt.

  1. Holen Sie sich T-Tweets mit einem beliebigen Schlüsselwort mit Easy Tweet Collection API.
  2. Führen Sie eine morphologische Analyse mit kuromoji-ipadic-neologd durch und zielen Sie nur auf Inhaltswörter (Substantive, Verben, Adjektive, Adjektivverben).
  3. Berechnen Sie das Bigram des Inhaltsworts und legen Sie die Dokumenthäufigkeit des Inhaltswort-Bigram als Wichtigkeit fest
  4. Extrahieren Sie wichtige Sätze durch maximales Beschichtungsmodell + gierige Methode mit garantierter Leistung

Fassen wir zusammen

Ich habe versucht, mit 100 Tweets zusammenzufassen, die ein beliebiges Schlüsselwort enthalten. Versuchen Sie zunächst, "A Certain Magical Forbidden Catalogue" einzugeben. Anscheinend scheint ein Kollaborationsprojekt mit einer Soshage namens Divine Gate durchgeführt zu werden. Es scheint, dass Famitsu auch eine Besonderheit hat.

  "tweets": [
    {
      "statusId": 819472977976660000,
      "text": "Die Leistung einer bestimmten magisch verbotenen Katalogkollaborationseinheit wurde angepasst! !!\n Klicken Sie hier für Details\nhttps://t.co/nCtI6L2lEB\n#Divage https://t.co/euWj6SVOlU",
      "createdAt": 1484212557000,
      "userId": 1651752007,
      "userName": "Mr. Divine@Divage Official",
      "userScreenName": "divine_gate",
      "userProfileImageURL": "http://pbs.twimg.com/profile_images/545168403653083137/tPjlbZBx_normal.png ",
      "score": 15.556059143488126
    },
    {
      "statusId": 819379554334576600,
      "text": "[Dibage Laboratory] Die Zusammenarbeit der Filmversion "A Certain Magical Forbidden Catalogue" ist 1/Nachdruck ab 13! Der Status und die Fähigkeiten der neuen Einheit werden ebenfalls enthüllt-Famitsu App https://t.co/i8B6GkYabA https://t.co/mmNxqtB0RR",
      "createdAt": 1484190283000,
      "userId": 5921162,
      "userName": "Famitsu.com",
      "userScreenName": "famitsu",
      "userProfileImageURL": "http://pbs.twimg.com/profile_images/378800000675754960/d98b55583c072a904463b4a625655c70_normal.png ",
      "score": 13.692591672735654
    },

Dann "Gacha". Es scheint, dass FGOs Gacha gerade heiß ist!

  "tweets": [
    {
      "statusId": 819441067925782500,
      "text": "Ich denke, FGO ist wirklich gewissenhaft in dem Sinne, dass "Gacha Selbstverantwortung ist", weil es keinen stillen Druck des Systems gibt, dass "ich ohne dies nicht klären kann oder andere Spieler nicht schlagen kann".",
      "createdAt": 1484204949000,
      "userId": 113922292,
      "userName": "Kürbis@Tiamato Saba",
      "userScreenName": "Lantern_pumpkin",
      "userProfileImageURL": "http://pbs.twimg.com/profile_images/787644896349872128/67tAY3Cp_normal.jpg ",
      "score": 21.51741612946915
    },
    {
      "statusId": 819164551534870500,
      "text": "Für diejenigen, die sich Sorgen machen, Gacha zu drehen, habe ich einen Lügen-Untertitel von Just do it zusammengestellt, also lasse ich es https://t.co/YrKBV4CmQp",
      "createdAt": 1484139023000,
      "userId": 3002869106,
      "userName": "Naramaru(Nekamaru)",
      "userScreenName": "NakedAmarl",
      "userProfileImageURL": "http://pbs.twimg.com/profile_images/732055255278452736/gFzwi9NU_normal.jpg ",
      "score": 12.289830977543446
    },

Am Ende erwartet "Premierminister Abe" etwas Ernstes. Es scheint, dass über die Äußerungen von Herrn Renji und die Unterstützung von 1 Billion Yen auf den Philippinen gesprochen wird. Ich wusste nicht, dass ich die Philippinen für 1 Billion Yen unterstützen würde. Hmmmm.

  "tweets": [
    {
      "statusId": 819510275959181300,
      "text": "Minshin Renka "Ich kann mein Bewusstsein nicht mit Premierminister Shinzo Abe teilen" - Die Reaktion des Netzes "Herr Renka, der mein Bewusstsein nicht mit Wählern teilen kann, spricht viel" "Es ist interessant zu sagen, dass Menschen, die ihr Bewusstsein nicht innerhalb der Partei vereinheitlichen können"\nhttps://t.co/oBChp3nIzL",
      "createdAt": 1484221450000,
      "userId": 3147651630,
      "userName": "Anonymer Beitrag",
      "userScreenName": "anonymous201504",
      "userProfileImageURL": "http://pbs.twimg.com/profile_images/713181990690775040/BWrea93U_normal.jpg ",
      "score": 26.90972898141721
    },
    {
      "statusId": 819496986638315500,
      "text": "TBS ◆ Premierminister Abe kündigte auf dem Gipfeltreffen Japan-Philippinen https Unterstützung für 1 Billion Yen an://t.co/eabtk7unzH "Für die weitere Entwicklung der Philippinen werden wir ODA und private Investitionen kombinieren, um in den nächsten fünf Jahren Unternehmen und Chancen in der Größenordnung von 1 Billion Yen zu schaffen" (Premierminister Abe) * Ab diesem Jahr ebenfalls.",
      "createdAt": 1484218281000,
      "userId": 57184966,
      "userName": "deepthroat",
      "userScreenName": "gloomynews",
      "userProfileImageURL": "http://pbs.twimg.com/profile_images/315728613/deepthroat_normal.gif",
      "score": 23.325985203733698
    },

abschließend

Ich habe nach einem Tweet-Zusammenfassungsdienst gesucht, ihn aber nicht gefunden. Ich finde es ganz praktisch. API veröffentlichen, verwenden Sie es also. Ich denke, dass es für Anwendungen wie "wenn ein neues Produkt herauskommt", "wenn ein neuer Charakter mit einem Soshage herauskommt", "ich möchte den Ruf meines Unternehmens kennen", "ich möchte aktuelle Angelegenheiten wissen", "ich möchte die Empfehlung eines Luftbefeuchters kennen" nützlich sein wird. Ich werde.

Recommended Posts

Ich habe einen Butler gemacht, der die Tweets zusammenfasst [Maximum Covering Model]
Ich habe eine Chat-App erstellt.
Ich habe eine shopify App @java erstellt
Ich habe mit Swing eine GUI erstellt
Ich habe eine einfache Empfehlungsfunktion erstellt.
Ich habe eine passende App erstellt (Android App)
Ich habe ein Tool zur Generierung von package.xml erstellt.
[Android] Ich habe eine Schrittzähler-App erstellt.
Ich habe eine Antwortfunktion für die Rails Tutorial-Erweiterung (Teil 2) erstellt: Modell ändern
Ich habe mit Vue.js eine Seite erstellt, die Informationen zur Zuckereinschränkung zusammenfasst
[Ruby] Ich habe einen einfachen Ping-Client erstellt
Ich habe mit Ruby einen riskanten Würfel gemacht
Ich habe ein Plug-In für IntelliJ IDEA erstellt
Ich habe eine Janken App mit Kotlin gemacht
Ich habe eine Taschenrechner-App für Android erstellt
Ich habe ein neues Java-Bereitstellungstool erstellt
Ich habe eine Janken App mit Android gemacht