Qiita a fait ses débuts avec des choses lol. Auparavant, j'essayais de générer automatiquement un QA quiz à l'aide de API de traitement du langage naturel / COTOHA fourni par NTT Communications. Chaque fois, un projet cadeau avec M. Qiita a eu lieu, donc je suis vraiment déçu. C'est pourquoi j'écrirai sur la génération automatique de quiz QA à l'aide d'articles de presse.
*Google Colaboratory *Python3
Ce que je veux faire, par exemple
Une manifestation du mouvement Yellow Best en France pour protester contre l'administration Macron a eu lieu le 18 pendant 27 semaines consécutives. Selon le ministère de l'Intérieur ...
Si vous pouvez lire des informations telles que "qui" et "où" bien quand il y a un article comme
Question: Où le Mouvement Yellow Best a-t-il protesté contre l'administration Macron la 18e et la 27e semaine consécutive? Réponse: France
La motivation est que vous pouvez créer automatiquement des phrases de questions et des réponses. Laissez COTOHA prendre en charge cette «bonne» partie.
Jetons l'article d'exemple de phrase de plus tôt dans l'analyse syntaxique de COTOHA.
curl -H "Content-Type:application/json;charset=UTF-8" -H "Authorization:Bearer **Propre jeton**" -X POST -d '{"sentence":"Une manifestation du mouvement Yellow Best protestant contre l'administration Macron en France a eu lieu le 18 pendant 27 semaines consécutives."}' "https://api.ce-cotoha.com/api/dev/nlp/v1/parse"
La réponse ressemble à ceci. L'analyse morphologique a été menée fermement, et il a été possible d'extraire que la "France" est "[" unique "," terre "]".
{
"result" : [ {
"chunk_info" : {
"id" : 0,
"head" : 8,
"dep" : "D",
"chunk_head" : 0,
"chunk_func" : 1,
"links" : [ ]
},
"tokens" : [ {
"id" : 0,
"form" : "France",
"kana" : "France",
"lemma" : "France",
"pos" : "nom",
"features" : [ "Unique", "Sol" ],
"dependency_labels" : [ {
"token_id" : 1,
"label" : "case"
} ],
"attributes" : { }
}, {
"id" : 1,
"form" : "alors",
"kana" : "De",
"lemma" : "alors",
"pos" : "Assistant de cas",
"features" : [ "Utilisation continue" ],
"attributes" : { }
} ]
}, {
"chunk_info" : {
"id" : 1,
"head" : 2,
"dep" : "D",
"chunk_head" : 1,
"chunk_func" : 2,
"links" : [ ]
},
"tokens" : [ {
"id" : 2,
"form" : "Macron",
"kana" : "Macron",
"lemma" : "Macron",
"pos" : "nom",
"features" : [ ],
"attributes" : { }
}, {
"id" : 3,
"form" : "administration",
"kana" : "Seiken",
"lemma" : "administration",
"pos" : "Suffixe de nomenclature",
"features" : [ "nom" ],
"dependency_labels" : [ {
"token_id" : 2,
"label" : "compound"
}, {
"token_id" : 4,
"label" : "case"
} ],
"attributes" : { }
}, {
"id" : 4,
"form" : "À",
"kana" : "ré",
"lemma" : "À",
"pos" : "Assistant de cas",
"features" : [ "Utilisation continue" ],
"attributes" : { }
} ]
}
D'un autre côté, cela semble difficile à l'heure actuelle jusqu'à ce que Macron soit le nom d'une personne. De plus, étant donné que les informations sur la phrase sont prises dans un bloc appelé "chunk_info" (super !!), si une certaine phrase contient un nom de lieu, etc., réécrivez l'article original pour que la phrase (nom de lieu) soit la réponse. Si tel est le cas, cela ressemble à un quiz.
Cette fois, j'ai essayé de saisir deux modèles de nom de lieu et de personne.
import collections
import requests
import json
#Déclaration d'entrée
sentence = 'Une manifestation du mouvement Yellow Best protestant contre l'administration Macron en France a eu lieu le 18 pendant 27 semaines consécutives.'
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}
#Demande à COTOHA
r = requests.post(url, data=json.dumps(payload), headers=headers)
#Stocker les résultats de l'analyse de la syntaxe
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 = ""
#Jugez si le nom ou le nom d'une personne est inclus pour chaque clause. Si trouvé, faites-en un candidat au quiz
for i in range(chunk_dic_len):
dic = chunk_dic[i]
dic_len = len(dic["tokens"])
for j in range(dic_len):
if "Nom" in dic["tokens"][j]["features"] and "Nom de famille" in dic["tokens"][j]["features"] and "Unique" in dic["tokens"][j]["features"]:
#Répondez au quiz
key_word = dic["tokens"][j]["form"]
#Variables utilisées pour extraire les clauses de l'article d'origine
for s in range(dic_len):
token = token + dic["tokens"][s]["form"]
quiz_flug = "0"
elif "Sol" in dic["tokens"][j]["features"] and "Unique" 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, '')
#Changer la phrase du quiz pour chaque nomenclature extraite
if quiz_flug == "0":
question_sentence = question_sentence[:-1] + "Qui est"
elif quiz_flug == "1":
question_sentence = question_sentence[:-1] + "Où est-ce?"
print("problème:",question_sentence)
print("répondre:",key_word)
Résultat d'exécution
Question: Où le Mouvement Yellow Best a-t-il protesté contre l'administration Macron la 18e et la 27e semaine consécutive?
Réponse: France
Pour le moment, l'objectif est terminé.
Expérimentez avec divers articles.
・ Article original ①
###
#Ancienne fille du matin. Dans Talent Private, "Maman de 4 enfants" Nozomi Tsuji a annoncé le 17 qu'elle ouvrirait "Tsuji-chan Nell" et ferait ses débuts sur YouTube."
###
Question: Le 17, qui a ouvert "Tsuji-chan Nell" et a annoncé qu'il ferait ses débuts sur YouTube?
Réponse: Nozomi Tsuji
・ Article original ②
###
#Un grand journal a rapporté que le président Trump n'a pas été informé à l'avance et a exprimé sa colère à propos du retour de 14 passagers américains sur un bateau de croisière confirmé infecté par le nouveau virus corona par avion charter. C'était.
###
Question: Où le principal journal a-t-il rapporté que le président Trump était en colère sans être informé à l'avance qu'il avait renvoyé 14 personnes dans un avion charter?
Réponse: Amérique
・ Article original ③
###
#En ce qui concerne le château de Gifu, connu comme un château de montagne que Nobunaga Oda a capturé pendant la période des Royaumes combattants, la ville de Gifu a annoncé le 7 qu'elle avait découvert le mur de pierre de la tour du château (la base de la tour du château) que Nobunaga croyait avoir été construite par fouille.
###
Question: Le 7, où avez-vous annoncé que vous aviez découvert pour la première fois le mur de pierre de la tour du château (la base de la tour du château) que Nobunaga semble avoir construit lors de l'enquête de fouille?
Réponse: Gifu City
Il est difficile de dire que c'est une sortie parfaite, mais c'est un résultat qui semble possible! J'aimerais améliorer la précision tout en scrutant un peu plus les règles! !!
Démonstration française d'une demi-année, réduction (Kyodo News) Nozomi Tsuji annonce ses débuts sur YouTube "Utiliser ma propre expérience" pour fournir des informations et des informations sur la beauté aux mamans (Oricon News) M. Trump se met en colère sans que la personne infectée ne soit rentrée au Japon (Nippon Television (NNN)) Caractéristiques construites par Nobunaga: Ishigaki, la base de la tour du château qui a été confirmée pour la première fois au château de Gifu (Asahi Shimbun)
Recommended Posts