[PYTHON] Extrahieren und listen Sie die Namen von Personen und Orten im Text auf

Problembewusstsein

  1. Die Extraktion eindeutiger Ausdrücke als Methode zur Analyse von Textsätzen ist eine äußerst zuverlässige Methode, die im guten Sinne "verwelkt" ist.
  2. Als Technik zum Extrahieren von Bedeutung aus Textsätzen gibt es ein automatisches Satzzusammenfassungsmodell, und es wird täglich eine große Anzahl von Artikeln vorgeschlagen, beispielsweise ein automatisches Zusammenfassungsmodell unter Verwendung von Deep Learning.
  3. Die automatische Textzusammenfassungstechnologie ist großartig, aber ich denke, dass die generierten Zusammenfassungen häufig den spezifischen "Personennamen" oder "Ortsnamen" im Originaltext enthalten. Ich werde.
  4. Indem Sie eine Liste aller Wörter mit "persönlichem Namen" ausgeben, die in dem Textsatz enthalten sind, an dem Sie interessiert sind, bezieht sich das Dokument auf "wer" und erwähnt niemanden. Sie können auf einen Blick überprüfen.
  5. Auf diese Weise kann es Fälle geben, in denen die "Informationen", die aus dem Zusammenfassungstext verloren gehen, durch Extrahieren des eindeutigen Ausdrucks herausgeschöpft werden können.

__ (Referenz) __ Es gibt zwei Arten von automatischen Textzusammenfassungsmodellen: * Extraktive Zusammenfassung * und * Abstrakte Zusammenfassung *.

@ Koreyous Qiita-Artikel "Einführung des Papiers: Zusammenfassung neuronaler latenter extraktiver Dokumente" ・ [[DL Round Reading] Abstrakte Zusammenfassung von Reddit-Posts mit mehrstufigen Speichernetzwerken](https://www.slideshare.net/DeepLearningJP2016/dlabstractive-summarization-of-reddit-posts-with-multilevel-memory-networks- 132350977)

__ Dieses Mal habe ich eine Methode definiert, die nur das entsprechende Wort in der Array-Liste aus dem Zieltext zurückgibt, wenn der Beschriftungsname des eindeutigen Ausdrucks angegeben wird. __ __


(Vorbereitungen)

Terminal


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

Diesmal wurde eine selbstgemachte Methode definiert

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("Das eindeutige Darstellungsetikett existiert nicht.")
            words_list = []

    return words_list

Eindeutiger Ausdrucksbezeichnungstyp, der in __ * label * __ angegeben werden kann

__ Die folgende offizielle * spaCy * Website enthält eine Liste der in * spaCy * __ definierten * Entity * -Label-Namen

Etikettentyp


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.

(Anwendungsbeispiel)

__ Text zur Vorbereitung __

Sekretär Kato betonte, dass er ein Radioprogramm aufnehmen werde, das von der Regierung und anderen an die Entführten in Nordkorea gesendet wurde, und alle Anstrengungen unternehmen werde, um so schnell wie möglich nach Hause zurückzukehren, und sagte: "Umarmen mit Ihrer Familie. Bitte haben Sie weiterhin das starke Gefühl, dass der Tag kommen und überleben wird. "
Am 16. sagte Außenminister Kato, der auch als Minister für die Entführungsfrage zuständig ist, dass sich das "Specified Disappearance Problem Investigation Committee", das das sogenannte spezifische Verschwinden untersucht, das die Möglichkeit einer Entführung durch die Regierung und Nordkorea nicht ausschließen kann, in Nordkorea befindet. Wir haben ein Radioprogramm aufgenommen, das an die Entführten in Japan gesendet wird.
In diesem Zusammenhang sagte Generalsekretär Kato: "Das Thema Entführung wird als das wichtigste Thema im Kan-Kabinett angesehen. Ich habe mich mit meiner Familie zusammen mit Premierminister Kan getroffen und den ernsthaften Wunsch geteilt," um jeden Preis Ergebnisse zu erzielen ". ".
Danach sagte er: "Es ändert nichts an unserer Entschlossenheit, die Hülle des gegenseitigen Misstrauens zu durchbrechen, die unglückliche Vergangenheit zu regeln und die diplomatischen Beziehungen mit Nordkorea zu normalisieren." Ich habe betont, dass ich mein Bestes geben werde.
A Und er sagte: "Denken Sie daran, dass der Tag kommen wird, an dem Sie wieder auf den Boden Ihres Heimatlandes treten und Ihre Familie umarmen, die darauf wartet, dass Sie nach Hause zurückkehren. Bitte passen Sie gut auf sich auf und überleben Sie."

Python3


>>> text = """Sekretärin Kato betonte, dass die Regierung und andere Radioprogramme aufzeichnen werden, die an Entführte in Nordkorea gesendet werden, und ihr Möglichstes tun werden, um so schnell wie möglich nach Hause zurückzukehren. Bitte haben Sie weiterhin das starke Gefühl, dass der Tag kommen und überleben wird. "
Am 16. sagte Außenminister Kato, der auch als Minister für die Entführungsfrage zuständig ist, dass sich das "Specified Disappearance Problem Investigation Committee", das das sogenannte spezifische Verschwinden untersucht, das die Möglichkeit einer Entführung durch die Regierung und Nordkorea nicht ausschließen kann, in Nordkorea befindet. Wir haben ein Radioprogramm aufgenommen, das an die Entführten in Japan gesendet wird.
In diesem Zusammenhang sagte Generalsekretär Kato: "Das Thema Entführung wird als das wichtigste Thema im Kan-Kabinett angesehen. Ich habe mich mit meiner Familie zusammen mit Premierminister Kan getroffen und den ernsthaften Wunsch geteilt," um jeden Preis Ergebnisse zu erzielen ". ".
Dann "Brechen Sie die Hülle des gegenseitigen Misstrauens. Dann" Brechen Sie die Hülle des gegenseitigen Misstrauens. Dann "Brechen Sie die Hülle des gegenseitigen Misstrauens. Dann" Brechen Sie die Hülle des gegenseitigen Misstrauens. Dann "Brechen Sie die Hülle des gegenseitigen Misstrauens." Brechen Sie die Hülle, dann "brechen Sie die Hülle des gegenseitigen Misstrauens und brechen Sie dann" die Hülle des gegenseitigen Misstrauens und dann "Phase....Am 16. sagte Außenminister Kato, der auch als Minister für die Entführungsfrage zuständig ist, dass sich das "Specified Disappearance Problem Investigation Committee", das das sogenannte spezifische Verschwinden untersucht, das die Möglichkeit einer Entführung durch die Regierung und Nordkorea nicht ausschließen kann, in Nordkorea befindet. Wir haben ein Radioprogramm aufgenommen, das an die Entführten in Japan gesendet wird.
...Generalsekretär Kato sagte dazu: "Das Problem der Entführung wird als das wichtigste Problem im Kan-Kabinett angesehen. Wir haben uns mit der Familie zusammen mit Premierminister Kan getroffen und den ernsthaften Wunsch geteilt," um jeden Preis Ergebnisse zu erzielen ". Ich tat. "
...Dann: "Die Hülle des gegenseitigen Misstrauens brechen", "Die Hülle des gegenseitigen Misstrauens brechen", "Die Hülle des gegenseitigen Misstrauens brechen", "Die Hülle des gegenseitigen Misstrauens brechen", "Die Hülle des gegenseitigen Misstrauens brechen". "Die Hülle des gegenseitigen Misstrauens brechen", "Die Hülle des gegenseitigen Misstrauens brechen", "Behalten Sie ein starkes Gefühl der Kameradschaft, bitte kümmern Sie sich gut um Ihren Körper und überleben Sie." Ich rief."""
>>>
>>> text = text.replace("\n", "")
>>> text
'Sekretärin Kato betonte, dass die Regierung und andere Radioprogramme aufzeichnen werden, die an Entführte in Nordkorea gesendet werden, und alle Anstrengungen unternehmen werden, um so schnell wie möglich nach Hause zurückzukehren, und sagte: "Umarmen Sie sich mit Ihrer Familie. Bitte haben Sie weiterhin das starke Gefühl, dass der Tag kommen und überleben wird. " Am 16. sagte Außenminister Kato, der auch als Minister für die Entführungsfrage zuständig ist, dass das "Specified Disappearance Problem Investigation Committee", das das sogenannte spezifische Verschwinden untersucht, das von der Regierung und Nordkorea nicht ausgeschlossen werden kann, sagte Wir haben ein Radioprogramm aufgenommen, das an die Entführten in Japan gesendet wird. Generalsekretär Kato sagte dazu: "Das Problem der Entführung wird als das wichtigste Problem im Kan-Kabinett angesehen. Ich habe mich mit meiner Familie zusammen mit Premierminister Kan getroffen und den ernsthaften Wunsch geteilt," um jeden Preis Ergebnisse zu erzielen ". ". Dann: "Die Hülle des gegenseitigen Misstrauens brechen", "Die Hülle des gegenseitigen Misstrauens brechen", "Die Hülle des gegenseitigen Misstrauens brechen", "Die Hülle des gegenseitigen Misstrauens brechen", "Die Hülle des gegenseitigen Misstrauens brechen". Nach dem Brechen der Hülle, "Brechen der Hülle des gegenseitigen Misstrauens", Brechen der Hülle des gegenseitigen Misstrauens, "Behalten Sie ein starkes Gefühl der Gegenseitigkeit, bitte kümmern Sie sich gut um Ihren Körper und überleben Sie." Ich tat.'

(Eindeutiger Ausdruck im obigen Text enthalten)

Python3


>>> import spacy
>>> from spacy.matcher import Matcher
>>> nlp = spacy.load('ja_ginza')
>>>
>>> tmp = ["Markenname:  {label}Wort: {word}".format(label=ent.label_, word= ent.text) for ent in doc.ents]
>>> tmp
['Markenname:PERSON Wort:Staatssekretär Kato', 'Markenname:LOC-Wort:Nord Korea', 'Markenname:PERSON Wort:Staatssekretär Kato', 'Markenname:DATUM Wort:16 ..', 'Markenname:LOC-Wort:Nord Korea', 'Markenname:LOC-Wort:Nord Korea', 'Markenname:PERSON Wort:Staatssekretär Kato', 'Markenname:PERSON Wort:Suga', 'Markenname:PERSON Wort:Suga']
>>>
>>> from pprint import pprint
>>> pprint(tmp)
['Markenname:PERSON Wort:Staatssekretär Kato',
 'Markenname:LOC-Wort:Nord Korea',
 'Markenname:PERSON Wort:Staatssekretär Kato',
 'Markenname:DATUM Wort:16 ..',
 'Markenname:LOC-Wort:Nord Korea',
 'Markenname:LOC-Wort:Nord Korea',
 'Markenname:PERSON Wort:Staatssekretär Kato',
 'Markenname:PERSON Wort:Suga',
 'Markenname:PERSON Wort:Suga']
>>>

(Verhalten der Methode am Anfang)

Python3


>>> words_list = extract_words_by_entity_label(text, "aaa")
Das eindeutige Darstellungsetikett existiert nicht.
>>>
>>> print(words_list)
[]
>>>
>>> label = "LOC"
>>> words_list = extract_words_by_entity_label(text, label)
>>> print(words_list)
['Nord Korea', 'Nord Korea', 'Nord Korea']
>>>
>>> for label in ["LOC", "DATE", "PERSON"]:
...     print(label, " : ", extract_words_by_entity_label(text, label))
...
LOC  :  ['Nord Korea', 'Nord Korea', 'Nord Korea']
DATE  :  ['16 ..']
PERSON  :  ['Staatssekretär Kato', 'Staatssekretär Kato', 'Staatssekretär Kato', 'Suga', 'Suga']
>>>

(Referenzseite)

  1. @ moriyamanaotos Qiita-Artikel "Vereinfachen Sie die regelbasierte Beschreibung mit spaCy!"

__ (Bewerbung) __

__ Es kann sinnvoll sein, ein Wort mit einem bestimmten Attribut (* Entity *) aus dem Zieltext zu extrahieren und anschließend die folgende Verarbeitung durchzuführen. __ __

  1. Stellen Sie sich vor, in welchem Kontext ein auffälliges Wort im Namen oder an der Stelle einer Person in einem Satz mit der Abhängigkeitsanalyse vorkommt.
  2. Visualisieren Sie unter den Ortsnamenwörtern den Breiten- und Längengrad des Ortsnamens, den Sie bemerkt haben, die Art der Einrichtung usw. __, indem Sie auf den folgenden Artikel verweisen.

Recommended Posts

Extrahieren und listen Sie die Namen von Personen und Orten im Text auf
Extrahieren Sie den Produktnamen und den Preis aus der Produktliste in der E-Mail mit der Kaufabrechnung von Yodobashi.com.
Implementierte List und Bool in Python und SQLite3 (persönliche Notiz)
Extrahieren Sie die Liste der Dienste in Azure
In der Liste verfügbare Methoden
In Python werden die Elemente in der Liste sortiert und als Elemente und Vielfache ausgegeben.
Extrahieren Sie mehrere Listenduplikate in Python
Unterschied zwischen list () und [] in Python
Extrahieren Sie mit Python Text aus Bildern
Durchsuchen Sie das Verzeichnis und erstellen Sie eine Liste mit Verzeichnispfaden und Dateinamen
Lesen und Schreiben von Text in Python
Extrahieren Sie alle n Elemente aus einem Array (einer Liste) in Python und Ruby
Suchen Sie den Namen und die Daten einer freien Variablen in einem Funktionsobjekt
Text Mining: Wahrscheinlichkeitsdichteverteilung auf Hypersphäre und Textclustering mit KMeans
Fügen Sie aufeinanderfolgende Werte in der Liste zusammen
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
Ändern Sie die Liste in der for-Anweisung
Unterschied zwischen Anhängen und + = in der Python-Liste
Suchen Sie es in der Warteschlange und bearbeiten Sie es
Fügen Sie dem Bild Linien und Text hinzu
Ruft die EDINET-Codeliste in Python ab
[Python] Vorsichtsmaßnahmen beim Erfassen von Daten durch Scraping und Einfügen in die Liste
Verarbeitung (Python) Diagramm der Koordinaten der Liste Geben Sie an, wie oft in draw ()
Extrahieren Sie die Farbe des Objekts im Bild mit Mask R-CNN und K-Means Clustering
Speichern Sie die angegebene Kanal-ID im Text und laden Sie sie beim nächsten Start
Der zu bewertende Ort kann sich zwischen der Karten- und Listeneinschlussnotation unterscheiden
Empfangen und verarbeiten Sie n Objekte in einer Liste
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
Extrahieren Sie nur den Dateinamen mit Ausnahme des Verzeichnisses im Verzeichnis
12. Speichern Sie die erste Spalte in col1.txt und die zweite Spalte in col2.txt
[Automatisierung] Extrahieren Sie die Tabelle als PDF mit Python
Kopieren Sie die Liste in Python
Über den Unterschied zwischen "==" und "is" in Python
Holen Sie sich nur Unterklassenelemente in eine Liste
Ich kann keine Zeichen in den Textbereich eingeben! ?? !! ?? !! !! ??
Wenn sich Achse und Beschriftung in matplotlib überlappen
Im Druck sehen die Nicht-ASCII-Zeichen in der Liste großartig aus
Suchen Sie nach dem Wert der Instanz in der Liste
Extrahieren Sie die Textinformationen in die MP3 / MP4-Datei und speichern Sie sie in der Textdatei (* .lrc) für Sony Walkman.
[Python] Ändern Sie die Textfarbe und Hintergrundfarbe eines bestimmten Schlüsselworts in der Druckausgabe
Ich habe versucht, den Text in der Bilddatei mit Tesseract der OCR-Engine zu extrahieren
Ich habe die Geschwindigkeit der Referenz des Pythons in der Liste und die Referenz der Wörterbucheinbeziehung aus der In-Liste verglichen.
Ich habe die Berechnungszeit von "X in Liste" (lineare Suche / dichotome Suche) und "X in Menge" untersucht.