[PYTHON] Extraire et lister les noms des personnes et des lieux dans le texte

Conscience des problèmes

  1. L'extraction d'expressions uniques en tant que méthode d'analyse de phrases de texte est une méthode hautement fiable qui est «flétrie» dans un bon sens.
  2. En tant que technique pour extraire du sens des phrases de texte, il existe un modèle de synthèse automatique de phrases, et un grand nombre d'articles sont proposés chaque jour, comme un modèle de synthèse automatique utilisant le deep learning.
  3. La technologie de synthèse automatique de texte est excellente, mais je pense que les résumés générés suppriment souvent le «nom de personne» ou le «nom de lieu» spécifique contenu dans le texte original. Je vais.
  4. En produisant une liste de tous les mots de «nom personnel» contenus dans la phrase de texte qui vous intéresse, le document fait référence à «qui» et ne mentionne personne. Vous pouvez vérifier en un coup d'œil.
  5. De cette façon, il peut y avoir des cas où les «informations» qui sont divulguées du texte de résumé peuvent être récupérées en extrayant l'expression unique.

__ (Référence) __ Il existe deux types de modèles de récapitulation automatique de texte: * Récapitulation extractrive * et * Récapitulation abstraite *.

Article Qiita de @ Koreyou "Introduction de l'article: Synthèse neurale latente extractive des documents" ・ [[DL Round Reading] Résumé abstractif des publications Reddit avec des réseaux de mémoire à plusieurs niveaux](https://www.slideshare.net/DeepLearningJP2016/dlabstractive-summarization-of-reddit-posts-with-multilevel-memory-networks- 132350977)

__ Donc, cette fois, j'ai défini une méthode qui ne renvoie que le mot correspondant dans la liste des tableaux à partir du texte cible lorsque le nom d'étiquette de l'expression unique est spécifié. __


(Préparation préalable)

Terminal


pip install spacy
pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz"

Méthode autodidacte définie cette fois

extract_words_by_entity_label

Python3


def extract_words_by_entity_label(text, label):
    if label in ["PERSON", "NORP", "FAC", "ORG", "GPE", "LOC", "PRODUCT", "EVENT", "WORK_OF_ART", "LAW", "LANGUAGE", "DATE", "TIME", "PERCENT", "MONEY", "QUANTITY", "ORDINAL", "CARDINAL"]:
            text = text.replace("\n", "")
            doc = nlp(text)
            words_list = [ent.text for ent in doc.ents if ent.label_ == label]

    else:
            print("Son étiquette de représentation unique n'existe pas.")
            words_list = []

    return words_list

Type d'étiquette d'expression unique pouvant être spécifié dans __ * label * __

__ Le site Web officiel * spaCy * suivant contient une liste de noms d'étiquettes * Entité * définis dans * spaCy * __

Type d'étiquette


PERSON	People, including fictional.
NORP	Nationalities or religious or political groups.
FAC	Buildings, airports, highways, bridges, etc.
ORG	Companies, agencies, institutions, etc.
GPE	Countries, cities, states.
LOC	Non-GPE locations, mountain ranges, bodies of water.
PRODUCT	Objects, vehicles, foods, etc. (Not services.)
EVENT	Named hurricanes, battles, wars, sports events, etc.
WORK_OF_ART	Titles of books, songs, etc.
LAW	Named documents made into laws.
LANGUAGE	Any named language.
DATE	Absolute or relative dates or periods.
TIME	Times smaller than a day.
PERCENT	Percentage, including ”%“.
MONEY	Monetary values, including unit.
QUANTITY	Measurements, as of weight or distance.
ORDINAL	“first”, “second”, etc.
CARDINAL	Numerals that do not fall under another type.

(Exemple d'utilisation)

__ Texte à préparer __

Le secrétaire Kato a souligné que le gouvernement et d'autres enregistreront les programmes de radio qui sont diffusés aux personnes enlevées en Corée du Nord et feront tout leur possible pour rentrer chez eux le plus tôt possible, en disant: "Enlacés avec votre famille. S'il vous plaît, continuez à avoir le sentiment fort que le jour viendra et survivra. "
Le 16, le secrétaire d'État Kato, qui est également ministre en charge de la question des enlèvements, a déclaré que le "Comité d'enquête sur les problèmes de disparition spécifiés", qui enquête sur les disparitions dites spécifiques qui ne peuvent exclure la possibilité d'être enlevé par le gouvernement et la Corée du Nord, se trouve en Corée du Nord. Nous avons enregistré une émission de radio qui est diffusée aux personnes enlevées au Japon.
À ce propos, le Secrétaire général Kato a déclaré: «La question des enlèvements est considérée comme la question la plus importante au sein du cabinet de Kan. J'ai rencontré ma famille avec le Premier ministre Kan et j'ai exprimé le désir sincère« d'obtenir des résultats à tout prix ». ".
Après cela, a-t-il déclaré, "Il n'y a aucun changement dans notre détermination à briser la coquille de la méfiance mutuelle, à effacer le passé malheureux et à normaliser les relations diplomatiques avec la Corée du Nord" et le gouvernement dans son ensemble vers le retour des personnes enlevées le plus tôt possible. J'ai souligné que je ferai de mon mieux.
R Et il a dit: "Gardez à l'esprit que le jour viendra sûrement où vous marcherez sur le sol de votre patrie et embrasserez votre famille qui attend votre retour chez vous.

Python3


>>> text = """Le secrétaire Kato a souligné que le gouvernement et d'autres enregistreront les programmes de radio qui sont diffusés aux personnes enlevées en Corée du Nord et feront tout leur possible pour rentrer chez eux le plus tôt possible, en disant: «Embrassez-vous avec votre famille. S'il vous plaît, continuez à avoir le sentiment fort que le jour viendra et survivra. "
Le 16, le secrétaire d'État Kato, qui est également ministre en charge de la question des enlèvements, a déclaré que le "Comité d'enquête sur les problèmes de disparition spécifiés", qui enquête sur les disparitions dites spécifiques qui ne peuvent exclure la possibilité d'être enlevé par le gouvernement et la Corée du Nord, se trouve en Corée du Nord. Nous avons enregistré une émission de radio qui est diffusée aux personnes enlevées au Japon.
À ce propos, le Secrétaire général Kato a déclaré: «La question des enlèvements est considérée comme la question la plus importante au sein du cabinet de Kan. J'ai rencontré ma famille avec le Premier ministre Kan et j'ai exprimé le désir sincère« d'obtenir des résultats à tout prix ». ".
Puis, "Brisez la coquille de la méfiance mutuelle. Ensuite," Brisez la coquille de la méfiance mutuelle. Puis "Brisez la coquille de la méfiance mutuelle. Puis" Brisez la coquille de la méfiance mutuelle. Puis "Brisez la coquille de la méfiance mutuelle." Brisez la coquille, puis "brisez la coquille de la méfiance mutuelle, puis" brisez la coquille de la méfiance mutuelle, puis "phase....Le 16, le secrétaire général Kato, qui est également ministre chargé de la question des enlèvements, a déclaré que le "Comité d'enquête sur les problèmes de disparition spécifiés", qui enquête sur les disparitions dites spécifiques qui ne peuvent être exclues par le gouvernement et la Corée du Nord, se trouve en Corée du Nord. Nous avons enregistré une émission de radio qui est diffusée aux personnes enlevées au Japon.
...À ce propos, le Secrétaire général Kato a déclaré: "La question des enlèvements est considérée comme la question la plus importante au sein du cabinet Kan. Nous avons rencontré la famille avec le Premier ministre Kan et avons partagé le désir sincère" d'obtenir des résultats à tout prix ". J'ai fait. "
...Puis, «Briser la coquille de la méfiance mutuelle», «Briser la coquille de la méfiance mutuelle», «Briser la coquille de la méfiance mutuelle», «Briser la coquille de la méfiance mutuelle», «Briser la coquille de la méfiance mutuelle», «Briser la coquille de la méfiance mutuelle», «Briser la coquille de la méfiance mutuelle», «Gardez un fort sentiment de camaraderie, prenez bien soin de votre corps et survivez. J'ai appelé."""
>>>
>>> text = text.replace("\n", "")
>>> text
'Le secrétaire Kato a souligné que le gouvernement et d'autres enregistreront les programmes de radio qui sont diffusés aux personnes enlevées en Corée du Nord et feront tout leur possible pour rentrer chez eux le plus tôt possible, en disant: «Embrassez-vous avec votre famille. S'il vous plaît, continuez à avoir le sentiment fort que le jour viendra et survivra. " Le 16, le secrétaire d'État Kato, qui est également ministre en charge de la question des enlèvements, a déclaré que le "Comité d'enquête sur les problèmes de disparitions spécifiques", qui enquête sur les disparitions dites spécifiques qui ne peuvent être exclues par le gouvernement et la Corée du Nord. Nous avons enregistré une émission de radio qui est diffusée aux personnes enlevées au Japon. À ce propos, le Secrétaire général Kato a déclaré: «La question des enlèvements est considérée comme la question la plus importante au sein du cabinet Kan. J'ai rencontré ma famille avec le Premier ministre Kan et j'ai exprimé le désir sincère« d'obtenir des résultats de toute façon ». ". Puis, «Briser la coquille de la méfiance mutuelle», «Briser la coquille de la méfiance mutuelle», «Briser la coquille de la méfiance mutuelle», «Briser la coquille de la méfiance mutuelle», «Briser la coquille de la méfiance mutuelle», Après avoir brisé la coquille, "Briser la coquille de la méfiance mutuelle", Briser la coquille de la méfiance mutuelle, "Gardez un fort sentiment de réciprocité, prenez bien soin de votre corps et survivez." J'ai fait.'

(Expression unique incluse dans le texte ci-dessus)

Python3


>>> import spacy
>>> from spacy.matcher import Matcher
>>> nlp = spacy.load('ja_ginza')
>>>
>>> tmp = ["Nom de l'étiquette:  {label}mot: {word}".format(label=ent.label_, word= ent.text) for ent in doc.ents]
>>> tmp
['Nom de l'étiquette:Mot PERSONNE:Secrétaire d'État Kato', 'Nom de l'étiquette:Mot LOC:Corée du Nord', 'Nom de l'étiquette:Mot PERSONNE:Secrétaire d'État Kato', 'Nom de l'étiquette:DATE mot:16e', 'Nom de l'étiquette:Mot LOC:Corée du Nord', 'Nom de l'étiquette:Mot LOC:Corée du Nord', 'Nom de l'étiquette:Mot PERSONNE:Secrétaire d'État Kato', 'Nom de l'étiquette:Mot PERSONNE:Suga', 'Nom de l'étiquette:Mot PERSONNE:Suga']
>>>
>>> from pprint import pprint
>>> pprint(tmp)
['Nom de l'étiquette:Mot PERSONNE:Secrétaire d'État Kato',
 'Nom de l'étiquette:Mot LOC:Corée du Nord',
 'Nom de l'étiquette:Mot PERSONNE:Secrétaire d'État Kato',
 'Nom de l'étiquette:DATE mot:16e',
 'Nom de l'étiquette:Mot LOC:Corée du Nord',
 'Nom de l'étiquette:Mot LOC:Corée du Nord',
 'Nom de l'étiquette:Mot PERSONNE:Secrétaire d'État Kato',
 'Nom de l'étiquette:Mot PERSONNE:Suga',
 'Nom de l'étiquette:Mot PERSONNE:Suga']
>>>

(Comportement de la méthode au début)

Python3


>>> words_list = extract_words_by_entity_label(text, "aaa")
Son étiquette de représentation unique n'existe pas.
>>>
>>> print(words_list)
[]
>>>
>>> label = "LOC"
>>> words_list = extract_words_by_entity_label(text, label)
>>> print(words_list)
['Corée du Nord', 'Corée du Nord', 'Corée du Nord']
>>>
>>> for label in ["LOC", "DATE", "PERSON"]:
...     print(label, " : ", extract_words_by_entity_label(text, label))
...
LOC  :  ['Corée du Nord', 'Corée du Nord', 'Corée du Nord']
DATE  :  ['16e']
PERSON  :  ['Secrétaire d'État Kato', 'Secrétaire d'État Kato', 'Secrétaire d'État Kato', 'Suga', 'Suga']
>>>

(Site de référence)

  1. Article Qiita de @ moriyamanaoto "Simplifier la description basée sur des règles en utilisant spaCy!"

__ (demande) __

__ Il peut être bon d'extraire un mot avec un attribut d'objet spécifique (* Entité *) du texte cible, puis d'effectuer le traitement suivant. __

  1. Visualisez __ quel contexte dans lequel un mot notable dans le nom ou le lieu d'une personne apparaît dans une phrase avec __ analyse de dépendance__.
  2. Parmi les mots du nom de lieu, visualisez la latitude et la longitude du nom de lieu que vous avez remarqué, le type d'installation, etc. __ en vous référant à l'article suivant.

Recommended Posts

Extraire et lister les noms des personnes et des lieux dans le texte
Extrayez le nom du produit et le prix de la liste de produits dans l'e-mail de déclaration d'achat de Yodobashi.com.
Implémentation de List et Bool en Python et SQLite3 (note personnelle)
Extraire la liste des services dans Azure
Méthodes disponibles dans la liste
En Python, les éléments de la liste sont triés et sortis sous forme d'éléments et de multiples.
Extraire plusieurs doublons de liste en Python
Différence entre list () et [] en Python
Extraire du texte d'images avec Python
Creusez le répertoire et créez une liste de chemins de répertoire + noms de fichiers
Lire et écrire du texte en Python
Extraire tous les n éléments d'un tableau (liste) en Python et Ruby
Rechercher le nom et les données d'une variable libre dans un objet fonction
Text mining: distribution de densité de probabilité sur hypersphère et clustering de texte avec KMeans
Mettre ensemble des valeurs consécutives dans la liste
Prenez la somme logique de List en Python (fonction zip)
Changer la liste dans l'instruction for
Différence entre append et + = dans la liste Python
Trouvez-le dans la file d'attente et modifiez-le
Ajouter des lignes et du texte sur l'image
Obtenir la liste de codes EDINET en Python
[Python] Précautions lors de l'acquisition de données en grattant et en les mettant dans la liste
traitement (python) Diagramme les coordonnées de la liste Spécifiez le nombre de fois dans draw ()
Extraire la couleur de l'objet dans l'image avec le clustering Mask R-CNN et K-Means
Enregistrez l'ID de canal spécifié dans le texte et chargez-le au prochain démarrage
Le lieu à évaluer peut être différent entre la notation d'inclusion de carte et de liste
Recevoir et traiter n objets dans une liste
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Extraire uniquement le nom du fichier à l'exclusion du répertoire dans le répertoire
12. Enregistrez la première colonne dans col1.txt et la deuxième colonne dans col2.txt
[Automation] Extraire le tableau en PDF avec Python
Copiez la liste en Python
À propos de la différence entre "==" et "is" en python
Obtenir uniquement les éléments de sous-classe dans une liste
Je ne peux pas saisir de caractères dans la zone de texte! ?? !! ?? !! !! ??
Lorsque l'axe et l'étiquette se chevauchent dans matplotlib
En version imprimée, les caractères non-ascii de la liste ont fière allure
Rechercher par la valeur de l'instance dans la liste
Extrayez les informations de paroles dans le fichier MP3 / MP4 et enregistrez-les dans le fichier de paroles (* .lrc) pour Sony Walkman.
[Python] Changer la couleur du texte et la couleur d'arrière-plan d'un mot clé spécifique dans la sortie d'impression
J'ai essayé d'extraire le texte du fichier image en utilisant Tesseract du moteur OCR
J'ai comparé la vitesse de la référence du python dans la liste et la référence de l'inclusion du dictionnaire faite à partir de la liste dans.
J'ai étudié le temps de calcul de "X dans la liste" (recherche linéaire / recherche dichotomique) et "X dans l'ensemble"