Die COTOHA API führt eine Kollaborationskampagne mit Qiita durch. FF7 wird bald neu gemacht und ich möchte PS4 .. (-p-)
https://zine.qiita.com/event/collaboration-cotoha-api/
Es ist ein völlig unreines Motiv, aber ich habe versucht, die natürliche Sprache mit der COTOHA-API zu verarbeiten. Heute ist die Frist für die Veröffentlichung, also ist es ziemlich eng, aber ich habe es geschafft ...
Ich habe versucht, Nachrichtenartikel nur mit der von COTOHA bereitgestellten API zusammenzufassen. Das Thema ist ** Yahoo! News Überschriftengenerierung **.
Wie Sie alle wissen, hat jeder Artikel eine Überschrift. Zum Beispiel sieht es wie folgt aus.
Diese Überschrift, die ich normalerweise beiläufig sehe, wird tatsächlich nach verschiedenen Regeln erstellt und ist tief.
Erstens, um auf engstem Raum einfach und konsequent zu kommunizieren Die Anzahl der Zeichen ist auf ** bis zu 13 Zeichen ** begrenzt (um genau zu sein 13,5 Zeichen einschließlich Leerzeichen halber Breite).
Die Überschrift enthält auch ** Standortinformationen **. Im Falle eines Vorfalls oder Unfalls variieren die Bedeutung von Nachrichten und das Interesse der Benutzer stark, je nachdem, wo sie auftreten.
Und die in den Überschriften verwendeten Wörter sind im Grunde ** Wörter im Artikel **. Weil die Artikel auf jedes Medium verteilt werden, es sei denn, sie passen nicht in die Anzahl der Zeichen Es scheint, dass er dies tut, um den Inhalt des Artikels nicht zu verdrehen.
Wenn Sie eine Überschrift mit den Wörtern im Artikel erstellen möchten, verwenden Sie die COTOHA-API Ich dachte, ich könnte es bis zu einem gewissen Grad tun.
Es gibt andere Regeln, aber die Regeln, die wir dieses Mal behandelt haben, sind unten zusammengefasst.
[Referenz] Das Geheimnis der Yahoo! News-Themen "13-stellige Überschrift" https://news.yahoo.co.jp/newshack/inside/yahoonews_topics_heading.html
COTOHA API ** API für die Verarbeitung natürlicher Sprache und Spracherkennung ** von NTT Communications. Es werden 14 APIs für die Verarbeitung natürlicher Sprache und die Sprachverarbeitung wie Syntaxanalyse und Spracherkennung bereitgestellt. https://api.ce-cotoha.com/contents/index.html
Dieses Mal habe ich die ** Entwicklerversion ** der COTOHA-API verwendet. Im Vergleich zur Enterprise-Version gibt es einige Einschränkungen, die Sie jedoch kostenlos verwenden können.
Dieses Mal habe ich mich auf den folgenden Artikel konzentriert, den Bill Gates von MS zurückgezogen hat. https://news.yahoo.co.jp/pickup/6354056
Hier ist die Überschrift, die angehängt wurde.
Bill Gates geht als MS-Direktor in den Ruhestand
Umm. Sicher vollständig und leicht zu verstehen.
Die COTOHA-API bietet eine ** zusammenfassende API **. Obwohl es sich noch in der Beta befindet, können Sie damit ** Sätze extrahieren, die Sie für wichtig im Satz halten **.
Zunächst habe ich beschlossen, einen Satz mit dieser API zu extrahieren.
{
"result": "Gates schied 2008 aus der Geschäftsleitung aus und trat 2014 als Vorsitzender in den Ruhestand, blieb jedoch im Verwaltungsrat.",
"status": 0
}
Ich konnte es sicher extrahieren, aber es überschreitet deutlich 13 Zeichen, also muss ich es ** kürzen **. Ich war besorgt darüber, wie ich es verkürzen könnte, aber ich entschied mich, mit der Methode fortzufahren, ** nur die Schlüsselwörter mit hoher Bedeutung zu belassen **.
Zuvor habe ich in Qiitas Artikel geschrieben, dass Sie Schlüsselwörter mit hoher Bedeutung mithilfe von "Begriffsextrakt" extrahieren können.
[Referenz] Automatischer Generator für Qiita-Tags https://qiita.com/fukumasa/items/7f6f69d4f6336aff3d90
Die COTOHA-API bietet auch eine ** Keyword-Extraktions-API **. Im Text enthaltene charakteristische Phrasen und Wörter können als Schlüsselwörter extrahiert werden.
Extrahieren wir Schlüsselwörter für den einen Satz, der zuvor extrahiert wurde.
{
"result": [
{
"form": "Präsident",
"score": 14.48722
},
{
"form": "Linie",
"score": 11.3583
},
{
"form": "Im Ruhestand",
"score": 11.2471
},
{
"form": "der Aufsichtsrat",
"score": 10.0
}
],
"status": 0,
"message": ""
}
Zu diesem Zeitpunkt bin ich schon misstrauisch ... ** Die wesentlichen Informationen "wer" ** (Mr. Gates) wurden nicht extrahiert. Nun, ich werde vorerst weitermachen.
Wie ich in der Eröffnungsregel geschrieben habe, muss die Überschrift Standortinformationen enthalten. COTOHA bietet eine praktische API zum Abrufen von Standortinformationen. ** Eindeutige Ausdrucksextraktions-API **. Mithilfe dieser API können Sie eindeutige Ausdrücke wie Personennamen und Ortsnamen abrufen.
Ich habe es mit dem einen Satz versucht, den ich zuvor extrahiert habe, aber er enthielt keine Standortinformationen.
Wenn es enthalten ist, ist es sehr einfach, aber ** "Standortinformationen extrahiert" mit "de" ** Ich habe beschlossen, es am Anfang der Zusammenfassung aufzunehmen.
Es scheint schwierig zu sein, eine Überschrift (einen Satz) nur durch Anordnen dieser extrahierten Schlüsselwörter zu generieren. Ich konnte keine fortgeschrittenen Dinge tun, um automatisch Sätze basierend auf Schlüsselwörtern zu generieren, und ich war ziemlich besorgt.
Da ich die Einschränkung auferlege, nur die COTOHA-API zu verwenden, blitzte eine auf, als ich die API-Liste erneut betrachtete. Mit der ** Syntaxanalyse-API ** können Sie jedem extrahierten Schlüsselwort ** Hilfswörter wie "ga" und "o" hinzufügen, um jedes Schlüsselwort zu verbinden **.
Mithilfe dieser API wird der Text in Klauseln und Morphologie sowie in die Abhängigkeitsbeziehungen zwischen Klauseln und zerlegt Abhängigkeitsbeziehungen zwischen morphologischen Elementen, semantischen Informationen wie Teiltextinformationen usw. werden hinzugefügt.
Gibt es eine Beziehung zwischen den extrahierten Schlüsselwörtern und den Hilfswörtern? (Ich weiß nicht, wie ich es ausdrücken soll ...) scheint extrahiert werden zu können. Im Fall von "Luft ist köstlich" ist es beispielsweise so, als würde man "ga" als Hilfswort für das Schlüsselwort "Luft" extrahieren.
Verwenden Sie diese API, um dem vorherigen Schlüsselwort ein Hilfswort hinzuzufügen.
{
"result": [
{
"chunk_info": {
"id": 0,
"head": 7,
"dep": "D",
"chunk_head": 1,
"chunk_func": 2,
"links": []
},
"tokens": [
{
"id": 0,
"form": "Tore",
"kana": "Tore",
"lemma": "Tore",
"pos": "Substantiv",
"features": [
"Einzigartig",
"Nachname"
],
"attributes": {}
},
{
"id": 1,
"form": "Herr",
"kana": "Shi",
"lemma": "Herr",
"pos": "Nomenklatursuffix",
"features": [
"Substantiv"
],
"dependency_labels": [
{
"token_id": 0,
"label": "name"
},
{
"token_id": 2,
"label": "case"
}
],
"attributes": {}
},
{
"id": 2,
"form": "Ist",
"kana": "C.",
"lemma": "Ist",
"pos": "Aufeinanderfolgende Hilfswörter",
"features": [],
"attributes": {}
}
]
},
{
"chunk_info": {
"id": 1,
"head": 4,
"dep": "D",
"chunk_head": 0,
"chunk_func": 1,
"links": []
},
"tokens": [
{
"id": 3,
"form": "2008",
"kana": "Nisen Hachinen",
"lemma": "2008",
"pos": "Substantiv",
"features": [
"Datum (und Uhrzeit"
],
"dependency_labels": [
{
"token_id": 4,
"label": "case"
}
],
"attributes": {}
},
{
"id": 4,
"form": "Zu",
"kana": "D.",
"lemma": "Zu",
"pos": "Fallassistent",
"features": [
"Dauereinsatz"
],
"attributes": {}
}
]
},
{
"chunk_info": {
"id": 2,
"head": 3,
"dep": "D",
"chunk_head": 0,
"chunk_func": 1,
"links": []
},
"tokens": [
{
"id": 5,
"form": "Management",
"kana": "Keiei",
"lemma": "Management",
"pos": "Substantiv",
"features": [
"Bewegung"
],
"dependency_labels": [
{
"token_id": 6,
"label": "case"
}
],
"attributes": {}
},
{
"id": 6,
"form": "von",
"kana": "Nein",
"lemma": "von",
"pos": "Fallassistent",
"features": [
"Union"
],
"attributes": {}
}
]
},
{
"chunk_info": {
"id": 3,
"head": 4,
"dep": "D",
"chunk_head": 0,
"chunk_func": 1,
"links": [
{
"link": 2,
"label": "adjectivals"
}
]
},
"tokens": [
{
"id": 7,
"form": "Linie",
"kana": "Issen",
"lemma": "Linie",
"pos": "Substantiv",
"features": [],
"dependency_labels": [
{
"token_id": 5,
"label": "nmod"
},
{
"token_id": 8,
"label": "case"
}
],
"attributes": {}
},
{
"id": 8,
"form": "Von",
"kana": "Kara",
"lemma": "Von",
"pos": "Fallassistent",
"features": [
"Dauereinsatz"
],
"attributes": {}
}
]
},
{
"chunk_info": {
"id": 4,
"head": 7,
"dep": "P",
"chunk_head": 0,
"chunk_func": 1,
"links": [
{
"link": 1,
"label": "goal"
},
{
"link": 3,
"label": "object"
}
],
"predicate": []
},
"tokens": [
{
"id": 9,
"form": "In den Ruhestand gehen",
"kana": "Sirizo",
"lemma": "In den Ruhestand gehen",
"pos": "Verbstamm",
"features": [
"K"
],
"dependency_labels": [
{
"token_id": 3,
"label": "nmod"
},
{
"token_id": 7,
"label": "dobj"
},
{
"token_id": 10,
"label": "aux"
},
{
"token_id": 11,
"label": "punct"
}
],
"attributes": {}
},
{
"id": 10,
"form": "Ki",
"kana": "Ki",
"lemma": "Ki",
"pos": "Verbsuffix",
"features": [
"Dauereinsatz"
],
"attributes": {}
},
{
"id": 11,
"form": "、",
"kana": "",
"lemma": "、",
"pos": "Lesepunkt",
"features": [],
"attributes": {}
}
]
},
{
"chunk_info": {
"id": 5,
"head": 7,
"dep": "D",
"chunk_head": 0,
"chunk_func": 1,
"links": []
},
"tokens": [
{
"id": 12,
"form": "14 Jahre",
"kana": "Juyonen",
"lemma": "14 Jahre",
"pos": "Substantiv",
"features": [
"Datum (und Uhrzeit"
],
"dependency_labels": [
{
"token_id": 13,
"label": "case"
}
],
"attributes": {}
},
{
"id": 13,
"form": "Zu",
"kana": "Niha",
"lemma": "Zu",
"pos": "Aufeinanderfolgende Hilfswörter",
"features": [],
"attributes": {}
}
]
},
{
"chunk_info": {
"id": 6,
"head": 7,
"dep": "D",
"chunk_head": 0,
"chunk_func": 1,
"links": []
},
"tokens": [
{
"id": 14,
"form": "Präsident",
"kana": "Kaicho",
"lemma": "Präsident",
"pos": "Substantiv",
"features": [],
"dependency_labels": [
{
"token_id": 15,
"label": "case"
}
],
"attributes": {}
},
{
"id": 15,
"form": "Zu",
"kana": "Wo",
"lemma": "Zu",
"pos": "Fallassistent",
"features": [
"Dauereinsatz"
],
"attributes": {}
}
]
},
{
"chunk_info": {
"id": 7,
"head": 9,
"dep": "D",
"chunk_head": 0,
"chunk_func": 3,
"links": [
{
"link": 0,
"label": "agent"
},
{
"link": 4,
"label": "manner"
},
{
"link": 5,
"label": "time"
},
{
"link": 6,
"label": "agent"
}
],
"predicate": [
"past"
]
},
"tokens": [
{
"id": 16,
"form": "Im Ruhestand",
"kana": "Tinin",
"lemma": "Im Ruhestand",
"pos": "Substantiv",
"features": [
"Bewegung"
],
"dependency_labels": [
{
"token_id": 1,
"label": "nsubj"
},
{
"token_id": 9,
"label": "advcl"
},
{
"token_id": 12,
"label": "nmod"
},
{
"token_id": 14,
"label": "nsubj"
},
{
"token_id": 17,
"label": "aux"
},
{
"token_id": 18,
"label": "aux"
},
{
"token_id": 19,
"label": "mark"
},
{
"token_id": 20,
"label": "punct"
}
],
"attributes": {}
},
{
"id": 17,
"form": "Shi",
"kana": "Shi",
"lemma": "Shi",
"pos": "Verbale Nutzung endet",
"features": [],
"attributes": {}
},
{
"id": 18,
"form": "Ta",
"kana": "Ta",
"lemma": "Ta",
"pos": "Verbsuffix",
"features": [
"Verbindung"
],
"attributes": {}
},
{
"id": 19,
"form": "Aber",
"kana": "Ga",
"lemma": "Aber",
"pos": "Verbindungssuffix",
"features": [
"Dauereinsatz"
],
"attributes": {}
},
{
"id": 20,
"form": "、",
"kana": "",
"lemma": "、",
"pos": "Lesepunkt",
"features": [],
"attributes": {}
}
]
},
{
"chunk_info": {
"id": 8,
"head": 9,
"dep": "D",
"chunk_head": 0,
"chunk_func": 1,
"links": []
},
"tokens": [
{
"id": 21,
"form": "der Aufsichtsrat",
"kana": "Trishimaryakukai",
"lemma": "der Aufsichtsrat",
"pos": "Substantiv",
"features": [],
"dependency_labels": [
{
"token_id": 22,
"label": "case"
}
],
"attributes": {}
},
{
"id": 22,
"form": "Zu",
"kana": "Niha",
"lemma": "Zu",
"pos": "Aufeinanderfolgende Hilfswörter",
"features": [],
"attributes": {}
}
]
},
{
"chunk_info": {
"id": 9,
"head": -1,
"dep": "O",
"chunk_head": 0,
"chunk_func": 4,
"links": [
{
"link": 7,
"label": "manner"
},
{
"link": 8,
"label": "place"
}
],
"predicate": [
"past",
"past"
]
},
"tokens": [
{
"id": 23,
"form": "Verbleibend",
"kana": "Noko",
"lemma": "Bleiben übrig",
"pos": "Verbstamm",
"features": [
"R"
],
"dependency_labels": [
{
"token_id": 16,
"label": "advcl"
},
{
"token_id": 21,
"label": "nmod"
},
{
"token_id": 24,
"label": "aux"
},
{
"token_id": 25,
"label": "aux"
},
{
"token_id": 26,
"label": "aux"
},
{
"token_id": 27,
"label": "aux"
},
{
"token_id": 28,
"label": "punct"
}
],
"attributes": {}
},
{
"id": 24,
"form": "Tsu",
"kana": "Tsu",
"lemma": "Tsu",
"pos": "Verbale Nutzung endet",
"features": [],
"attributes": {}
},
{
"id": 25,
"form": "Hand",
"kana": "Te",
"lemma": "Hand",
"pos": "Verbsuffix",
"features": [
"Verbindung",
"Dauereinsatz"
],
"attributes": {}
},
{
"id": 26,
"form": "ich",
"kana": "ich",
"lemma": "Ist",
"pos": "Verbstamm",
"features": [
"A",
"L für den Dauereinsatz"
],
"attributes": {}
},
{
"id": 27,
"form": "Ta",
"kana": "Ta",
"lemma": "Ta",
"pos": "Verbsuffix",
"features": [
"halt"
],
"attributes": {}
},
{
"id": 28,
"form": "。",
"kana": "",
"lemma": "。",
"pos": "Phrase",
"features": [],
"attributes": {}
}
]
}
],
"status": 0,
"message": ""
}
['Vorsitzende', 'Von der Linie', 'Im Ruhestand', 'An die Tafel']
Kombinieren wir jedes Schlüsselwort mit dem Hilfswort, um einen Satz mit maximal 13 Zeichen zu bilden. Ich habe es in Schritt 4 fast geschafft, aber ich habe dieses Ergebnis bekommen.
Aus der Leitung ausgeschieden
Ich denke nicht, dass es eine faszinierende Überschrift ist **, "Wer ist in Rente gegangen?", Aber es sind falsche Informationen, weil ich den Direktor anstelle des Vorsitzenden verlassen habe. Ich werde es dir erzählen.
Wie ich in Schritt 2 geschrieben habe, gibt es jedoch keine Informationen, die "wer" oder Firmennamen wie "Microsoft" und "MS" sagen. Daher fühlt es sich subtil an. Daher ist es objektiv zu sehen, wie gut die diesmal generierte Überschrift ist **. Ich habe beschlossen, es nachzuschlagen **.
Sie können die Vollständigkeit der generierten Überschriften auch mithilfe der COTOHA-API überprüfen. ** Ähnlichkeitsberechnungs-API **. Mit dieser API können Sie ** die semantische Ähnlichkeit zwischen zwei Sätzen berechnen **. Die Ähnlichkeit wird im Definitionsbereich von 0 bis 1 ausgegeben, und je näher sie an 1 liegt, desto größer ist die Ähnlichkeit zwischen Texten.
Die Überschrift "Bill Gates hat sich als MS-Direktor zurückgezogen" ist dem Artikel beigefügt. Ich habe versucht, die Ähnlichkeit der generierten Überschrift "Vorsitzender aus der Leitung zurückgezogen" zu berechnen.
{
"result": {
"score": 0.9716939
},
"status": 0,
"message": "OK"
}
Oh, ist nicht 0,97 ziemlich teuer ...! ?? (Verwirrt Wenn COTOHA es sagt. ..
Als Referenz habe ich auch andere Artikel ausprobiert.
Der Artikel hat insgesamt 4 Seiten, aber vorerst habe ich ihn nur auf der 1. Seite ausprobiert. https://news.yahoo.co.jp/pickup/6353834
** ● Generierte Überschrift **
Im symbolischen Aufmerksamkeitsbereich(Ähnlichkeit: 0.45899978)
Selbst wenn Sie sich die Überschrift ansehen, ist es ein Chaos ... Die Ähnlichkeit ist auch sehr gering. Immerhin werden die extrahierten Schlüsselwörter ** in absteigender Reihenfolge der Punktzahl angehängt, um einen Satz ** zu bilden Ich denke es sieht so aus. Möglicherweise haben Sie zum ersten Mal gewusst, dass Chin im Bereich als ** Lentin ** abgekürzt wird. Oder besser gesagt, was ist die Kinnrevolution?
Dies ist ein Artikel über Spielregeln in der Präfektur Kagawa, der umstritten ist. https://news.yahoo.co.jp/pickup/6353894
** ● Generierte Überschrift **
Maßnahmen Verordnung Durchsetzung der Präfekturversammlung der Präfektur Kagawa(Ähnlichkeit: 0.2842004)
Wenn Sie sich die Überschrift ansehen, ist es schwer, aus dem Beispielspiel in der Präfektur Kagawa zu erkennen, aber was ich in diesem Artikel vermitteln möchte, sind wahrscheinlich ** 80% der Unterstützer **. Der Ähnlichkeitsgrad ist ebenfalls sehr gering. Der extrahierte Satz und die generierte Überschrift enthielten jedoch keine numerischen Informationen. Obwohl der Artikel einen bestimmten Wert von 84% enthält, wird er in der Überschrift in einen leicht verständlichen Ausdruck von 80% konvertiert. Es ist einfacher, ein Gefühl dafür zu bekommen, wenn Sie es grob sagen, als wenn Sie es im Detail sagen. Ist dieser Bereich eine für Menschen einzigartige Fähigkeit?
Der gestrige Artikel. Es scheint, dass es in Tokio geschneit hat. Es sind immer noch kalte Tage ... https://news.yahoo.co.jp/pickup/6354091
** ● Generierte Überschrift **
Beobachtete Temperatur im Zentrum von Tokio(Ähnlichkeit: 0.99335754)
Obwohl es sich um einen Fall handelt, der Standortinformationen enthält, werden im Zentrum von Tokio bis zu 4 Zeichen verwendet, und die Menge der erstellten Informationen ist nicht sehr groß. Ich habe das Gefühl, dass die extrahierten Schlüsselwörter auch zu viele numerische Informationen enthalten. Die Ähnlichkeit ist jedoch mit 0,99 extrem hoch ...
Es mag ein wenig subtil erscheinen, wenn die diesmal generierte Überschrift als großer Erfolg bezeichnet wird, aber es hat Spaß gemacht, dies zu tun. Als ich die Zusammenfassung untersuchte, schien es zunächst ungefähr die folgenden Klassifikationen zu geben.
Die diesmal von COTOHA verwendete zusammenfassende API ist der frühere ** Extraktionstyp **.
Wie in Yahoo! News ist es jedoch schwierig, eine Zusammenfassung nur mit dem Extraktionstyp zu erstellen, wenn Sie versuchen, eine Zusammenfassung unter verschiedenen Regeln und Einschränkungen zu erstellen. Kombinieren Sie sie daher mit anderen Diensten ** oder dem letzteren ** abstrakten Typ Ich hielt es für notwendig, den Zusammenfassungsdienst ** zu nutzen.
Um die Anzahl der Zeichen zu verringern, scheint es leicht zu sein, sie wegzulassen, da es einige Regeln für Ländernamen usw. gibt. In diesem Bereich wird das Kinn jedoch als Lentin abgekürzt und 84% werden auf leicht verständliche Weise als 80% ausgedrückt. Ich habe das Gefühl, dass die Hürden immer noch hoch sind, selbst wenn ich Technologie zur Verarbeitung natürlicher Sprache verwende.
Ich hatte das Gefühl, dass der Tag, an dem die Überschriftengenerierung von Yahoo! News (geschickte Technik) durch KI ersetzt werden würde, vorerst nicht kommen würde.
Ich persönlich liebe die Verarbeitung natürlicher Sprache, weil sie interessant ist.
Bitte PS4. Der folgende Qiita-Artikel ist sehr hilfreich für die Zusammenfassung der Referenzseite. - Satzzusammenfassung für die Ära der natürlichen Sprache (Qiita) [Referenz] Quellcode Es kann viele Streifzüge geben, aber wenn Sie interessiert sind, lesen Sie bitte </ summary>
import requests
import pprint
import json
import re
from bs4 import BeautifulSoup
base_url = 'https://api.ce-cotoha.com/api/dev/nlp/'
'''
Holen Sie sich das Zugriffstoken für die COTOHA-API
'''
def get_access_token():
url = 'https://api.ce-cotoha.com/v1/oauth/accesstokens'
req_data = {
'grantType' : 'client_credentials',
'clientId' : 'Kunden ID',
'clientSecret' : 'Kundengeheimnis'
}
headers = {
'Content-Type' : 'application/json'
}
response = requests.post(url, json.dumps(req_data), headers=headers)
token = response.json()['access_token']
return token
'''
Rufen Sie die Zusammenfassungs-API auf
'''
def get_summary(token, document) :
url = base_url + '/beta/summary'
req_data = {
'document' : document,
'sent_len' : '1'
}
headers = {
'Content-Type' : 'application/json;charset=UTF-8',
'Authorization' : 'Bearer {}'.format(token)
}
response = requests.post(url, json.dumps(req_data), headers=headers)
summary = response.json()['result']
return summary
'''
Rufen Sie die Keyword-Extraktions-API auf
'''
def get_keywords(token, document):
url = base_url + '/v1/keyword'
req_data = {
'document' : document,
'type' : 'default',
'do_segment' : True
}
headers = {
'Content-Type' : 'application/json;charset=UTF-8',
'Authorization' : 'Bearer {}'.format(token)
}
response = requests.post(url, json.dumps(req_data), headers=headers)
keywords = [item.get('form') for item in response.json()['result']]
return keywords
'''
Rufen Sie die API zur Extraktion eindeutiger Ausdrücke auf, um Informationen zum Speicherort zu erhalten
'''
def get_ne_loc(token,sentence):
url = base_url + '/v1/ne'
req_data = {
'sentence' : sentence
}
headers = {
'Content-Type' : 'application/json;charset=UTF-8',
'Authorization' : 'Bearer {}'.format(token)
}
response = requests.post(url, json.dumps(req_data), headers=headers)
ne = response.json()['result']
ne_loc = []
for item in ne:
if item['class'] == 'LOC':
ne_loc.append(item['form'])
#Es gibt Fälle, in denen Duplikate auftreten, wenn nur Wörter verwendet werden
if ne_loc:
ne_loc = list(set(ne_loc))
return ne_loc
'''
Rufen Sie die Syntax-Parsing-API auf
'''
def parse_doc(token, sentence) :
url = base_url + '/v1/parse'
req_data = {
'sentence':sentence
}
headers = {
'Content-Type' : 'application/json;charset=UTF-8',
'Authorization' : 'Bearer {}'.format(token)
}
response = requests.post(url, json.dumps(req_data), headers=headers)
parsed_result = response.json()['result']
tokens = []
for tokens_ary in parsed_result:
for token in tokens_ary['tokens']:
if token:
tokens.append(token)
return tokens
'''
Rufen Sie die API zur Ähnlichkeitsberechnung auf
'''
def get_similarity(token, doc1, doc2):
url = base_url + '/v1/similarity'
req_data = {
's1' : doc1,
's2' : doc2,
'type' : 'kuzure'
}
headers = {
'Content-Type' : 'application/json;charset=UTF-8',
'Authorization' : 'Bearer {}'.format(token)
}
response = requests.post(url, json.dumps(req_data), headers=headers)
similarity = response.json()['result']
return similarity
'''
Yahoo!Extrahieren Sie Inhalte aus der URL des Nachrichtenartikels
(Unterstützt nur eine einzelne Seite, unterstützt nicht mehrere Seiten oder bestimmte Artikelformate...)
'''
def get_contents(url):
top_page = requests.get(url)
soup = BeautifulSoup(top_page.text, 'lxml')
article_url = soup.find('div',class_=re.compile('pickupMain_articleInfo')).find('a').get('href')
article_page = requests.get(article_url)
soup = BeautifulSoup(article_page.text, "lxml")
for tag in soup.find_all('p',{'class':'photoOffer'}):
tag.decompose()
for tag in soup.find_all('a'):
tag.decompose()
contents = re.sub('\n|\u3000','',soup.find('div',class_=re.compile('articleMain')).getText());
return contents
'''
Yahoo!Extrahieren Sie den Titel aus der URL des Nachrichtenartikels
(Dies ist die richtige Antwort)
'''
def get_title(url):
top_page = requests.get(url)
soup = BeautifulSoup(top_page.text, "lxml")
title = soup.find("title").getText().split(' - ')[0]
return title
'''
Yahoo!Generieren Sie Themen für Nachrichtenartikel
'''
def create_news_topic(token, contents):
#Artikelzusammenfassung implementiert
summary = get_summary(token, contents)
print(summary)
print("------------")
#Wenn die Zusammenfassung maximal 13 Zeichen umfasst, geben Sie sie als Thema zurück
if len(summary) <= 13:
return summary[:-1]
#Extrahieren Sie Schlüsselwörter und Ortsnamen aus der Zusammenfassung
keywords = get_keywords(token, summary)
print(keywords)
print("------------")
ne_loc = get_ne_loc(token, summary)
print(ne_loc)
print("------------")
topic = ''
#Zur Überschrift hinzufügen, wenn Standortinformationen vorhanden sind
#Auch wenn es mehrere gibt, vorerst nur die erste
if ne_loc:
topic += ne_loc[0] + 'damit'
#Entfernen Sie, wenn es auch im Schlüsselwort enthalten ist
if ne_loc[0] in keywords:
keywords.remove(ne_loc[0])
#Analysieren Sie das Abstract syntaktisch
tokens = parse_doc(token, summary)
#Erstellen Sie eine Zusammenfassung, während Sie die Keyword-Assistenten abrufen
for keyword in keywords:
for token in tokens:
if token['form'] == keyword:
print(token)
for dependency_label in token['dependency_labels']:
if dependency_label['label'] == 'case':
keyword += tokens[int(dependency_label['token_id'])]['form']
break
break
if len(topic) + len(keyword) <= 13:
topic += keyword
else:
return topic
return topic
'''
Maine
'''
if __name__ == '__main__':
#Yahoo möchten Sie Überschriften generieren!URL des Nachrichtenartikels
url = 'https://news.yahoo.co.jp/pickup/6354056'
#Artikelinhalt und Titel extrahieren
contents = get_contents(url)
title = get_title(url)
print("------------")
print(contents)
print("------------")
print(title)
print("------------")
#Holen Sie sich ein Token für die COTOHA-API
token = get_access_token()
#Artikelüberschriften generieren
topic = create_news_topic(token, contents)
print(topic)
print("------------")
#Berechnen Sie die Ähnlichkeit zwischen der ursprünglichen Überschrift und der generierten Überschrift
similarity = get_similarity(token, title, topic)['score']
print(similarity)
print("------------")
Recommended Posts