[PYTHON] Visualisieren Sie Ansprüche mit AI

0. Punkt

    1. Der Umfang des Patentrechts wird in Worten als Anspruch ausgedrückt.
  1. Da die Beschreibung der Behauptung streng ist, ist die Struktur des Satzes oft kompliziert und kann von einigen Lesern missverstanden werden.
    1. Ich habe versucht, die Behauptungen so zu visualisieren, dass es keine Diskrepanzen bei der Anerkennung zwischen dem Erfinder, dem Anwalt und dem Prüfer gibt. (Das Bild unten ist Teil der Visualisierung.)

pic.png

1. 1. Hintergrund

Rechte an geistigem Eigentum, insbesondere Patentrechte, sind mächtige Waffen, die eine neue Ära eröffnen. Die Gültigkeit des Patentrechts wird durch den in "Umfang des Anspruchs" beschriebenen Text (Anspruch) definiert. Selbstverständlich ist jeder Anspruch streng geschrieben, so dass die Bestandteile des Patentrechts "notwendig" und "ausreichend" sind, so dass die Satzstruktur häufig kompliziert ist. Beispielsweise ist der "Anspruchsumfang" des von Toyota für das automatische Fahren eingereichten Patents ("Verkehrssituationserkennung für autonome Fahrzeuge", JP2018198422A) wie folgt (Auszug).

JP2018198422A.txt


Ein Erfassungsschritt zum Erfassen von Sensordaten, die durch Erfassen der äußeren Umgebung des Fahrzeugs von einem im Fahrzeug bereitgestellten externen Sensor erhalten werden, und
Ein Identifikationsschritt, der die Sensordaten analysiert, um die Verkehrsbedingungen außerhalb des Fahrzeugs zu identifizieren.
Ein Generierungsschritt zum Generieren von Grafikdaten zum Anzeigen von visuellem Feedback, das die Informationen über die Verkehrssituation visuell beschreibt, und
Ein Übertragungsschritt zum Übertragen der Grafikdaten an das Schnittstellengerät, um die visuelle Rückmeldung auf dem Schnittstellengerät anzuzeigen.
Einschließlich Methoden.

Weißt du was du sagst? Als ich es zum ersten Mal las, verstand ich ehrlich gesagt nicht wirklich, was es war (lacht). Nach dem erneuten Lesen fand ich zwei Punkte: (1) Es handelt sich um ein Patent, das sich auf das Verfahren bezieht, und (2) das Verfahren umfasst vier Schritte. Ehrlich gesagt, selbst wenn ich die Details jedes Schritts lese, fühle ich mich wie "Ich kann es nicht sofort bekommen." Natürlich ist es nicht die Erfindung, die schlecht ist, es ist mein Verstand (lacht). Aufgrund einer solchen Situation habe ich versucht zu prüfen, ob die Behauptung visualisiert werden kann.

2. Vorbereitung

Zur Visualisierung verwende ich jetzt Python, die als Standardsprache der KI bezeichnet werden kann. Dieses Mal werden wir Cabocha verwenden, wobei wir die Struktur des Textes als Abhängigkeit betrachten. Zunächst sind Vorbereitung, MeCab, CRF ++, Cabocha erforderlich. Es gibt einen sehr guten Artikel zur Installation. Lesen Sie ihn daher. Ich habe es auch als Referenz verwendet. Wir möchten diese Gelegenheit nutzen, um den Erstellern der Website zu danken. Die stärkste Möglichkeit, MeCab und CaboCha mit Google Colab zu verwenden [▲ 100 Klopfen Sprachverarbeitung ohne Enttäuschung == Kapitel 5 Vorbereitung ==](https://ds-blog.tbtech.co.jp/entry/2020/06/08/%E2%96%B2%E5 % BF% 83% E3% 81% 8F% E3% 81% 98% E3% 81% 91% E3% 81% 9A% E8% A8% 80% E8% AA% 9E% E5% 87% A6% E7% 90 % 86100% E6% 9C% AC% E3% 83% 8E% E3% 83% 83% E3% 82% AF% EF% BC% 9D% EF% BC% 9D5% E7% AB% A0% E4% B8% 8B % E6% BA% 96% E5% 82% 99% EF% BC% 9D% EF% BC% 9D)

Wenn MeCab für die morphologische Analyse korrekt installiert werden kann, ist dies wie folgt.

import MeCab
tagger = MeCab.Tagger()
print(tagger.parse("Der Kunde nebenan ist ein Kunde, der oft Kakis isst"))

output


Nachbar Tonari Tonari Nachbar Nomen-Gemeinsame Nomenklatur-Allgemein 0
Nonos Assistent-Fallassistent
Customer Cuck Cuck Customer Nominal-Gemeinsame Nomenklatur-Allgemein 0
Waha ist ein Assistent-Hilfe
Gut Yoku Yoku Gut Anwalt 1
Kaki Kaki Kaki Kaki Nomen-Gemeinsame Nomenklatur-Allgemein 0
Eat Kuku Eat Verb-General 5. Dan-Typ der Wah-Leitungseinheit-Allgemeines 1
Customer Cuck Cuck Customer Nominal-Gemeinsame Nomenklatur-Allgemein 0
Dada Dada Hilfsverb Hilfsverb-Da Kündigungstyp-Allgemeines
EOS

Wenn CRF ++ und Cabocha, die für die Abhängigkeitsanalyse erforderlich sind, korrekt installiert sind, ist dies wie folgt.

import CaboCha
cp = CaboCha.Parser()
print(cp.parseToString("Der Kunde nebenan ist ein Kunde, der oft Kakis isst"))

output


neben an-D        
Kunden-------D
Häufig---D |
Persimmon-D |
Essen-D
Es ist ein Kunde
EOS

3. 3. Datenverarbeitung

Nachdem die Installation abgeschlossen ist, verarbeiten wir die Daten. Zunächst werden die vorbereiteten Textdaten gelesen und für jede Zeile eine morphologische Analyse durchgeführt. Verwenden Sie dann Cabocha, um eine Abhängigkeitsanalyse durchzuführen.

file_path = 'JP2018198422A.txt'
#Eine leere Liste vorbereiten
c_list = []
c = CaboCha.Parser()
#Textdaten lesen
with open(file_path) as f:
  text_list = f.read()
  #
  for i in text_list.split('\n'):
    cabo = c.parse(i)
    #_
    c_list.append(cabo.toString(CaboCha.FORMAT_LATTICE))
#
path_w = 'JP2018198422A.txt.cabocha'
#()
with open(path_w, mode='w') as f:
  f.writelines(c_list)

Bewahren Sie es in der vorbereiteten Clist auf. Das Ergebnis wird in einer Datei gespeichert und die Datenverarbeitung abgeschlossen. Schreiben Sie beim Schreiben eines Schreiblistentyps 4. Herausforderung zur Visualisierung

Dann werden wir endlich die Visualisierung herausfordern. Lesen Sie zunächst das Ergebnis der Abhängigkeitsanalyse.

#Lesen der Ergebnisdaten der Abhängigkeitsanalyse
path = 'JP2018198422A.txt.cabocha'
import re
with open(path, encoding='utf-8') as f:
  _data = f.read().split('\n')

Implementieren Sie als Nächstes die Klasse Morph, die die Morphologie darstellt. Diese Klasse hat eine Oberflächenform (Oberfläche), eine Basisform (Basis), ein Teilwort (pos) und eine Teilwortunterklassifikation 1 (pos1) als Elementvariablen.

class Morph:
  def __init__(self, word):
    self.surface = word[0]
    self.base = word[7]
    self.pos = word[1]
    self.pos1 = word[2]
#Eine Liste von Sätzen
sent = []
#Temporärer Speicher für die zu sendende Liste
temp = []

for line in _data[:-1]:
  #Teilen Sie jedes Element in der Liste.
  #einstellen[]damit"\t "und","Wann"(Raum)".
  text = re.split("[\t, ]", line)
  #Verwenden Sie "EOS" als Leitfaden, um jeden Satz aufzulisten.
  if text[0] == 'EOS':
    sent.append(temp)
    #Leer zur Verwendung in der nächsten Anweisung.
    temp = []
  #Die Zeile zur Abhängigkeitsanalyse ist diesmal nicht erforderlich. Fahren Sie also fort
  elif text[0] == '*':
    continue
  #Speichert das angegebene Element aus dem Ergebnis der morphologischen Analyse in temp als Liste von Morph-Objekten.
  else:
    morph = Morph(text)
    temp.append(morph)

Implementieren Sie dann die Klausel Chunk-Klasse. Diese Klasse enthält eine Liste von Morph-Elementen (Morph-Objekten) (Morphs), eine Liste verwandter Klauselindexnummern (dst) und eine Liste verwandter ursprünglicher Klauselindexnummern (srcs) als Mitgliedsvariablen.

#Klasse Chunk
class Chunk:
  def __init__(self, idx, dst):
    self.idx = idx     #Phrasennummer
    self.morphs = []   #Liste der morphologischen Elemente (Morph-Objekte)
    self.dst = dst     #Indexnummer der Kontaktklausel
    self.srcs = []     #Liste der ursprünglichen Klauselindexnummern

import re
#Liste nach Satz
s_list = []
#Chunk-Objekt
sent = []
#Morph-Objektliste der morphologischen Analyseergebnisse
temp = []
chunk = None
for line in _data[:-1]:
  #einstellen[]damit"\t "und","Wann"(Raum)Geben Sie das Trennzeichen an.
  text = re.split("[\t, ]", line)

  #Zeilen für die Abhängigkeitsanalyse verarbeiten
  if text[0] == '*':
    idx = int(text[1])
    dst = int(re.search(r'(.*?)D', text[2]).group(1))
    #Zum Chunk-Objekt
    chunk = Chunk(idx, dst)
    sent.append(chunk)

  #Liste nach Satz mit EOS als Orientierungspunkt
  elif text[0] == 'EOS':
    if sent:
      for i, c in enumerate(sent, 0):
        if c.dst == -1:
          continue
        else:
          sent[c.dst].srcs.append(i)
      s_list.append(sent)
    sent = []
  else:
    morph = Morph(text)
    chunk.morphs.append(morph)
    temp.append(morph)

#Anzeige der ersten Zeile
for m in s_list[0]:
  print(m.idx, [mo.surface for mo in m.morphs], 'Verantwortliche Person:' + str(m.srcs),'Gesprächspartner:' + str(m.dst))

output


0 ['Fahrzeug', 'Zu']Verantwortliche Person:[]Ansprechpartner: 1
1 ['Bereiten', 'Sein', 'Ta']Verantwortliche Person:[0]Kontakt: 2
2 ['Extern', 'Sensor', 'Von', '、']Verantwortliche Person:[1]Kontakt: 8
3 ['Sagte', 'Fahrzeug', 'von']Verantwortliche Person:[]Kontakt: 4
4 ['Extern', 'Umgebung', 'Zu']Verantwortliche Person:[3]Kontakt: 5
5 ['Wahrnehmung', 'Shi', 'Hand']Verantwortliche Person:[4]Kontakt: 6
6 ['Dazugewinnen', 'Sein', 'Ta']Verantwortliche Person:[5]Kontakt: 7
7 ['Sensordaten', 'Zu']Verantwortliche Person:[6]Kontakt: 8
8 ['Erhalten', 'Machen']Verantwortliche Person:[2, 7]Kontakt: 9
9 ['Erhalten', 'Schritt', 'Wann', '、']Verantwortliche Person:[8]Gesprächspartner:-1

Außerdem wird der Text der ursprünglichen Klausel und der zugehörigen Klausel extrahiert.

for s in s_list:
  for m in s:
    #Im Falle einer Klausel mit einem Kontakt
    if int(m.dst) != -1:
      #Die Position des morphologischen Analyseergebnisses ist'Symbol'Andere Elemente als werden durch r Registerkarten getrennt angezeigt.
      print(''.join([b.surface if b.pos != 'Symbol' else '' for b in m.morphs]),
            ''.join([b.surface if b.pos != 'Symbol' else '' for b in s[int(m.dst)].morphs]), sep='\t')

output


Im Fahrzeug ausgerüstet
Wird von einem externen Sensor bereitgestellt
Von einem externen Sensor bezogen
Die äußere Umgebung des Fahrzeugs
Wahrnehmung der äußeren Umgebung
Erhalten durch Erfassen
Erhaltene Sensordaten
Sensordaten erfassen
Akquisitionsschritt und Akquisitionsschritt
Analysieren Sie die Sensordaten
Analysieren und identifizieren
Außerhalb des Fahrzeugs
Externe Verkehrsbedingungen
Verkehrsbedingungen identifizieren
Identifikation mit Identifikationsschritt
Informationen zur Verkehrssituation
Informationen darstellen
Visuell darstellen
Zeigen Sie visuelles Feedback
Visuelles Feedback anzeigen
Anzeigen
Grafikdaten für
Grafikdaten generieren
Generieren Sie mit dem Generierungsschritt
Anzeige auf dem Schnittstellengerät
Zeigen Sie das visuelle Feedback an
Anzeigen
Für den Übertragungsschritt und
Senden Sie die Grafikdaten
An das Schnittstellengerät senden
Senden Sie mit dem Sendeschritt
einschließlich
Wie man einschließt

Schließlich wird der abhängige Baum als gerichteter Graph dargestellt. Priorisieren Sie die Sichtbarkeit und visualisieren Sie nur den ersten Schritt.

#Ich werde den ersten Teil versuchen
v = s_list[0]

#Erstellen einer Liste zum Speichern einer Reihe von Klauseln
s_pairs = []
for m in v:
  if int(m.dst) != -1:      
    a = ''.join([b.surface if b.pos != 'Symbol' else '' for b in m.morphs])
    b = ''.join([b.surface if b.pos != 'Symbol' else '' for b in v[int(m.dst)].morphs])
    c = a, b
    s_pairs.append(c)
#Zeichnung des abhängigen Baumes
import pydot_ng as pydot
img = pydot.Dot(graph_type='digraph')
#Geben Sie eine Schriftart an, die Japanisch unterstützt
img.set_node_defaults(fontname='Meiryo UI', fontsize='12')
for s, t in s_pairs:
  img.add_edge(pydot.Edge(s, t))
img.write_png('pic')

Das fertige Produkt ist wie folgt. Wie der erste, aber neu gepostet.

pic.png

Wie ist das? Ich denke, es ist einfacher darüber nachzudenken, was für ein Schritt es ist.

5. Schließlich

Um ehrlich zu sein, war ich überrascht, als ich zum ersten Mal erfuhr, dass Patentrechte im Wesentlichen durch Worte bestimmt werden. Natürlich sind Zeichnungen auch wichtige Dokumente, aber ob sie patentiert werden oder nicht und die Bestimmung des Umfangs der Rechte wird direkt in Worten ausgedrückt. Angesichts dieser Tatsachen halte ich es für sehr wichtig, die Satzstruktur zu visualisieren.

Der Status des im Beispiel verwendeten Patents für automatisches Fahren von Toyota steht noch aus. Es ist schwer, ein Patent zu bekommen.

Zur Koordination habe ich auf die folgende Seite verwiesen. Es war eine sehr gute Seite und ich habe viel gelernt. Wir möchten diese Gelegenheit nutzen, um Ihnen zu danken. [▲ 100 Klopfen Sprachverarbeitung ohne Enttäuschung == 40-44 ==](https://ds-blog.tbtech.co.jp/entry/2020/06/12/%E2%96%B2%E5% BF% 83% E3% 81% 8F% E3% 81% 98% E3% 81% 91% E3% 81% 9A% E8% A8% 80% E8% AA% 9E% E5% 87% A6% E7% 90% 86100% E6% 9C% AC% E3% 83% 8E% E3% 83% 83% E3% 82% AF% EF% BC% 9D% EF% BC% 9D% EF% BC% 94% EF% BC% 90% EF% BD% 9E% EF% BC% 94% EF% BC% 94% EF% BC% 9D)

Recommended Posts

Visualisieren Sie Ansprüche mit AI
Mit Pandas schnell visualisieren
3. 3. KI-Programmierung mit Python
Visualisieren Sie 2019 nem mit WordCloud
Lassen Sie uns 2ch Thread mit WordCloud-Scraping- visualisieren
Erstelle Puyopuyo AI mit Python
Visualisieren Sie Standortinformationen mit Basemap
Lassen Sie uns das Wissen über Wikidata mit Neo4j visualisieren
Visualisieren Sie den Entscheidungsbaum mit einem Jupyter-Notizbuch
Machen wir Othellos KI mit Chainer-Teil 1-
Visualisieren Sie Python-Paketabhängigkeiten mit graphviz
Machen wir Othellos KI mit Chainer-Teil 2-
Schreiben Sie Reversi AI mit Keras + DQN
[Episode 2] Anfänger haben Numeron AI mit Python ausprobiert
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
[Episode 3] Anfänger haben Numeron AI mit Python ausprobiert
[Einfach] AI automatische Erkennung mit einer Webkamera!
Ermitteln Sie den Überflutungsstatus eines Flusses mit AI (ternäre Klassifizierung).
[Episode 0] Anfänger haben Numeron AI mit Python ausprobiert
Versuchen Sie schnell, Ihren Datensatz mit Pandas zu visualisieren
[Episode 1] Anfänger haben Numeron AI mit Python ausprobiert
Lassen Sie uns 2ch Thread mit WordCloud-morphologische Analyse / WordCloud Edition- visualisieren
Visualisieren Sie Punkt P, der mit Python funktioniert
Machen wir mit Pylearn 2 eine dreiäugige KI
Aufbau einer KI / maschinellen Lernumgebung mit Python
Visualisieren Sie den Entscheidungsbaum von Scikit-Learn mit Plotlys Treemap