[PYTHON] Ich habe versucht, Spieler- und Fertigkeitsnamen aus Sportartikeln zu extrahieren

Motive [Derzeitiger Plan für die Qiita x COTOHA-API] Dies ist ein verwandter Beitrag.

Ich habe versucht, eine andere API zu verwenden als Problem, dass mir Schokolade nicht gemacht wird, selbst wenn ich mit der COTOHA-API zusammenarbeite.

Diesmal Extraktion eindeutiger Ausdrücke (/ nlp / v1 / ne) API.

Mit MeCab habe ich das Gefühl, dass ich den Namen der Person nicht extrahieren konnte, ohne die richtige Nomenklatur zu lernen und sie im Wörterbuch zu registrieren. Auch KNP scheint eine gute Genauigkeit zu haben, aber das Paket selbst ist schwer. : Schrei: Wenn eine morphologische Analyse durchgeführt wird, ist es auch möglich, selbst den Teil des Verteilers genau auszugeben, ob der maschinell erlernte Verteiler ausgezeichnet ist, aber ich bin der Meinung, dass dies nicht der Fall ist, wenn ich die Nomenklatur klassifizieren könnte, die häufig im Satz vorkommt. Ich werde. COTOHA klassifiziert die Nomenklatur nur nach API im Detail.

Um leicht zu versuchen, wie weit die richtige Nomenklatur extrahiert werden kann, habe ich versucht, den Namen der Person und den Namen der Technik aus dem Sportartikel auszugeben.

Environment

Dataset Tokyo Sports Das Auswahlkriterium ist ein wichtiger Grund dafür, dass diese Sportzeitung in Ihrem Wohngebiet nicht erhältlich ist. : camera_with_flash:

Method Wie oben erwähnt COTOHA API-spezifische Extraktion https://api.ce-cotoha.com/contents/reference/apireference.html#parsing_io_part Ich benutze.

Der Spieler (die Person) ist "x [" Klasse "] ==" PSN "und x [" erweiterte_Klasse "] ==" ", der Name der Technik ist" x ["Klasse"] == "ART" und x ["erweiterte_Klasse". "] im [ "Doctrine_Method_Other"] Es wird mit extrahiert.Doctrine_Method_Other` bedeutet (Hauptmethode name_other).

Name Erläuterung
ORG Name der Organisation
PSN Name der Person
LOC Ort
ART Einzigartiger Name
DAT Datumsdarstellung
TIM Zeitdarstellung
NUM Numerische Darstellung
MNY Betragsausdruck
PCT Prozentualer Ausdruck
OTH Andere

Development

Script

** Skriptcode ** (Klicken Sie hier, um den Code anzuzeigen.)
import argparse
import requests
from bs4 import BeautifulSoup
import json

#---Holen Sie sich diese 4 Parameter in Portal---
PUBLISH_URL = "--- get your parameter ---"
CLIENT_ID = "--- get your parameter ---" 
CLIENT_SECRET = "--- get your parameter ---" 
BASE_URL = "--- get your parameter ---"


class COTOHA:

    def __init__(self):
        self._token = self._getAccessToken()

    def _getAccessToken(self):
        header = {"Content-Type": "application/json"}
        contents = {
            "grantType": "client_credentials",
            "clientId": CLIENT_ID,
            "clientSecret": CLIENT_SECRET
        }
        raw_res = requests.post(PUBLISH_URL, headers=header, json=contents)
        response = raw_res.json()
        return response["access_token"]

    def compose(self, sentence):
        header = {
            "Authorization": "Bearer {}".format(self._token),
            "Content-Type": "application/json"
        }
        contents = {
            "sentence": sentence
        }
        raw_res = requests.post(
            BASE_URL +
            "nlp/v1/parse",
            headers=header,
            json=contents)
        response = raw_res.json()
        return response

    def properNoun(self, sentence):
        header = {
            "Authorization": "Bearer {}".format(self._token),
            "Content-Type": "application/json"
        }
        contents = {
            "sentence": sentence
        }
        raw_res = requests.post(
            BASE_URL +
            "nlp/v1/ne",
            headers=header,
            json=contents)
        response = raw_res.json()
        return response

    def keyword(self, sentence):
        header = {
            "Authorization": "Bearer {}".format(self._token),
            "Content-Type": "application/json"
        }
        contents = {
            "document": sentence
        }
        raw_res = requests.post(
            BASE_URL +
            "nlp/v1/keyword",
            headers=header,
            json=contents)
        response = raw_res.json()
        return response

    def coreference(self, sentence):
        header = {
            "Authorization": "Bearer {}".format(self._token),
            "Content-Type": "application/json"
        }
        contents = {
            "document": sentence
        }
        raw_res = requests.post(
            BASE_URL +
            "nlp/v1/coreference",
            headers=header,
            json=contents)
        response = raw_res.json()
        return response


def extract_norn_list(_apiobj, contents, condition):
    dst = []
    for p in contents:
        items = _apiobj.properNoun(p.text)["result"]
        _raw = list(filter(condition, items))

        # print(_raw)
        #Abkürzung ist ausgeschlossen
        for _p in _raw:
            name = _p["form"]
            _exist = False
            for pname in dst:
                if name in pname:
                    _exist = True
            if not _exist:
                dst.append(name)
    return dst


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--url")
    args = parser.parse_args()

    #API-Objekt erstellen
    cotoha = COTOHA()

    #Artikel von URL abrufen(Tokio Sportspezifikationen)
    res = requests.get(args.url)
    soup = BeautifulSoup(res.text, 'html.parser')
    title_text = soup.find('title').get_text()
    contents = soup.find('div', {"class": "detail-content"}).find_all("p")

    #Extraktionsbedingung
    def is_person(x): return x["class"] == "PSN" and x["extended_class"] == ""
    def is_attack(x): return x["class"] == "ART" and x["extended_class"] in [
        "Doctrine_Method_Other"]

    #Spieler ausgeben
    print(extract_norn_list(cotoha, contents, is_person))
    #Name der Ausgabetechnik
    print(extract_norn_list(cotoha, contents, is_attack))

if __name__ == "__main__":
    main()

Command

python main.py --url https://www.tokyo-sports.co.jp/prores/ddt/1754700/

Consequence

Führen Sie mit zwei Artikeln aus.

[Neuer Tag 1.5 Tokyo Dome] Minoru griff Moxley an, um den US-Thron zu verteidigen. "Wen verkaufen Sie Kämpfe?"

https://www.tokyo-sports.co.jp/prores/njpw/1682622/

dataset

In der IWGP / US-Schwergewichtsmeisterschaft, die an der größten Abendkasse des Jahres "Wrestle Kingdom 14" (Tokyo Dome am 5.) stattfand, war Champion John Moxley (34) der IWGP-Tag-Champion Juice Robinson (30). Er lehnte die Herausforderung ab und gelang seine erste Verteidigung.
Beim Tokyo Dome Tournament am Abend zuvor (4.) gewann Moxley den Titel von Reims Archer (32) zurück. Juice gewann die Tag Championship in Kombination mit David Finley (26). Am nächsten Tag war es ein entscheidender Kampf zwischen den neuen Champions, aber Moxley hatte Juice letzten Juni den Thron abgenommen und erklärt, dass er sich in der Nacht zuvor auf dem Ring niederlassen würde.
In der Anfangsphase übernahm Juice die Führung, aber Moxley nahm einen Stuhl vor dem Veranstaltungsort heraus und schlug ihm auf den Rücken. Außerdem beißt es auf die Stirn des Saftes. Ein rauer Mann, der während der WWE-Ära als "verrückter Hund" tobte, gewann sein Tempo gewaltsam zurück.
Saft konterte mit einer gewagten Hochwinkel-Kraftbombe, aber der Champion feuerte eine Reihe unerwarteter Angriffe mit einer vierförmigen Eisensäule eines vierbeinigen Charakters ab. Der Herausforderer ist Deutscher vom Lawinenhirnbuster bis zu Jack Hammer. Ich bin Moxleys Deslider (DDT mit zwei Armen) ausgewichen und habe ihn mit Lariart ausgestanzt.
Der Champion blitzt jedoch ein starkes laufendes Knie aus der zerschmetterten Schlacht. Nachdem er die Fruchtfleischreibung des Saftes zurückgedreht hatte, explodierte er einen tödlichen Deslider aus dem DDT und nahm 3 Zählungen nach 12 Minuten und 48 Sekunden vor.
Nach dem Match wurde das Lied zum Eingangsthema gespielt und Minoru Suzuki (51) erschien plötzlich. Beim Hiroshima-Turnier am 8. Dezember letzten Jahres wurde ich von einem Deslider aus einer Moschee getroffen, und ich kann meinen Ärger nicht mit einem schroffen Blick verbergen. Nachdem er das Trikot auf der Blumenstraße ausgezogen und sich auf den Kampf vorbereitet hatte, traf er den Champion und den Ellbogen am Ring. Minoru, der mächtig ist, KOed Moxley mit einem Gotch-Rammgerät aus bloßer Strangulation.
Minoru griff nach dem Mikrofon und erklärte den Krieg: "An wen verkaufst du den Kampf, diese Schafgarbe? Ich bin Minoru Suzuki, ein professioneller Wrestler. Ich werde diesen Kampf kaufen!" Der Ausbruch eines "Tollwut" gegen "Bösewicht" über dem US-Thron gab einen gefährlichen Geruch ab.
Minorus Geschichte "An wen verkaufen Sie Kämpfe? Hey. Ich habe darauf gewartet, dass Sie vor mich kommen. John Moxley ... Nein, John Boy, passen Sie auf mich auf. Ich werde Sie töten."
Juices Geschichte "Hier endet alles. John Moxley war heute stärker als ich. Ich konnte es nicht noch einmal übertreffen. Ich habe heute nach dem gestrigen Spiel an heute gedacht. Bis dahin das heutige Spiel. Daran habe ich nicht gedacht. "

output

['John Moxley', 'Lance Archer', 'David Finley', 'Minoru Suzuki', 'John Boy']
['Fuß 4 Zeichen Konsolidierung', 'Lawine', 'Jack Hammer', 'Lariart', 'Nackte Strangulation']

[Neuer Tag 1.4 Tokyo Dome] Naito gewinnt den IC-Titel zurück, indem er "Der Zweck ist nicht dieser Gürtel" umkehrt.

https://www.tokyo-sports.co.jp/prores/njpw/1681815/

dataset

Tetsuya Naito (37) besiegte Champion Jay White (27) bei der IWGP Intercontinental (IC) Championship, die an der größten Abendkasse von New Japan Pro-Wrestling "Wrestle Kingdom 14" (Tokyo Dome am 4.) stattfand. Zusätzlich zur Wiedererlangung des Titels erreichte er am 5. beim Tokyo Dome-Turnier ein Doppeltitel-Match mit dem IWGP-Schwergewichts-Champion (Gewinner von Okada Kazuchika gegen Kota Iibushi).
Beim Kobe-Turnier im September letzten Jahres gegen Jay verloren und letztes Jahr zum zweiten Mal vom IC-Titel gefallen. Beim "Pro-less Grand Prize" der Tokyo Sports Newspaper erlebte er auch die Demütigung der Nominierung "0". Eine große Menge wartet jedoch auf die Auferstehung des "außer Kontrolle geratenen Mannes". Als er sich von Anfang an mit einem großen Naito-Anruf den Rücken drückte, gab er Jay einen gnadenlosen Boo.
Naito übernahm die Führung, indem er mit einer Schürze außerhalb des Veranstaltungsortes auf einen Nackenbrecher schoss. Jays zweite Außenstraße zieht jedoch Naitos Bein von außen und stört das Tempo. Der Champion konzentrierte sich auf Naitos linkes Knie und griff an. Naito springt aus der Ecke und wehrt sich mit Frankensteiner. Es ist ein Drop-Kick in geringer Höhe, der nach dem Spucken auf das Gesicht des Gegners aufgespießt wird.
Es schien, als würde dies das Tempo halten, aber er war in Qual, nachdem er Jays DDT gegessen hatte und wurde erneut auf seinem linken Knie angegriffen. Es wird mit einem Rückfall aus der Halle geworfen, und die Minderwertigkeit ändert sich nicht. Darüber hinaus wurden die Knie mit dem Charakter des hinteren Fußes 4 gestrafft.
Naito bricht zur Not das Seil und verzerrt sein Gesicht. Als ich entkommen konnte, war es ein Gegenangriff. Darüber hinaus der Ansturm von Spine Buster, Rotary DDT, Lawine Frankensteiner und Gloria. Die Außenstraße brach in die Lücke ein, als der Schiedsrichter aufgrund eines Unfalls ausfiel, aber er wurde von einem Schleichangriff zurückgeschlagen.
Naito, der das Spiel spielte, feuerte eine Reihe von Destino im Coryend-Stil ab. Nachdem er Jays tödlichen Klingenläufer (verwandeltes Gesichtsquetschen) vollständig verhindert hatte, nahm er schließlich 3 Zählungen mit dem ganzen Körper von Destino vor.
Umkehrsieg in der heftigen Schlacht von 33 Minuten 54 Sekunden. Der "unkontrollierbare Mann", der sich seit Januar letzten Jahres für zwei Kronen mit IWGP und IC einsetzt, wird die große Bühne der Generation herausfordern, die Wiederbelebung abzuschließen.
[Naitos Geschichte] "Der Zweck dieser Zwei-Spiele-Serie ist nicht, diesen Gürtel zu nehmen. Ich bin froh, dass der Kunde" Glückwunsch an Naito "sagte. Aber Tranquilo. Es ist nicht der Zweck dieser Zeit, also da. Nun, welches ist der Gegner von morgen? Mein Plan ist Okada. Ideal ist Okada. Komm schon. "
[Jay Whites Geschichte] "Wo ist er (Naito) hingegangen ... Ich war leider einer der Nebenspieler in der Geschichte, die jeder gemacht hat. Jeder wollte, dass Jay White verliert. Es muss gewesen sein. Naito, den du magst, hat gewonnen. Warum lachst du nicht? Mein neuer Destino ... Das Schicksal beginnt morgen. "

output

['Tetsuya Naito', 'Jay White', 'Okada Kazuchika', 'Kota Iibushi', 'Destino...Schicksal']
['Halsabschneider', 'Zurück fallen', 'Fuß 4 Zeichen Konsolidierung', 'Wirbelsäulen-Buster']

Consideration ――Die Namen der Spieler werden mit Ausnahme von "Destino ... Fate" extrahiert. Es scheint, dass allgemeine Personennamen ohne Probleme klassifiziert werden können. ――Es ist ein technischer Name, der jedoch leider nicht in der COTOHA-API-Klassifizierung enthalten ist. Die Kombination, die aus der Ausgabe der API mehrmals am besten extrahiert zu werden scheint, war class: ART, extended_class: Doctrine_Method_Other, also habe ich versucht, sie auszugeben, aber ich habe versucht, sie auszugeben, aber" High Angle Power Bomb "und" Coryend Type Destino " "Ist nicht abgedeckt. Wenn Sie als zweite Bedingung "Klasse: ART, erweiterte_Klasse: Produkt" hinzufügen, wird ein anderer Name als der Name der Technik extrahiert, sodass 100% streng waren: müde_gesicht: ――Wenn es sich eher um ein Fachbuch als um einen Sportartikel handelt, kann es effektiv sein. Dies liegt daran, dass die folgenden Typparameter zur API hinzugefügt werden können. (Nur für Enterprise-Benutzer, daher gegen Gebühr erhältlich.)

param name
IT Computer / Information / Kommunikation
automobile Wagen
chemistry Chemie- und Erdölindustrie
company Unternehmen
construction Tiefbau und Bau
economy Wirtschaft / Gesetze
energy Kraft / Energie
institution Institution / Organisation
machinery Maschine
medical Medizin
metal Nicht Eisen / Metall

PostScript Ich sagte, dass die Genauigkeit der Extraktion von Personennamen gut ist, aber aus irgendeinem Grund wurde der kürzlich pensionierte "Beast God Thunder Liger" nicht korrekt extrahiert. Es wurde als "ART: Unique object name" klassifiziert. : japanese_ogre: Ist es nicht besser, die Mitarbeiter des Talentverzeichnisses zu entsenden und zu unterstützen? Als: Sushi :.

Recommended Posts

Ich habe versucht, Spieler- und Fertigkeitsnamen aus Sportartikeln zu extrahieren
Ich habe versucht, Zeichen aus Untertiteln zu extrahieren (OpenCV: tesseract-ocr edition)
Ich habe versucht, Zeichen aus Untertiteln zu extrahieren (OpenCV: Google Cloud Vision API)
Ich habe versucht, die Bewegungen von Wiire-Playern automatisch mit Software zu extrahieren
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe DCGAN implementiert und versucht, Äpfel zu generieren
[Einführung in PID] Ich habe versucht, ♬ zu steuern und zu spielen
Python-Programmierung: Ich habe versucht, Nachrichtenartikel mit Selenium und BeautifulSoup4 abzurufen (zu crawlen)
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Ich habe versucht, den G-Test und die E-Qualifikation durch Training ab 50 zu bestehen
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, CPython ein Post-Inkrement hinzuzufügen. Übersicht und Zusammenfassung
Ich habe versucht, verschiedene Informationen von Remote-PC aus Python von WMI Library zu extrahieren
Ich habe versucht, Linux Systemaufrufe und Scheduler hinzuzufügen
Ich habe versucht zu debuggen.
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Ich habe versucht, Dropout zu erklären
Ich habe versucht, Scrapy auf Anaconda zu installieren und konnte es nicht
Ich habe versucht, eine Webanwendung zu entwickeln, und überlegt, wie ich verhindern kann, dass Anfänger krank werden.
Ich habe einen Server mit Python-Socket und SSL erstellt und versucht, über den Browser darauf zuzugreifen
Ich habe versucht, die Shogi-Spieler Takami 7th Dan und Masuda 6th Dan von CNN zu klassifizieren [Für CNN-Anfänger]
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Ich habe versucht, die Informationen des Webs mit "Requests" und "lxml" abzurufen.
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe versucht, Perceptron Teil 1 [Deep Learning von Grund auf neu] zu implementieren.
Ich habe versucht, verschiedene Informationen von der Codeforces-API abzurufen
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen
Ich habe versucht, PredNet zu lernen
Ich habe versucht, PCANet zu implementieren
Ich habe versucht, Pylint vorzustellen
jupyter ich habe es berührt
Ich habe versucht, StarGAN (1) zu implementieren.
Ich habe versucht, einen Dienst zu entwickeln, der Artikel nach Zweck auflisten kann
[Qiita API] [Statistik • Maschinelles Lernen] Ich habe versucht, die bisher veröffentlichten Artikel zusammenzufassen und zu analysieren.
Ich habe versucht, die Lesezeichen zu visualisieren, die mit Doc2Vec und PCA nach Slack fliegen
Ich habe versucht, Kanas handschriftliche Zeichenerkennung Teil 1/3 zuerst von MNIST zu machen
Ich habe versucht, Pepper über Ereignisinformationen und Mitgliederinformationen sprechen zu lassen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, ein Standbild aus dem Video auszuschneiden
Ich habe versucht, Gesichtsmarkierungen mit Python und Dlib leicht zu erkennen
Ich habe versucht, mit pypyodbc Preparation 1 schnell Daten von AS / 400 abzurufen
Ich habe versucht, E-Mails von Node.js und Python mithilfe des E-Mail-Zustelldienstes (SendGrid) von IBM Cloud zuzustellen!
Ich habe versucht, Deep VQE zu implementieren
Ich habe versucht, eine Quip-API zu erstellen
Ich habe versucht, Python zu berühren (Installation)
Ich habe versucht, eine kontroverse Validierung zu implementieren
Ich habe Watson Voice Authentication (Speech to Text) ausprobiert.
Ich habe Teslas API berührt
Ich habe versucht, Aufgaben bei Sellerie in die Warteschlange zu stellen