[PYTHON] Automatische Quizgenerierung mit COTOHA

1. 1. Am Anfang

Qiita debütierte mit Dingen lol. Zuvor habe ich versucht, mithilfe der von NTT Communications bereitgestellten API zur Verarbeitung natürlicher Sprache / COTOHA automatisch eine Quiz-Qualitätssicherung zu generieren. Jedes Mal fand ein Geschenkprojekt mit Herrn Qiita statt, daher bin ich wirklich enttäuscht. Deshalb werde ich über die automatische Generierung von QS-Tests mithilfe von Nachrichtenartikeln schreiben.

2. Entwicklungsumgebung

*Google Colaboratory *Python3

3. 3. Überblick

Was ich tun möchte, ist zum Beispiel

Am 18. fand 27 aufeinanderfolgende Wochen lang eine Demonstration der Yellow Best-Bewegung in Frankreich statt, die gegen die Macron-Regierung protestierte. Nach Angaben des Innenministeriums ...

Wenn Sie Informationen wie "wer" und "wo" gut lesen können, wenn es einen Artikel wie gibt

Frage: Wo hat die Yellow Best Movement in der 18. und 27. Woche in Folge gegen die Macron-Administration protestiert? Antwort: Frankreich

Die Motivation ist, dass Sie automatisch Fragensätze und Antworten erstellen können. Lassen Sie COTOHA diesen "guten" Teil übernehmen.

Vier. Satzanalyse

Lassen Sie uns den Beispielsatzartikel von früher in die Syntaxanalyse von COTOHA werfen.

curl -H "Content-Type:application/json;charset=UTF-8" -H "Authorization:Bearer **Eigenes Token**" -X POST -d '{"sentence":"Am 18. fand 27 aufeinanderfolgende Wochen lang eine Demonstration der Yellow Best-Bewegung statt, die gegen die Macron-Regierung in Frankreich protestierte."}' "https://api.ce-cotoha.com/api/dev/nlp/v1/parse"

Die Antwort sieht so aus. Die morphologische Analyse wurde fest durchgeführt, und es konnte festgestellt werden, dass "Frankreich" "[" einzigartig "," Erde "]" ist.

{
  "result" : [ {
    "chunk_info" : {
      "id" : 0,
      "head" : 8,
      "dep" : "D",
      "chunk_head" : 0,
      "chunk_func" : 1,
      "links" : [ ]
    },
    "tokens" : [ {
      "id" : 0,
      "form" : "Frankreich",
      "kana" : "Frankreich",
      "lemma" : "Frankreich",
      "pos" : "Substantiv",
      "features" : [ "Einzigartig", "Boden" ],
      "dependency_labels" : [ {
        "token_id" : 1,
        "label" : "case"
      } ],
      "attributes" : { }
    }, {
      "id" : 1,
      "form" : "damit",
      "kana" : "De",
      "lemma" : "damit",
      "pos" : "Fallassistent",
      "features" : [ "Dauereinsatz" ],
      "attributes" : { }
    } ]
  }, {
    "chunk_info" : {
      "id" : 1,
      "head" : 2,
      "dep" : "D",
      "chunk_head" : 1,
      "chunk_func" : 2,
      "links" : [ ]
    },
    "tokens" : [ {
      "id" : 2,
      "form" : "Längezeichen",
      "kana" : "Längezeichen",
      "lemma" : "Längezeichen",
      "pos" : "Substantiv",
      "features" : [ ],
      "attributes" : { }
    }, {
      "id" : 3,
      "form" : "Verwaltung",
      "kana" : "Seiken",
      "lemma" : "Verwaltung",
      "pos" : "Nomenklatursuffix",
      "features" : [ "Substantiv" ],
      "dependency_labels" : [ {
        "token_id" : 2,
        "label" : "compound"
      }, {
        "token_id" : 4,
        "label" : "case"
      } ],
      "attributes" : { }
    }, {
      "id" : 4,
      "form" : "Zu",
      "kana" : "D.",
      "lemma" : "Zu",
      "pos" : "Fallassistent",
      "features" : [ "Dauereinsatz" ],
      "attributes" : { }
    } ]
  }

Andererseits scheint es derzeit schwierig zu sein, bis Macron der Name einer Person ist. Da die Phraseninformationen in einem Block namens "chunk_info" (großartig !!) enthalten sind, schreiben Sie den Originalartikel neu, wenn eine bestimmte Phrase einen Ortsnamen usw. enthält, sodass die Phrase (Ortsname) die Antwort ist. Wenn ja, sieht es aus wie ein Quiz.

5. Implementierung

Dieses Mal habe ich versucht, zwei Muster von Ortsname und Person einzugeben.

import collections
import requests
import json

#Eingabeanweisung
sentence = 'Am 18. fand 27 aufeinanderfolgende Wochen lang eine Demonstration der Yellow Best-Bewegung statt, die gegen die Macron-Regierung in Frankreich protestierte.'
url = 'https://api.ce-cotoha.com/api/dev/nlp/v1/parse'
headers = {'Content-Type':'application/json;charset=UTF-8','Authorization':'Bearer **Token**'}
payload={'sentence':sentence}

#Anfrage an COTOHA
r = requests.post(url, data=json.dumps(payload), headers=headers)

#Speichern Sie die Ergebnisse der Syntaxanalyse
data = r.json()
j = json.dumps(data["result"])
chunk_dic = json.loads(j, object_pairs_hook=collections.OrderedDict)

quiz_flug = 100
chunk_dic_len = len(chunk_dic)
token = ""

#Beurteilen Sie, ob der Name oder der Ortsname einer Person für jede Klausel enthalten ist. Wenn gefunden, machen Sie es zu einem Quizkandidaten
for i in range(chunk_dic_len):
    dic = chunk_dic[i]
    dic_len = len(dic["tokens"])
    for j in range(dic_len):
      if "Name" in dic["tokens"][j]["features"] and "Nachname" in dic["tokens"][j]["features"] and "Einzigartig" in dic["tokens"][j]["features"]:
        #Beantworten Sie das Quiz
        key_word = dic["tokens"][j]["form"]
        #Variablen zum Extrahieren von Klauseln aus dem Originalartikel
        for s in range(dic_len):
          token = token + dic["tokens"][s]["form"]
        quiz_flug = "0"

      elif "Boden" in dic["tokens"][j]["features"] and "Einzigartig" in dic["tokens"][j]["features"]:
        key_word = dic["tokens"][j]["form"]
        for s in range(dic_len):
          token = token + dic["tokens"][s]["form"]
        quiz_flug = "1"
          
question_sentence = sentence[sentence.find(token):]
question_sentence = question_sentence.replace(token, '')

#Ändern Sie den Quizsatz für jede extrahierte Nomenklatur
if quiz_flug == "0":
  question_sentence = question_sentence[:-1] + "Wer ist"
elif quiz_flug == "1":
  question_sentence = question_sentence[:-1] + "Wo ist es?"
  
print("Problem:",question_sentence)
print("Antworten:",key_word)

Ausführungsergebnis

Frage: Wo hat die Yellow Best Movement in der 18. und 27. Woche in Folge gegen die Macron-Administration protestiert?
Antwort: Frankreich

Das Ziel ist vorerst erreicht.

6. Prüfung

Experimentieren Sie mit verschiedenen Artikeln.

・ Originalartikel ①
###
#Ehemalige Morgentochter. In Talent Private gab "Mutter von 4 Kindern" Nozomi Tsuji am 17. bekannt, dass sie "Tsuji-chan Nell" eröffnen und ihr YouTube-Debüt geben wird."
###
Frage: Wer hat am 17. "Tsuji-chan Nell" eröffnet und angekündigt, dass es sein YouTube-Debüt geben wird?
Antwort: Nozomi Tsuji
・ Originalartikel ②
###
#Eine führende Zeitung berichtete, dass Präsident Trump nicht im Voraus informiert worden war, und äußerte sich verärgert über die Rückkehr von 14 amerikanischen Passagieren auf einem Kreuzfahrtschiff, von dem bestätigt wurde, dass sie mit dem neuen Corona-Virus per Charterflugzeug infiziert sind. Es war.
###
Frage: Wo hat die führende Zeitung berichtet, dass Präsident Trump wütend war, ohne vorher darüber informiert zu werden, dass er 14 Personen in einem Charterflugzeug zurückgebracht hatte?
Antwort: Amerika
・ Originalartikel ③
###
#In Bezug auf die Burg Gifu, die als Bergburg bekannt ist, die Nobunaga Oda während der Zeit der Streitenden Staaten eroberte, gab die Stadt Gifu am 7. bekannt, dass sie die Steinmauer des Burgturms (die Basis des Burgturms) entdeckt hat, von der Nobunaga glaubte, sie sei durch Ausgrabungen errichtet worden.
###
Frage: Wo haben Sie am 7. angekündigt, dass Sie zum ersten Mal die Steinmauer des Burgturms (die Basis des Burgturms) entdeckt haben, die Nobunaga bei der Ausgrabungsuntersuchung errichtet zu haben scheint?
Antwort: Gifu City

Es ist schwer zu sagen, dass es eine perfekte Ausgabe ist, aber es ist ein potenzielles Ergebnis! Ich möchte die Genauigkeit verbessern und gleichzeitig die Regeln etwas genauer unter die Lupe nehmen! !!

7. Zitat

Französische Demonstration ein halbes Jahr, verkleinern (Kyodo News) Nozomi Tsuji kündigt ihr Debüt auf YouTube "Mit meiner eigenen Erfahrung" an, um Informationen und Schönheitsinformationen für Mütter bereitzustellen (Oricon News) Rückkehr der infizierten Person, Herr Trump wird ohne vorherigen Bericht wütend (Nippon Television (NNN)) Merkmale von Nobunaga, Ishigaki (Asahi Shimbun), dem ersten bestätigten Burgturm in Gifu Castle

Recommended Posts

Automatische Quizgenerierung mit COTOHA
Automatische Dokumentenerstellung aus Docstring mit Sphinx
Probieren Sie ganz einfach die automatische Bilderzeugung mit DCGAN-Tensorfluss aus
Automatische Mosaikerzeugung
Powerpo automatische Generierung mit Python-Pptx (persönliches Memo)
Automatische Generierung von Collagenvorlagen
Künstliche Datengenerierung mit Numpy
Satzerzeugung mit GRU (Keras)
Automatische Generierung des PyCharm-Testcodes
Bildunterschriftengenerierung mit Chainer
[Lass uns mit Python spielen] Ziel ist die automatische Satzgenerierung ~ Abschluss der automatischen Satzgenerierung ~
Beschleunigen Sie die Abfragegenerierung mit SQLAlchemy ORM
Passwort für Lehrbuch mit Python generieren
CSRF-Token-Generierung für Gegenmaßnahmen mit Python
Automatische Erzeugung von Sadamasashi Kawayanagi
Ich habe versucht, Sätze mit GPT-2 zu generieren
Feature-Generierung mit Pandas gruppieren nach
Erzeugung von Verlaufsbildern mit Python [1] | np.linspace
[Lass uns mit Python spielen] Ziel ist die automatische Satzgenerierung ~ Morphologische Analyse durchführen ~