[JAVA] J'ai fait un majordome qui résume les tweets [Modèle de couverture maximale]

introduction

Cette fois, j'ai créé une API de synthèse de tweet en utilisant le modèle de couverture maximale. C'est une API comme un majordome qui résume et vous indique le dernier sujet lorsque vous spécifiez un mot-clé. Par exemple, vous pouvez l'utiliser à des fins telles que "Je souhaite connaître la voix du marché du produit qui m'intéresse", "Je souhaite connaître l'actualité et la réputation de mon entreprise", "Je souhaite connaître les tweets d'actualité liés à FGO qui sont actuellement populaires".

API publiée

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());
  }

}

Qu'est-ce qu'un résumé de document?

L'entrée [Automatic Summary] de Wikipedia (https://ja.wikipedia.org/wiki/%E8%87%AA%E5%8B%95%E8%A6%81%E7%B4%84) est utile. Je vais. Cette fois, nous avons adopté l'approche de "sélectionner un nombre quelconque de phrases importantes (tweets) dans le modèle de couverture maximale". Une explication très approximative du résumé de document de type sélection de phrase par le modèle de couverture maximale est "sélectionner N phrases contenant de nombreux mots importants de sorte que la longueur totale des caractères ne dépasse pas la longueur M". Il est généralement calculé par la méthode gourmande avec des performances garanties. L'importance d'un mot peut être calculée en utilisant quelque chose comme TF-IDF, ou vous pouvez créer votre propre dictionnaire d'importance et vous y référer.

algorithme

Je vais omettre les détails, mais le flux général est le suivant.

  1. Obtenez des tweets contenant n'importe quel mot-clé avec API Easy Tweet Collection
  2. Effectuez une analyse morphologique avec kuromoji-ipadic-neologd et ciblez uniquement les mots de contenu (noms, verbes, adjectifs, verbes adjectifs)
  3. Calculez le bigramme du mot contenu et définissez la fréquence du document du bigramme mot contenu comme importance
  4. Extrayez les phrases importantes par modèle de revêtement maximum + méthode gourmande aux performances garanties

Résumons

J'ai essayé de résumer en utilisant 100 tweets contenant des mots-clés arbitraires. Tout d'abord, essayez d'entrer "Un certain catalogue magique interdit". Apparemment, il semble qu'un projet de collaboration soit en cours avec un soshage appelé Divine Gate. Il semble que Famitsu ait également une fonction spéciale.

  "tweets": [
    {
      "statusId": 819472977976660000,
      "text": "Les performances d'une certaine unité de collaboration de catalogue interdite magique ont été ajustées! !!\n Cliquez ici pour plus de détails\nhttps://t.co/nCtI6L2lEB\n#Divage https://t.co/euWj6SVOlU",
      "createdAt": 1484212557000,
      "userId": 1651752007,
      "userName": "Monsieur Divin@Officiel du Divage",
      "userScreenName": "divine_gate",
      "userProfileImageURL": "http://pbs.twimg.com/profile_images/545168403653083137/tPjlbZBx_normal.png ",
      "score": 15.556059143488126
    },
    {
      "statusId": 819379554334576600,
      "text": "[Laboratoire Dibage] La collaboration de la version du film "A Certain Magical Forbidden Catalog" est 1/Réimprimé à partir de 13! Le statut et les compétences de la nouvelle unité sont également révélés-Application Famitsu 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
    },

Puis "Gacha". Il semble que le gacha de FGO soit chaud en ce moment!

  "tweets": [
    {
      "statusId": 819441067925782500,
      "text": "Je pense que FGO est vraiment consciencieux dans le sens que "Gacha est auto-responsabilité" parce qu'il n'y a pas de pression silencieuse du système que "je ne peux pas effacer sans cela ou je ne peux pas battre les autres joueurs"",
      "createdAt": 1484204949000,
      "userId": 113922292,
      "userName": "Citrouille@Tiamato Saba",
      "userScreenName": "Lantern_pumpkin",
      "userProfileImageURL": "http://pbs.twimg.com/profile_images/787644896349872128/67tAY3Cp_normal.jpg ",
      "score": 21.51741612946915
    },
    {
      "statusId": 819164551534870500,
      "text": "Pour ceux qui craignent de tourner gacha, j'ai inventé un sous-titre mensonge de Just do it, donc je vais le laisser 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
    },

A la fin, le "Premier ministre Abe" attend quelque chose de grave. Il semble que les remarques de M. Renji et le soutien de 1 billion de yens aux Philippines soient évoqués. Je ne savais pas que je soutiendrais les Philippines pour 1 billion de yens. Hmmmm.

  "tweets": [
    {
      "statusId": 819510275959181300,
      "text": "Minshin Renka "Je ne peux pas partager ma conscience avec le Premier ministre Shinzo Abe" -La réaction du net "M. Renka qui ne peut pas partager ma conscience avec les électeurs parle beaucoup" "C'est intéressant de dire que les gens qui ne peuvent pas unifier leur conscience au sein du parti"\nhttps://t.co/oBChp3nIzL",
      "createdAt": 1484221450000,
      "userId": 3147651630,
      "userName": "Message anonyme",
      "userScreenName": "anonymous201504",
      "userProfileImageURL": "http://pbs.twimg.com/profile_images/713181990690775040/BWrea93U_normal.jpg ",
      "score": 26.90972898141721
    },
    {
      "statusId": 819496986638315500,
      "text": "TBS ◆ Le Premier ministre Abe a annoncé son soutien à 1 billion de yens lors du sommet Japon-Philippines https://t.co/eabtk7unzH "Pour le développement futur des Philippines, nous combinerons l'APD et l'investissement privé pour créer des entreprises et des opportunités à l'échelle de 1 billion de yens au cours des cinq prochaines années" (Premier ministre Abe) * À partir de cette année également.",
      "createdAt": 1484218281000,
      "userId": 57184966,
      "userName": "deepthroat",
      "userScreenName": "gloomynews",
      "userProfileImageURL": "http://pbs.twimg.com/profile_images/315728613/deepthroat_normal.gif",
      "score": 23.325985203733698
    },

en conclusion

J'ai recherché un service de résumé de tweet mais je ne l'ai pas trouvé. Je pense que c'est assez pratique. Publish API, veuillez donc l'utiliser. Je pense que cela sera utile pour des applications telles que "quand un nouveau produit sort", "quand un nouveau personnage sort avec un soshage", "je veux connaître la réputation de mon entreprise", "je veux connaître l'actualité", "je veux connaître la recommandation d'un humidificateur" Je vais.

Recommended Posts

J'ai fait un majordome qui résume les tweets [Modèle de couverture maximale]
J'ai créé une application de chat.
J'ai créé une application shopify @java
J'ai créé une interface graphique avec Swing
J'ai fait une simple fonction de recommandation.
J'ai créé une application correspondante (application Android)
J'ai créé un outil de génération package.xml.
[Android] J'ai créé une application de podomètre.
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 2): Changer de modèle
J'ai créé un site qui résume les informations sur la restriction du sucre avec Vue.js
[Ruby] J'ai créé un simple client Ping
J'ai fait une mort risquée avec Ruby
J'ai créé un plug-in pour IntelliJ IDEA
J'ai créé une application Janken avec kotlin
J'ai créé une application de calculatrice sur Android
J'ai créé un nouvel outil de déploiement Java
J'ai créé une application Janken avec Android