[PYTHON] J'ai essayé de résumer diverses phrases à l'aide de l'API de synthèse automatique "summpy"

Qu'est-ce que summpy

Il s'agit d'une API de synthèse de texte automatique publiée par Recruit Technologies. Il résume le texte saisi avec le nombre de lignes spécifié.

GitHub publié https://github.com/recruit-tech/summpy

Cette fois, j'ai mis différentes phrases dans cette API et J'ai essayé de vérifier quel serait le résultat.

Environnement de vérification

EC2(Amazon Linux release 2) python2.7

Installation

Installer pip, summpy, mecab-python3

Pour mecab-python3, si vous ne spécifiez pas la version 0.996.5, Puisque l'erreur "aucun fichier ou répertoire de ce type: / usr / local / etc / mecabrc" apparaît, la version est spécifiée.

$ sudo easy_install pip
$ sudo pip install summpy
$ sudo pip install mecab-python3==0.996.5

Dans le même temps, définissez la version networkx sur 1.11. Si vous ne le faites pas, vous obtiendrez une erreur "error": "add_edge () prend exactement 3 arguments (4 donnés)" "erreur lors de l'exécution.

$ sudo pip install multiqc==1.2
$ sudo pip install networkx==1.11

Exécution du serveur

Il démarre sur le port 8080. Nohup est ajouté pour l'exécuter en arrière-plan.

nohup python -m summpy.server -h 127.0.0.1 -p 8080 &

Code source

summpy_test.py


#!/usr/bin/env python2
# coding:utf-8
import requests

limit = 3 #Ici, spécifiez le nombre de lignes que vous souhaitez résumer
text = 'Saisissez ici le texte que vous souhaitez résumer.'

p = {'sent_limit':limit, 'text':text}

r = requests.get('http://localhost:8080/summarize', params=p)

print(r.text)

Résultat d'exécution

$ python ./summpy_test.py
{
  "debug_info": {},
  "summary": [
    "Saisissez ici le texte que vous souhaitez résumer."
  ]
}

Puisque le texte du texte est une ligne, le résultat est également une ligne. Je voudrais modifier le texte ici de différentes manières.

J'ai essayé avec différentes phrases

De là, je résumerai différentes phrases selon chaque thème. Le texte utilisé pour le résumé utilise le contenu de l'article suivant.

Comment interprétez-vous "Adler Psychology" du point de vue d'un ingénieur? https://qiita.com/keki/items/0542d9d121cf89d6154e

Tout d'abord, résumez sans penser à rien

Tout d'abord, résumons les phrases suivantes. De plus, après avoir supprimé les sauts de ligne, je l'ai mis dans l'API de résumé.

Original

À cet âge, je m'intéresse aux sentiments, aux sentiments et aux façons de penser des gens.

Pendant ce temps, je suis tombé sur "Adler Psychology" dans ce titre il y a quelques années.

Les ingénieurs se concentrent parfois sur le travail spécialisé de programmation, et on dit souvent qu'ils ne sont pas doués pour communiquer avec les gens et qu'ils ne sont pas bons pour rejoindre le cercle des équipes.

De plus, je m'inquiète pour les relations humaines et je souffre de dépression....Je pense qu'il existe de nombreux cas.

Personnellement, je pense que la "psychologie d'Adler" est la manière de penser et de penser elle-même pour résoudre de tels problèmes de relations humaines.

Cette fois, je voudrais écrire un article sur ce que ce serait d'interpréter une telle «psychologie Adler» du point de vue d'un ingénieur, car je suis ingénieur dans le domaine.

Au fait, c'est une phrase assez longue.
J'espère que vous le lirez avec l'intention de lire un petit livre.

Code source

summpy_test.py


#!/usr/bin/env python2
# coding:utf-8
import requests

limit = 3 #Ici, spécifiez le nombre de lignes que vous souhaitez résumer
text = 'À cet âge, je m'intéresse aux sentiments, aux sentiments et aux façons de penser des gens. Pendant ce temps, je suis tombé sur "Adler Psychology" dans ce titre il y a quelques années. L'ingénieur programme
Parfois, on dit que je ne suis pas doué pour communiquer avec les gens et que je ne suis pas doué pour rejoindre le cercle de l'équipe parce que je me concentre sur mon travail spécialisé. De plus, je m'inquiète pour les relations humaines et je souffre de dépression....Des emplois souvent>Je pense que c'est une graine. Personnellement, je pense que la "psychologie d'Adler" est la manière de penser et de penser elle-même pour résoudre de tels problèmes de relations humaines. Cette fois, je suis ingénieur dans le domaine de cette "psychologie Adler", mais du point de vue de l'ingénieur
Je voudrais écrire un article sur ce que cela signifie lorsqu'il est interprété dans. Au fait, c'est une phrase assez longue. J'espère que vous le lirez avec l'intention de lire un petit livre.'

p = {'sent_limit':limit, 'text':text}

r = requests.get('http://localhost:8080/summarize', params=p)

print(r.text)

Résultat d'exécution

$ python summpy_test.py
{
  "debug_info": {},
  "summary": [
    "À cet âge, je m'intéresse aux sentiments, aux sentiments et aux façons de penser des gens.",
    "Personnellement, je pense que la "psychologie d'Adler" est la manière de penser et de penser elle-même pour résoudre de tels problèmes de relations humaines.",
    "Cette fois, je voudrais écrire un article sur ce que ce serait d'interpréter une telle «psychologie Adler» du point de vue d'un ingénieur, car je suis ingénieur dans le domaine."
  ]
}

Hmm. La connexion entre les 1ère et 2ème lignes est difficile à comprendre, mais elle se résume en 3 lignes. De plus, il semble que le texte d'origine n'est pas traité, mais que le texte est simplement extrait et sélectionné.

Essayez de supprimer la ponctuation

Afin d'étudier ce que signifie la ponctuation en summpy, j'ose supprimer toute ponctuation.

Original

À cet âge, je m'intéresse aux sentiments et à la pensée émotionnelle des gens.

Il y a quelques années, j'ai rencontré "Adler Psychology", qui figure également dans ce titre.

Les ingénieurs ne sont pas doués pour communiquer avec les gens parce qu'ils se concentrent sur le travail spécialisé de programmation, et je pense que l'on dit parfois qu'ils ne sont pas bons pour rejoindre le cercle des équipes.

De plus, je souffre de relations humaines et souffre de dépression....Je pense qu'il y a de nombreux cas

Je pense personnellement que "Adler Psychology" est l'idée même de résoudre de tels problèmes de relations humaines.

Cette fois, j'aimerais écrire un article sur ce que ce serait d'interpréter une telle «psychologie d'Adler» du point de vue d'un ingénieur, qui est en fait un ingénieur dans le domaine.

Au fait, ce sera une phrase assez longue
J'espère que vous le verrez avec l'intention de lire un petit livre.

Résultat d'exécution

$ python ./summpy_test.py
{
  "debug_info": {},
  "summary": [
    "A cet âge, je m'intéresse aux sentiments et à la pensée émotionnelle des gens. Je me suis rencontré il y a quelques années dans "Adler Psychology", qui est aussi dans ce titre. Les ingénieurs se spécialisent dans la programmation. Je ne suis pas douée pour communiquer avec les gens parce que je me concentre sur mon travail. Je pense qu'on dit parfois que je ne suis pas douée pour rejoindre le cercle des équipes. De plus, je suis inquiète pour les relations humaines et je souffre de dépression....Je pense qu'il existe de nombreux cas où la "psychologie Adler" est l'idée même de résoudre de tels problèmes de relations humaines. Cette fois, je travaille comme ingénieur dans le domaine de cette "psychologie Adler". J'aimerais écrire un article sur ce que ce serait si je l'interprétais du point de vue d'un ingénieur. D'ailleurs, ce sera une phrase assez longue. J'espère que vous lirez un petit livre."
  ]
}

Il a été résumé en une seule ligne. Apparemment, il considère la ponctuation comme une rupture de phrase.

Ajuster le nombre de lignes de résumé

Et si on augmentait le nombre de lignes à résumer? J'ai essayé de résumer la phrase ci-dessus en 100 lignes.

Résultat d'exécution

$ python ./summpy_test.py
{
  "debug_info": {},
  "summary": [
    "À cet âge, je m'intéresse aux sentiments, aux sentiments et aux façons de penser des gens.",
    "Pendant ce temps, je suis tombé sur "Adler Psychology" dans ce titre il y a quelques années.",
    "Les ingénieurs se concentrent parfois sur le travail spécialisé de programmation, et on dit souvent qu'ils ne sont pas doués pour communiquer avec les gens et qu'ils ne sont pas bons pour rejoindre le cercle des équipes.",
    "De plus, je m'inquiète pour les relations humaines et je souffre de dépression....Je pense qu'il existe de nombreux cas.",
    "Personnellement, je pense que la "psychologie d'Adler" est la manière de penser et de penser elle-même pour résoudre de tels problèmes de relations humaines.",
    "Cette fois, je voudrais écrire un article sur ce que ce serait d'interpréter une telle «psychologie Adler» du point de vue d'un ingénieur, car je suis ingénieur dans le domaine.",
    "Au fait, c'est une phrase assez longue.",
    "J'espère que vous le lirez avec l'intention de lire un petit livre."
  ]
}

Le texte original est tel qu'il est. Le point de lecture (,) n'est pas utilisé comme coupure de phrase, Vous pouvez voir qu'ils sont séparés par des signes de ponctuation (.). De plus, il semble qu'il soit également séparé par des points (.), Des points d'interrogation (?) Et des points d'exclamation (!).

Maintenant, réduisons progressivement le nombre de lignes.

Résultat d'exécution (7 lignes)

$ python ./summpy_test.py
{
  "debug_info": {},
  "summary": [
    "À cet âge, je m'intéresse aux sentiments, aux sentiments et aux façons de penser des gens.",
    "Pendant ce temps, je suis tombé sur "Adler Psychology" dans ce titre il y a quelques années.",
    "Les ingénieurs se concentrent parfois sur le travail spécialisé de programmation, et on dit souvent qu'ils ne sont pas doués pour communiquer avec les gens et qu'ils ne sont pas bons pour rejoindre le cercle des équipes.",
    "De plus, je m'inquiète pour les relations humaines et je souffre de dépression....Je pense qu'il existe de nombreux cas.",
    "Personnellement, je pense que la "psychologie d'Adler" est la manière de penser et de penser elle-même pour résoudre de tels problèmes de relations humaines.",
    "Cette fois, je voudrais écrire un article sur ce que ce serait d'interpréter une telle «psychologie Adler» du point de vue d'un ingénieur, car je suis ingénieur dans le domaine.",
    "Au fait, c'est une phrase assez longue."
  ]
}

Résultat d'exécution (6 lignes)

$ python ./summpy_test.py
{
  "debug_info": {},
  "summary": [
    "À cet âge, je m'intéresse aux sentiments, aux sentiments et aux façons de penser des gens.",
    "Pendant ce temps, je suis tombé sur "Adler Psychology" dans ce titre il y a quelques années.",
    "De plus, je m'inquiète pour les relations humaines et je souffre de dépression....Je pense qu'il existe de nombreux cas.",
    "Personnellement, je pense que la "psychologie d'Adler" est la manière de penser et de penser elle-même pour résoudre de tels problèmes de relations humaines.",
    "Cette fois, je voudrais écrire un article sur ce que ce serait d'interpréter une telle «psychologie Adler» du point de vue d'un ingénieur, car je suis ingénieur dans le domaine.",
    "Au fait, c'est une phrase assez longue."
  ]
}

Résultat d'exécution (5 lignes)

$ python ./summpy_test.py
{
  "debug_info": {},
  "summary": [
    "À cet âge, je m'intéresse aux sentiments, aux sentiments et aux façons de penser des gens.",
    "Pendant ce temps, je suis tombé sur "Adler Psychology" dans ce titre il y a quelques années.",
    "Personnellement, je pense que la "psychologie d'Adler" est la manière de penser et de penser elle-même pour résoudre de tels problèmes de relations humaines.",
    "Cette fois, je voudrais écrire un article sur ce que ce serait d'interpréter une telle «psychologie Adler» du point de vue d'un ingénieur, car je suis ingénieur dans le domaine.",
    "Au fait, c'est une phrase assez longue."
  ]
}

Résultat d'exécution (4 lignes)

$ python ./summpy_test.py
{
  "debug_info": {},
  "summary": [
    "À cet âge, je m'intéresse aux sentiments, aux sentiments et aux façons de penser des gens.",
    "Personnellement, je pense que la "psychologie d'Adler" est la manière de penser et de penser elle-même pour résoudre de tels problèmes de relations humaines.",
    "Cette fois, je voudrais écrire un article sur ce que ce serait d'interpréter une telle «psychologie Adler» du point de vue d'un ingénieur, car je suis ingénieur dans le domaine.",
    "Au fait, c'est une phrase assez longue."
  ]
}

Résultat d'exécution (3 lignes)

$ python ./summpy_test.py
{
  "debug_info": {},
  "summary": [
    "À cet âge, je m'intéresse aux sentiments, aux sentiments et aux façons de penser des gens.",
    "Personnellement, je pense que la "psychologie d'Adler" est la manière de penser et de penser elle-même pour résoudre de tels problèmes de relations humaines.",
    "Cette fois, je voudrais écrire un article sur ce que ce serait d'interpréter une telle «psychologie Adler» du point de vue d'un ingénieur, car je suis ingénieur dans le domaine."
  ]
}

Résultat d'exécution (2 lignes)

$ python ./summpy_test.py
{
  "debug_info": {},
  "summary": [
    "Personnellement, je pense que la "psychologie d'Adler" est la manière de penser et de penser elle-même pour résoudre de tels problèmes de relations humaines.",
    "Cette fois, je voudrais écrire un article sur ce que ce serait d'interpréter une telle «psychologie Adler» du point de vue d'un ingénieur, car je suis ingénieur dans le domaine."
  ]
}

Résultat d'exécution (1 ligne)

$ python ./summpy_test.py
{
  "debug_info": {},
  "summary": [
    "Cette fois, je voudrais écrire un article sur ce que ce serait d'interpréter une telle «psychologie Adler» du point de vue d'un ingénieur, car je suis ingénieur dans le domaine."
  ]
}

Peu à peu, les phrases jugées insignifiantes sont supprimées. Je ne sais pas quels sont les critères, mais Après tout, en tant que comportement,

  1. Séparez les phrases avec des signes de ponctuation
  2. Sortie de la plus haute importance ○ lignes (pour le nombre de lignes spécifié) du texte comme résultat

Il ne semble y avoir aucune erreur dans la forme.

En regardant les résultats du résumé, je pense personnellement que le résumé en trois lignes est le plus simple et le plus pertinent. Cependant, à mesure que la quantité de texte augmente, je sens que je ne sais pas ce qu'est l'histoire avec seulement trois lignes. J'estime également qu'il est nécessaire de trouver un nombre de lignes approprié en fonction de la quantité de texte.

Résumer des phrases désorganisées

Pour vérifier ce qui se passerait si vous résumiez les phrases non liées Résumons la "table des matières" de l'article ci-dessus.

Original

Livre de référence
supposition
1.Les gens peuvent changer
1-1.Il n'y a pas de traumatisme
1-2.N'aie pas peur de te blesser
1-3.Effets néfastes créés lorsque le sentiment d'infériorité devient trop fort
1-4.Accepter soi-même
2.Séparation des problèmes
2-1.Vous n'êtes pas obligé de répondre aux attentes des autres
2-2.Ne vous lancez pas dans les défis des autres
2-3.Séparation des problèmes
3.Comment interagir avec les autres
3-1.Ne rivalisez pas avec les autres
3-2.Admettre la non-défaite = ne pas perdre
4.À propos d'élever des gens
4-1 Ne soyez pas grondé, ne louez pas
4-2 Merci, ne pas évaluer
5.Sentiment communautaire
finalement

Résultat d'exécution (3 lignes)

$ python ./summpy_test.py
{
  "debug_info": {},
  "summary": [
    "2-1.Vous n'avez pas à répondre aux attentes des autres.",
    "2-2.Ne vous lancez pas dans les défis des autres.",
    "3.Comment interagir avec les autres."
  ]
}

À l'origine, c'est une phrase qui n'a pas beaucoup de contexte, il est donc naturel que le résultat du résumé ne soit pas cohérent, Il est intéressant de noter que non seulement les catégories principales ont été sélectionnées, mais que les catégories intermédiaires (2-1 et 2-2) ont été sélectionnées.

Jetez un œil à l'intérieur de l'API pendant un moment

Je me demandais quel genre de logique était résumée, alors J'ai jeté un coup d'œil au code source de l'API publié sur GitHub.

Peut-être que la partie qui résume (la partie qui correspond à la logique de base) est la suivante, https://github.com/recruit-tech/summpy/blob/master/summpy/lexrank.py

J'utilise DictVectorizer et pairwise_distances, donc Après avoir séparé les phrases, une extraction de caractéristique est effectuée et la matrice de distance de l'entité est obtenue. On dirait que vous marquez le résultat ...

Résumé

À la fin

Merci d'avoir regardé jusqu'à la fin.

"Que se passe-t-il si vous résumez cette phrase?" "Je veux que vous résumiez cette phrase!"

Si vous avez une demande telle que, je vous serais reconnaissant de bien vouloir commenter.

Recommended Posts

J'ai essayé de résumer diverses phrases à l'aide de l'API de synthèse automatique "summpy"
J'ai essayé d'utiliser l'API checkio
[Première API COTOHA] J'ai essayé de résumer l'ancienne histoire
J'ai essayé d'obtenir diverses informations de l'API codeforces
J'ai essayé de résumer la modélisation graphique.
J'ai essayé de toucher l'API COTOHA
J'ai essayé d'utiliser l'API BigQuery Storage
[Python] J'ai essayé d'obtenir diverses informations en utilisant l'API de données YouTube!
J'ai essayé d'utiliser l'API Google Cloud Vision
LeetCode j'ai essayé de résumer les plus simples
J'ai essayé de résumer les paramètres des différentes bases de données de Django (MySQL, PostgreSQL)
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé d'approcher la fonction sin en utilisant le chainer
J'ai essayé d'utiliser l'API de Sakenowa Data Project
J'ai essayé d'identifier la langue en utilisant CNN + Melspectogram
J'ai essayé de compléter le graphe de connaissances en utilisant OpenKE
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de résumer SparseMatrix
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
J'ai essayé de noter la syntaxe trop humoristique et humoristique en utilisant l'API COTOHA.
J'ai essayé de rechercher des vidéos à l'aide de l'API de données Youtube (débutant)
J'ai essayé de simuler l'optimisation des publicités à l'aide de l'algorithme Bandit
J'ai essayé de résumer le code souvent utilisé dans Pandas
J'ai essayé de résumer les commandes souvent utilisées en entreprise
[TF] J'ai essayé de visualiser le résultat de l'apprentissage en utilisant Tensorboard
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
J'ai essayé d'approcher la fonction sin en utilisant chainer (re-challenge)
J'ai essayé de sortir le journal d'accès au serveur en utilisant Node.js
[Pour les débutants] J'ai essayé d'utiliser l'API Tensorflow Object Detection
J'ai essayé de résumer comment utiliser à nouveau le référentiel EPEL
J'ai essayé de créer l'API Quip
J'ai essayé le roman Naro API 2
J'ai essayé de résumer des phrases avec summpy
[Pour ceux qui veulent utiliser TPU] J'ai essayé d'utiliser l'API de détection d'objets Tensorflow 2
J'ai touché l'API de Tesla
J'ai essayé l'API du roman Naruro
J'ai essayé de déplacer le ballon
J'ai essayé d'automatiser la construction d'un environnement pratique à l'aide de l'API SoftLayer d'IBM Cloud
J'ai essayé d'estimer la section.
[Linux] J'ai essayé de résumer les commandes de confirmation des ressources
J'ai essayé d'utiliser l'API COTOHA (il y a aussi du code sur GitHub)
J'ai essayé d'analyser mon chanteur préféré (SHISHAMO) en utilisant l'API Spotify
J'ai essayé de numériser le tampon estampé sur papier en utilisant OpenCV
J'ai essayé de résumer les commandes utilisées par les ingénieurs débutants aujourd'hui
J'ai essayé de résoudre le problème de planification des équipes par diverses méthodes
J'ai essayé de résumer la méthode de mise en œuvre fréquemment utilisée de pytest-mock
[API Qiita] [Statistiques • Apprentissage automatique] J'ai essayé de résumer et d'analyser les articles publiés jusqu'à présent.
J'ai essayé de résumer la gestion des exceptions Python
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé de reconnaître le mot de réveil
J'ai essayé d'utiliser l'API de données YOUTUBE V3
Entrée standard Python3 que j'ai essayé de résumer
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai créé une API Web