[PYTHON] J'ai essayé de résumer des phrases avec summpy

J'ai essayé summpy, un outil de synthèse de texte publié par Recruit Technologies.

summpy https://github.com/recruit-tech/summpy

L'environnement est Ubuntu 16.4. Nécessite Python 2.7 pour fonctionner. Comme il n'est pas inclus par défaut, nous préparerons un environnement de 2.7 avec anaconda.

$ conda create -n 2.7 python=2.7 anaconda

Vérifiez s'il a été correctement installé

$ source activate 2.7
(2.7)$
(2.7)$ conda info -e
# conda environments:
#
base                     /home/croso/anaconda3
2.7                   *  /home/croso/anaconda3/envs/2.7
3.5                      /home/croso/anaconda3/envs/3.5
3.6                      /home/croso/anaconda3/envs/3.6

Installez Mecab-python car MeCab ou janome est requis pour l'analyse morphologique

(2.7)$ pip install mecab-python

Ensuite, installez summpy avec pip

(2.7)$ pip install summpy 

Créer un exemple de script


# -*- coding: utf-8 -*-
from summpy.lexrank import summarize

text=u'''
Le taux de chômage (désaisonnalisé) en septembre annoncé par le ministère de l'Intérieur et des Communications le 1er était de 2,4%, 0,2 point de moins que le mois précédent.

Selon une enquête Reuters, 2,3% étaient attendus.

Le taux de chômage est inférieur à 2,5% depuis janvier 2018.

Le ministère de l'Intérieur et des Communications a résumé: «Bien que le taux de chômage ait augmenté, le niveau est resté au niveau le plus bas depuis environ 26 ans, et la situation de l'emploi s'améliore constamment», a déclaré un cadre.

Le nombre d'employés (désaisonnalisé) était de 67,3 millions, soit une baisse de 50 000 par rapport au mois précédent.

Le nombre de chômeurs (comme ci-dessus) était de 1,67 million, soit une augmentation de 130 000 par rapport au mois précédent.

Le nombre de chômeurs a augmenté pour la première fois en 6 mois.

En regardant la ventilation, le nombre de rotations involontaires était le même que le mois précédent, mais le nombre de rotations volontaires (auto-convenance) a augmenté de 10 000 et le nombre de nouveaux demandeurs d'emploi a augmenté de 90 000. «Le nombre de personnes qui souhaitent travailler à nouveau augmente», a-t-il déclaré.

Selon les chiffres originaux, le nombre d'employés a augmenté de 530 000 par rapport au même mois de l'année précédente à 67,68 millions.

Il a augmenté pendant 81 mois consécutifs, le plus haut jamais enregistré depuis 1953, ce qui est comparable.

Le taux d'emploi des 15-64 ans est de 77,9%, le plus élevé jamais enregistré en Thaïlande.

Le taux de recrutement effectif (désaisonnalisé) pour septembre annoncé par le ministère de la Santé, du Travail et du Bien-être social était de 1,57 fois, en baisse par rapport au mois précédent.

Selon une enquête de Reuters, il devrait être 1,59 fois.
'''

sentences, debug_info = summarize(
    text, sent_limit=2
)

for sent in sentences:
    print sent.strip().encode('utf-8')


Analysons un article extrait d'un site d'actualités. sent_limit Combien de lignes mettez-vous les résultats ensemble? Cela ressemble à . Jusqu'à présent, c'est un formulaire qui trace README.md de summpy tel quel.

Une erreur s'est produite lors de son utilisation.

"error": "add_edge() takes exactly 3 arguments (4 given)"

Quand je l'ai recherché, c'était une incompatibilité de version avec networkx. https://teratail.com/questions/114565 Je vais correspondre à la version.

(2.7)$ pip install multiqc==1.2
(2.7)$ pip install networkx==1.11

ʻInstallez d'abord multiqc`. Si vous installez multiqc, networkx installera également 2.2 automatiquement, vous ne pourrez donc pas reproduire correctement l'environnement à moins que vous n'écrasiez 1.11 de networkx dessus.

La phrase complète est ci-dessous

Le nombre d'employés (désaisonnalisé) était de 67,3 millions, soit une baisse de 50 000 par rapport au mois précédent.
Le nombre de chômeurs (comme ci-dessus) était de 1,67 million, soit une augmentation de 130 000 par rapport au mois précédent.

Comment est-ce? On peut lire dans le résumé que l'économie japonaise s'est refroidie parce que le nombre d'employés a diminué et que le nombre de chômeurs a augmenté. Cependant, j'estime avoir négligé la phrase dont on peut dire qu'elle faisait l'objet de «0,2 point de moins que le mois précédent».

J'ai également mal compris, mais il semble qu'il ne "résume pas le texte". Il semble correct de dire «un outil qui extrait uniquement les lignes importantes d'une phrase».

Au fait, je pense que peu de gens installent mecab et l'utilisent tel quel. Cela ne sert à rien sauf si vous ajoutez un dictionnaire. Alors, installez ce qui suit.

https://github.com/neologd/mecab-ipadic-neologd

C'est un dictionnaire mecab qui prend en charge les derniers mots. Les informations du dictionnaire doivent être incluses ci-dessous après l'installation.

(2.7)$ ls /usr/local/lib/mecab/dic/mecab-ipadic-neologd
char.bin  dicrc  left-id.def  matrix.bin  pos-id.def  rewrite.def  right-id.def  sys.dic  unk.dic

J'aimerais que le dictionnaire soit lu automatiquement, mais summpy n'avait pas une telle fonction, j'ai donc réécrit une partie de la source pour la gérer. (Il serait peut-être plus correct de modifier mecab-python ...)

(2.7)$ vi ~/anaconda3/envs/2.7/lib/python2.7/site-packages/summpy/misc/mecab_segmenter.py 

8ème ligne

_mecab = MeCab.Tagger()

À

_mecab = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')

Remplacé par. Cela devrait être un peu plus précis ...

Ce n'est pas pertinent, mais l'apprentissage automatique nécessite une énorme quantité de données d'entraînement. Parmi eux, je pensais que la synthèse de phrases était une tâche relativement facile pour collecter des données d'apprentissage. Si vous utilisez le titre de l'article pour les bonnes réponses et le corps de l'article pour les données d'apprentissage de nombreux sites d'actualités, vous pouvez trouver autant d'échantillons que vous le souhaitez sur le net, j'ai donc pensé que cela pourrait être un bon sujet d'étude.

Recommended Posts

J'ai essayé de résumer des phrases avec summpy
J'ai essayé d'utiliser Summpy
J'ai essayé de gratter avec Python
J'ai essayé Learning-to-Rank avec Elasticsearch!
J'ai essayé le clustering avec PyCaret
J'ai essayé gRPC avec Python
J'ai essayé de gratter avec du python
J'ai essayé l'apprentissage automatique avec liblinear
J'ai essayé webScraping avec python.
J'ai essayé de déplacer de la nourriture avec SinGAN
J'ai essayé d'implémenter DeepPose avec PyTorch
J'ai essayé la détection de visage avec MTCNN
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé la communication SMTP avec Python
J'ai essayé la génération de phrases avec GPT-2
J'ai essayé d'apprendre LightGBM avec Yellowbrick
J'ai essayé la reconnaissance faciale avec OpenCV
J'ai essayé l'analyse de régression multiple avec régression polypoly
J'ai essayé d'envoyer un SMS avec Twilio
J'ai essayé d'utiliser Amazon SQS avec django-celery
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé linebot avec flacon (anaconda) + heroku
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de commencer avec Hy
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
J'ai essayé l'analyse factorielle avec des données Titanic!
J'ai essayé d'apprendre avec le Titanic de Kaggle (kaggle②)
J'ai essayé le rendu non réaliste avec Python + opencv
J'ai essayé un langage fonctionnel avec Python
J'ai essayé la récurrence avec Python ② (séquence de nombres Fibonatch)
J'ai essayé d'implémenter DeepPose avec PyTorch PartⅡ
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de jouer avec l'image avec Pillow
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé la reconnaissance d'image simple avec Jupyter
J'ai essayé le réglage fin de CNN avec Resnet
J'ai essayé le traitement du langage naturel avec des transformateurs.
# J'ai essayé quelque chose comme Vlookup avec Python # 2
J'ai essayé de gratter
J'ai essayé PyQ
J'ai essayé AutoKeras
J'ai essayé de résumer diverses phrases à l'aide de l'API de synthèse automatique "summpy"
J'ai essayé le moulin à papier
J'ai essayé django-slack
J'ai essayé Django
J'ai essayé spleeter
J'ai essayé cgo
J'ai essayé la reconnaissance manuscrite des caractères des runes avec scikit-learn
J'ai essayé de prédire l'année prochaine avec l'IA
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé des centaines de millions de SQLite avec python
J'ai essayé d'implémenter la lecture de Dataset avec PyTorch
J'ai essayé la reconnaissance d'image de CIFAR-10 avec Keras-Learning-
J'ai essayé d'apprendre le fonctionnement logique avec TF Learn
J'ai essayé de déplacer GAN (mnist) avec keras
J'ai essayé de "différencier" l'image avec Python + OpenCV