[PYTHON] Eine Geschichte über den Versuch von LT, die Verarbeitung natürlicher Sprache und die Abhängigkeitsanalyse in einem Augenblick von einem leeren Ort aus live zu codieren

einpacken

GiNZA, das eine hochpräzise Verarbeitung natürlicher Sprache und eine Abhängigkeitsanalyse durchführt, ist erstaunlich. Mit Colaboratory müssen Sie keine Umgebung erstellen und können diese schnell mit nur einem Browser verwenden.

Während LT (Lightning Talk), um diese Knusprigkeit zu betonen Umgebungskonstruktion & Code schreiben vor Ort, Verarbeitung natürlicher Sprache, Außerdem habe ich einen "Zaubertrick" ausprobiert, der besagt, dass er sehr genau und sehr funktional sein kann. Auf den ersten Blick steckt ein Samen im "Zaubertrick" ... Sprechen.

Wenn Sie bis zum Ende lesen, werden Sie die folgenden zwei Know-how verstehen ・ So verarbeiten Sie mit GiNZA hochpräzise natürliche Sprache von null bis drei Minuten ・ Tricks für die Live-Codierung mit LT

Hintergrund ①: GiNZA ist unglaublich!

"GiNZA" im April 2019 angekündigt, Wenn Sie versuchen, die Open Source-Bibliothek für die Verarbeitung natürlicher Sprache in Japanisch auszuführen, Einfach und hochgenau (super wichtig), einschließlich Abhängigkeit und Vektorisierung, Ich war überrascht, dass ich alle natürlichen Sprachverarbeitungen durchführen konnte.

Referenz: https://www.recruit.co.jp/newsroom/2019/0402_18331.html

GiNZAs großartiger Punkt 1: Einfache Umgebungskonstruktion, aber standardmäßig hohe Genauigkeit

Bei der Verarbeitung natürlicher Sprache ist es oft schwierig, eine Umgebung aufzubauen. (Mecab) Oder es ist mühsam, ein Wörterbuch usw. für eine hohe Genauigkeit zu installieren. Mit "GiNZA", ** Installieren Sie das hochpräzise Wörterbuch mit einem Pip **. Darüber hinaus mit ** Colaboratory **, ** Selbst wenn Sie von einem Null-Zustand ausgehen, können Sie ihn einfach mit einem Browser verschieben **.

GiNZAs großartiger Punkt 2: Alle Hauptfunktionen sind in einer Aufnahme enthalten

Es ist nicht nur eine morphologische Analyse. Abhängigkeitsanalyse, Extraktion von Namen und Orten von Personen, trainierte Modelle zur Vektorisierung von Sätzen usw. Eine Vielzahl von Hauptfunktionen kann auf einmal verwendet werden (verschiedene Erklärungen)

GiNZAs Problem: Ich weiß nicht, wie ich es verwenden soll, weil es nur wenige Informationen gibt

Vielleicht, weil es relativ neu ist, gibt es noch wenig Informationen und es scheint schwierig, sie zu finden. ⇒ ★ Ich dachte, ich würde die Hauptverwendung in diesem Artikel zusammenfassen ★

・ Die Teiltexte sind aufgrund von UD-Standards (Universal Dependencies) wie "PROPN" schwer zu verstehen. (Sie können auch vertraute Ausdrücke wie Nomenklatur, Verben usw. ausgeben.)

Hintergrund (2): Live-Codierungstricks

Ich hatte die Gelegenheit, an einer Lernsitzung LT (Lightning Talk) teilzunehmen. Ich wollte Ihnen die Größe von "GiNZA" erzählen, aber ich möchte es normal vorstellen. ** Ich kann das "schnelle und einfache Gefühl" nicht vermitteln ** ** Vor allem fehlt es an "Interessantheit" **. (Nicht alle Menschen interessieren sich für die Verarbeitung natürlicher Sprache)

Also, von der ** leeren Tafel **, die gerade den Browser gestartet hat, Mit " ** Live Coding ** </ font>" ist Papa vor Ort Ich habe mir ein ** Spektakel ** ausgedacht, das eine hochpräzise Analyse der natürlichen Sprache implementiert. ** Es besteht das Gefühl, dass dies schnell und einfach möglich ist ** ** Nun, das allein kann eine so großartige Analyse machen! ?? Ich bin überrascht, dass ** ** Der Wert, der vor Ort zu sehen ist, steigt und wird als Veranstaltung interessant sein **.

** zeitlich parallel zum Vortrag </ font> ** ** Ich kann nicht fehlerfrei codieren! </ font> **

Das ist es! ** Lass Python Live-Code (Mystery) ** </ font> ⇒ Schließlich wurde es automatisch gemacht und ** Ochi ** wurde als Geschichte hinzugefügt.

Damit Die Geschichte der Entwicklung eines ** Tricks, der wie Live-Codierung aussieht **.

Der Code wird später beschrieben. Wenn Sie also das GiNZA-Teil ersetzen, ** Da jeder leicht Code in LT leben kann ** ** Du kannst so tun als ob! !! ** ** ** ~~ Was für ein schreckliches Know-how ~~

Zusammenfassung des Know-hows von GiNZA (erste ernsthafte Geschichte)

Zunächst als GiNZA-Know-how, Keine Vorkenntnisse / Umgebung erforderlich, super einfach mit nur einem Browser Beschreibt eine Methode zur hochpräzisen und leistungsstarken Verarbeitung natürlicher Sprache.

Suchen Sie dazu in Ihrem Browser nach "Colaboratory" und Öffnen Sie "PYTHON 3's New Notebook" und Führen Sie einfach die folgenden 100 Zeilen oder weniger Code in der angegebenen Reihenfolge aus (Umschalt + Eingabetaste). Natürlich ist es kostenlos. Bitte probieren Sie das aus.

Von der Installation von GiNZA bis zur Beispielimplementierung der wichtigsten Funktionen Ich habe einen Code erstellt, der alles versteht. (* Zum Zeitpunkt der Live-Codierung wurde dies mit einer vereinfachten Version durchgeführt.)

So installieren Sie GiNZA:

Die Installation erfolgt nur über Pip. Einfach mit allen zugehörigen Modulen und Wörterbuchdaten.

!pip install ginza
# ★2020-01-Ab der Veröffentlichung von 15 v3 scheint es, dass es nur mit Pip wie diesem eingegeben werden kann
#Die herkömmliche Installationsmethode ist wie folgt. (Dies erfolgt in LT)
# !pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz"

Aufgrund der Eigenschaften von Colaboratory und des Pfades des Moduls Nach dem Ausführen von pip (magic) muss der folgende Befehl ausgeführt werden.

import pkg_resources, imp
imp.reload(pkg_resources)

Verwendung von GiNZA (einmalige Verwendung der Hauptfunktionen)

Zunächst wird das Ausführungsergebnis gebucht. Auf diese Weise wird eine morphologische Analyse, die wahrscheinlich verwendet wird, Abhängigkeitsstrukturanalyse (Abhängigkeit), Analyse der abstrakten Klassifikation wie Personenname und Ortsname, Und machte einen Beispielcode, um die Visualisierung in einer Aufnahme anzuzeigen.

ginza01.PNG

Hier ist die Funktion, die das Obige ausgibt.

#Eine Funktion, die die Hauptelemente aus dem Ergebnis der Abhängigkeitsstrukturanalyse anzeigt
#Laden Sie das Modell außerhalb der Funktion
#import spacy
#nlp = spacy.load('ja_ginza')
#easy_display_nlp(nlp, "Testtext")
def easy_display_nlp(my_nlp, input_str):
  doc = my_nlp(input_str)

  ###Tabellarische Anzeige der Ergebnisse der abhängigen Syntaxanalyse
  result_list = []
  for sent in doc.sents:
    #Zeilenumbruchanzeige für jeden Satz (satzbegrenzte Anzeige)
    print(sent)

    #Analysieren Sie jeden Satz und fügen Sie das Ergebnis in die Liste ein (auch wenn mehrere Sätze vorhanden sind, werden sie zu einem zusammengefasst)
    for token in sent:
      #https://spacy.io/api/token
      #print(dir(token))
      #Die Kommentare werden nicht auf der offiziellen Website verfasst, sondern interpretiert, sodass sie nur als Referenz dienen.
      info_dict = {}
      info_dict[".i"]             = token.i             #Token-Nummer (auch wenn es mehrere Sätze gibt, kehrt sie nicht zu 0 zurück und wird zu einer Seriennummer)
      info_dict[".orth_"]         = token.orth_         #Original Text
      info_dict["._.reading"]     = token._.reading     #Pseudonym lesen
      info_dict[".pos_"]          = token.pos_          #Teil(UD)
      info_dict[".tag_"]          = token.tag_          #Teil(japanisch)
      info_dict[".lemma_"]        = token.lemma_        #Grundform (nach Namensidentifikation)
      info_dict["._.inf"]         = token._.inf         #Nutzungsinformationen
      info_dict[".rank"]          = token.rank          #Kann wie Frequenz behandelt werden
      info_dict[".norm_"]         = token.norm_         #Prototyp
      info_dict[".is_oov"]        = token.is_oov        #Ist es ein nicht registriertes Wort?
      info_dict[".is_stop"]       = token.is_stop       #Ist es ein Stoppwort?
      info_dict[".has_vector"]    = token.has_vector    #Haben Sie word2vec-Informationen?
      info_dict["list(.lefts)"]   = list(token.lefts)   #Verwandte Wortzusammenfassung(links)
      info_dict["list(.rights)"]  = list(token.rights)  #Verwandte Wortzusammenfassung(richtig)
      info_dict[".dep_"]          = token.dep_          #Abhängigkeitsbeziehung
      info_dict[".head.i"]        = token.head.i        #Token-Nummer des abhängigen Partners
      info_dict[".head.text"]     = token.head.text     #Abhängiger Text
      result_list.append(info_dict)
  
  #Zeigen Sie die Liste der erstellten Wörterbücher im DataFrame-Format auf Jupyter an.
  import pandas as pd
  #pd.set_option('display.max_columns', 100)
  df = pd.DataFrame(result_list)
  from IPython.display import display
  display(df)

  ###Abhängigkeitsanzeige
  #Veranschaulichen Sie das Diagrammformat der Abhängigkeit
  #Ein wenig Einfallsreichtum ist erforderlich, um direkt im Labor anzuzeigen
  #https://stackoverflow.com/questions/58892382/displacy-from-spacy-in-google-colab
  from spacy import displacy
  displacy.render(doc, style='dep', jupyter=True, options={'distance': 90})

  ###Visualisierung der abstrakten Klassifikation
  #Wenn der eingegebene Text keinen Ortsnamen usw. enthält,
  #UserWarning: [W006]In der Doc-Objektwarnung wurden keine zu visualisierenden Entitäten gefunden
  #Anzeige der abstrakten Klassifikation
  ent_result_list = []
  for ent in doc.ents:
    ent_dict = {}
    ent_dict[".text"]=ent.text
    ent_dict[".start_char"]=ent.start_char
    ent_dict[".end_cahr"]=ent.end_char
    ent_dict[".label_"]=ent.label_
    ent_result_list.append(ent_dict)
  #Tabellarische Anzeige von DataFrame
  display(pd.DataFrame(ent_result_list))
  #Anzeige im Markierungsformat
  displacy.render(doc, style='ent', jupyter=True, options={'distance': 90})
  
  ###Aufzählung von Schlüsselwörtern
  #Präfix/Es wird in Form von Tailing usw. serviert.
  for chunks in doc.noun_chunks:
    print(chunks,end=", ")

Klicken Sie hier, um die Ausführung auszuführen

#Verwendungsbeispiel
import spacy
nlp = spacy.load('ja_ginza')

target_str = "Gonbei's Baby erkältete sich. Tokyo Patent Approval Office."
easy_display_nlp(nlp, target_str)

Die morphologischen Analyseergebnisse und Hauptattribute werden in Tabellenform angezeigt. Zusätzlich werden die Abhängigkeit und die Extraktion des Namens und des Ortsnamens der Person dargestellt. Welche Art von Analyse wird mit dieser Funktion durchgeführt? Es soll bei der ersten Suche verwendet werden.

GiNZA kann auch Vektoroperationen für Wörter / Sätze ausführen

Sie können die Ähnlichkeit auch berechnen, indem Sie Sätze wie unten gezeigt vektorisieren. (Eingebautes trainiertes Modell)

doc1 = nlp('Dieser Ramen ist köstlich')
doc2 = nlp('Lass uns Curry essen gehen')
doc3 = nlp('Es tut mir leid, dass ich nicht zum Alumni-Verein gehen kann')

print(doc1.similarity(doc2))
print(doc2.similarity(doc3))
print(doc3.similarity(doc1))

> 0.8385934558551319
> 0.6690503605367146
> 0.5515445470506148
> #Die beiden Nahrungsmittelsysteme sind sich am ähnlichsten.

Es scheint, dass die Wortvektorisierung auf die gleiche Weise realisiert werden kann. Überprüfen Sie, ob Sie Vektorinformationen mit token.has_vector haben Es kann besser sein, mit token.lemma_ zur Grundform zurückzukehren. Für von GiNZA trainierte Modelle Ich habe noch nicht genau hingeschaut, daher möchte ich es später überprüfen.

Das ist alles für das Know-how von GiNZA. Keine vorausgesetzten Kenntnisse / Umgebung erforderlich. Öffnen Sie einfach Colaboratory in Ihrem Browser und führen Sie den obigen Code nacheinander aus. ** Jeder kann sehr einfach eine hochpräzise und multifunktionale Analyse der natürlichen Sprache durchführen! ** </ font>

(Anwendungsbeispiel) One-Shot-Analyse der Partysyntax, die die Menschen vor NHK schützt

"Partysyntax zum Schutz der Menschen vor NHK" lautet Ich kann nicht wirklich verstehen, was Sie vor was schützen. Aber mach dir keine Sorgen. Sie können es auf einen Schlag sehen. ** Ja, mit GiNZA **

target_str = "Von der Partei, die die Menschen vor NHK schützt Von der Partei, die NHK schützt Von der Partei, die die Menschen vor NHK schützt Von der Partei, die die Menschen vor NHK schützt Von der Partei, die die Menschen vor NHK schützt"
easy_display_nlp(nlp, target_str)

nhkkoubun.PNG

  • Für diejenigen, die die Partysyntax verstehen wollen, die die Menschen vor NHK als Mensch schützt Siehe den großartigen Artikel unten. https://qiita.com/MirrgieRiana/items/da7dade622770a04d8f7

(Bonus) Beachten Sie, dass ich verwirrt war, bevor ich das obige Beispiel gemacht habe

Ich bin verwirrt darüber, es in Colaboratory zu verwenden

Allein die Installation von pip führt zur Laufzeit zu einem Fehler. Starten Sie Colaboratory neu, um Informationen für Senioren zu erhalten. Es gibt einige Methoden wie, und bevor ich zu der obigen Methode kam, ging ich hin und her. Wenn Sie genau hinschauen, wurde der obige Code jedoch auch auf der offiziellen Website von GiNZA geschrieben.

Anfangs wusste ich nicht, wie ich das machen soll, und ich werde es später erklären. nlp = spacy.load ('ja_ginza') part, nlp = spacy.load(r'/usr/local/lib/python3.6/dist-packages/ja_ginza/ja_ginza-2.2.0') Ich habe es so geändert und eine Methode entwickelt, um den Pfad direkt zu übergeben. Ich möchte berichten, dass es auch damit funktioniert, ohne dass zusätzlicher Code ausgeführt werden muss. !find / | grep spacy | grep data Den Installationspfad finden Sie im GiNZA-Labor unter Es ist eine Methode, um den absoluten Pfad direkt bei spacy.load anzugeben.

Ich bin verwirrt, obwohl die Teiltexte UD-Standards wie "PROPN" sind.

In einigen Beispielen "Sehen Sie, dieses Wort könnte als PROPN analysiert werden!" Weil es so aussieht, war die Erklärung vorbei. (Ich weiß es überhaupt nicht, es sei denn, ich sage "Nomen" oder "Verb")

Diese Klassifikationen werden als universelle Abhängigkeiten bezeichnet Es scheint ein internationaler Standard zu sein, und ich bin gerade nicht studiert, Ich schrieb auch japanische Klassifikationen und untersuchte die Korrespondenz.

Da es zu viele Attributinformationen gab, die nach der Analyse verwendet werden konnten, Das Tabellenformat des Datenrahmens erleichtert die Anzeige.

Ich bin verwirrt, weil "dispacy.render" in Colabo nicht angezeigt wird

Wenn Sie normalerweise die Diagrammanzeige (dispacy.render) für die Extraktion von Abhängigkeiten und Personennamen verwenden Serving on http://0.0.0.0:5000 ... Und so weiter startet der Anzeigeserver, Es scheint, dass der Ablauf darin besteht, auf den Server zuzugreifen und die Abbildung zu sehen. Ich habe die Option so eingestellt, dass sie direkt im Labor angezeigt wird.

Das ist alles für das Know-how von GiNZA.

Jeder kann es leicht wie Live-Codierung aussehen lassen </ font>

Übrigens möchte ich Sie von hier aus nicht wirklich vorstellen ** Die Welt der bösen Jungs **. Zunächst habe ich Live-Codierung wie folgt demonstriert: Bitte sehen Sie das GIF-Video.

Live-Codierungstricks (Pip-Teil der Umgebungskonstruktion weggelassen) ginza_demo_itibu.gif

Ereignisergebnis

Trotz der Erklärung, es sei eine "Magie" "Es sieht so aus, als würde ich wirklich Live-Codierung machen."

Erwarten Sie einen Tsukkomi wie "Nein, ich habe ihn nicht wirklich getroffen" Obwohl ich eine Lüge gemacht habe, die ich ein wenig geschnitten habe, "Es ist leicht, es loszuwerden ..." Weil ich zu viel zusätzlichen Kodawari eingesetzt habe. Es scheint, dass es unerwartet wie ein Superenji aussah (anders als) ~~ Normalerweise hat niemand eine so dumme Implementierung ~~

Mit GiNZA können Sie ganz einfach fortgeschrittene Dinge in nur wenigen Zeilen erledigen. Der synergistische Effekt von ** automatischer Live-Codierung ** ist erstaunlich!

Ich habe versucht, einen Mechanismus für die automatische Live-Codierung zu erstellen. </ font>

Die Implementierungsrichtlinie ist eine gute Mischung aus automatisch und manuell

Die Hauptrichtlinie ist die automatische Eingabe mit pyautogui. Weitere Informationen zur Automatisierung durch pyautogui finden Sie im folgenden Artikel. Ich habe versucht, einen Mechanismus zu erstellen, um "Shakyo" zu automatisieren und Verdienste automatisch zu sammeln.

Dies ist jedoch "vollautomatisch", ** Es gibt überhaupt kein Live-Gefühl. ** ** ** Schreiben Sie den Code einfach vollautomatisch Ad-lib funktioniert nicht und es gibt eine Lücke beim Sprechen.

Also als eine andere Politik, ** Die Behandlung von Tastaturereignissen ist wichtig **.

Jedes Mal, wenn ich einen speziellen Befehl drücke (diesmal setze ich ihn auf Strg + Q), Geben Sie den Code für eine Zelle automatisch ein. Mit anderen Worten, das momentane manuelle Gefühl beim Beginn des Schreibens jeder Zelle, Vor allem ** Es ist wichtig, "nur" jede Zelle "manuell" "auszuführen"! </ font> **

Mit dieser moderaten automatischen und manuellen Mischung Das Codieren / Tippen wird automatisch, während ** Der Grund, dass nur "das Vergnügen, die ENTER-Taste zu drücken" manuell bleibt **. Um während des Erklärens usw. im Gespräch durchzuführen Es ist auch perfekt für Event-Fortschritte wie LT.

So implementieren Sie die Behandlung von Tastaturereignissen

Verwenden Sie eine Bibliothek namens Tastatur.

  • Dies ist kein Labor Beachten Sie, dass es auf der PC-Seite zur Präsentation implementiert / ausgeführt wird.
pip install keyboard

Einzelheiten zu den Spezifikationen dieser Bibliothek finden Sie weiter unten. https://github.com/boppreh/keyboard#keyboardon_press_keykey-callback-suppressfalse

Grundlegende Verwendung der Tastaturbibliothek

Die wichtigsten Punkte sind wie folgt. (Siehe alle Codes unten für Details)

keyboard.add_hotkey('ctrl+q', my_auto_func, args=(1, ) )

Fügen Sie solche Hotkeys hinzu Jedes Mal, wenn Strg + q gedrückt wird Führen Sie die mit pyautogui erstellte automatische Eingabefunktion (my_auto_func) aus.

Listen Sie den Inhalt, den Sie im Voraus eingeben möchten, als Zeichenfolge auf In my_auto_func können Sie sie der Reihe nach ausgeben. (Die erste Ausführung ist eine Zeichenfolge für die erste Zelle und das zweite Mal ist eine Zeichenfolge für die zweite Zelle.)

Probleme mit der Tastaturbibliothek

Es scheint, dass es fehlerhaft sein wird, wenn Sie die Taste "halbe Breite / volle Breite" drücken. Es scheint, dass der Hotkey losgelassen wird.

Zunächst sind die Sätze, die in der Verarbeitung natürlicher Sprache analysiert werden sollen Ich dachte daran, es manuell einzugeben. Dieses Problem konnte jedoch nicht gelöst werden, und zu diesem Zeitpunkt Ich beschloss, alles automatisch zu tippen. (Nur Shift + Enter der Ausführung ist manuell ♪)

Punkte, über die man sich Sorgen machen muss / komplizierte Punkte mit Pyautogui

Wenn Sie versuchen, ":" auf einer anderen als einer US-Tastatur einzugeben, Die Taste "Shift +:" wird gesendet und "*" eingegeben. Referenz: https://teratail.com/questions/79973

Obwohl ich unter Bezugnahme auf den obigen Link Maßnahmen ergriffen habe, Beenden Sie die Eingabe von Zeichen für Zeichen mit dem Befehl typewrite (siehe unten).

Implementierung gestoppt = Zeichenketten einzeln eingeben


pyautogui.typewrite("abcdefg", interval = 0.1)

Bedienen Sie / über die Zwischenablage wie unten gezeigt Ich habe es implementiert, indem ich es mit Strg + V gedrückt habe.

Angenommene Implementierung = alle Ausgaben über die Zwischenablage


#Kopieren Sie die Zeichen in die Zwischenablage
pyperclip.copy(cp_str)
#Alle Zeichenketten werden eingefügt und registriert
pyautogui.hotkey('ctrl', 'v')

Wenn Sie Japanisch eingeben möchten, weil das Schlüsselproblem "halbe Breite / volle Breite" vorliegt, Es ist mühsam, einen Giji Henkan wie ~~ Auto Copying ~~ zu erstellen Dies liegt daran, dass das Erstellen über die Zwischenablage einfacher ist. Diesmal ist es akzeptabel, dass Japanisch direkt herauskommt, ohne eine Konvertierung zu durchlaufen, und unnatürlich ist.

Auch im Labor Wenn Sie auf "Linie brechen" klicken, wird diese automatisch eingerückt Für andere mit Schlüsseln emulierte Methoden als die Zwischenablage Wenn Sie die einzugebende Codezeichenfolge nicht verarbeiten, wird der Einzug verschoben. Ohne es in der Methode über die Zwischenablage zu berücksichtigen, Es ist ein großer Vorteil, dass Sie den Originalcode als Argument kopieren und einfügen können is

Jetzt kann jeder Code in LT leben! ??

Ich dachte, aber als ich es geschafft hatte und mir die automatische Eingabe ansah, ** Die größte Fehleinschätzung </ font> **.

Weil es Zeichen für Zeichen in völlig gleichen Intervallen erscheint ** Ich kann die Menschheit überhaupt nicht fühlen! </ font> **

** Die Eingabe erfolgt im gleichen Tempo wie in der Vergangenheit. </ font> ** ~~ Ich habe es überhaupt nicht bemerkt, als ich die Sutras gemacht habe ~~

Selbst wenn Sie Uke unter der Voraussetzung anstreben, dass es herauskommt (zerlegen Sie sich schließlich) ** Es macht keinen Spaß, es sehr einfach loszuwerden. </ font> **

Also dachte ich darüber nach, eine natürliche Atmosphäre zu schaffen.

Automatische Typabstimmung (Fehlerbeispiel)

Die Methode, an die ich ursprünglich gedacht hatte, war Von pyautogui.hotkey und pyautogui.typewrite Um das Schreibintervall zufällig zu machen So stellen Sie das Intervall ein und geben den Schlaf mit Zufallszahlen ein.

Das Problem war jedoch, dass der Typ zu langsam war. Es scheint ein "minimales Betriebsintervall" in Pyautogui zu geben, Es gibt immer eine gewisse Wartezeit für jede Operation. Wenn Sie jedes Zeichen bedienen, ist der Typ zu langsam.

Wie zu warten, wie Intervall und Schlaf, Wie man wie Hotkey und Schreibmaschine schlägt, Wartezeit-Zufallszahlen-Einstellbereich usw. Ich habe einige kombiniert, aber es sieht nicht natürlich aus.

Automatische Typoptimierung (Adoptionsbeispiel)

Betrachtet man den automatischen Schreibvorgang, Anstatt in angemessenen Intervallen zu tippen Es sieht natürlicher aus, wenn mehrere Zeichen zusammen erscheinen. Ich habe bemerkt, dass. Es fühlt sich an, als würden Menschen alle paar Buchstaben sofort treffen.

Kombinieren Sie also mehrere Zeichen für jede geeignete Wahrscheinlichkeit (Speichern Sie also die Ausgabezeichenfolge im Clip, bevor Sie Strg + v ausführen.) Es wurde implementiert, um alle auf einmal auszugeben. Siehe den gesamten Code unten für eine detaillierte Implementierung.

Selbst bei Geschwindigkeiten, die in der Realität nicht möglich sind (mehrere Tasteneingaben werden gleichzeitig ausgegeben) Das sah natürlicher aus. (Es ist ein individueller Eindruck) Damit fühlt es sich an wie menschliches Tippen, Ich konnte die automatische Eingabe implementieren.

~~ Ich fing an, härter an der natürlichen Eingabe zu arbeiten als an der ursprünglichen Verarbeitung der natürlichen Sprache ~~ ~~ Es war ein gefährliches Zeichen, weil ich mich vor drei Tagen für das Thema entschieden habe ~~

Alle Codes des Auto-Live-Codierungsmechanismus

Nach so verschiedenen Studien wurde der folgende Code vervollständigt. Wenn Sie den einzugebenden Teil der Zeichenfolge ersetzen, Mit LT kann jeder eine Live-Demo im Codierungsstil mit LT realisieren!

~~ Ich schreibe, dass Missbrauch strengstens verboten ist, aber es scheint, dass nur Missbrauch durchgeführt werden kann ~~

Alle Codes für die automatische Live-Codierung


import pyautogui
import pyperclip
import time

import random

#Tastaturereignis hinzufügen
import keyboard
#https://github.com/boppreh/keyboard#keyboardon_press_keykey-callback-suppressfalse

#'''Es wird zu einer Zeichenkette mit dreifachen Anführungszeichen und Zeilenumbrüchen.
#Wenn Sie hier eine Codegruppe schreiben,
#Jedes Mal, wenn Sie einen Hotkey drücken, wird der Text aufgelistet
#Die Pseudokonvertierung von Japanisch wird nicht unterstützt (da dies einfach, aber mühsam ist).

my_str_list = [

'''!pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz"
''',

'''import pkg_resources, imp
imp.reload(pkg_resources)
''',

'''import spacy
nlp = spacy.load('ja_ginza')
''',

'''
doc = nlp("Heute ist eine Pizza-Party in Tokio. Gonbei's Baby erkältete sich.")
''',

'''for s in doc.sents:
  for t in s:
    info = [t.orth_, t._.reading, t.tag_]
    print(info)
''',

'''from spacy import displacy
displacy.render(doc, style='dep', jupyter=True, options={'distance': 90})
''',

'''
displacy.render(doc, style='ent', jupyter=True, options={'distance': 90})
''',

'''doc = nlp("Eine Partei, die die Menschen vor der Partei schützt, die die Menschen vor der NHK schützt")
displacy.render(doc, style='dep', jupyter=True, options={'distance': 90})
''',

'''doc1 = nlp('Dieser Ramen ist köstlich')
doc2 = nlp('Lass uns Curry essen gehen')
doc3 = nlp('Es tut mir leid, dass ich nicht zum Alumni-Verein gehen kann')
''',

'''print(doc1.similarity(doc2))
print(doc2.similarity(doc3))
print(doc3.similarity(doc1))
''',

]

#Globale Variablen
now_counter = 0

#Hauptausführungsfunktion (kein Argument verwendet)
def my_auto_func(arg_val):
  global now_counter
  #Verhindert, dass der Vorgang fortgesetzt wird, während die für die Hotkey-Einstellung verwendete Taste gedrückt gehalten wird. Warte ein wenig
  #Insbesondere wenn Sie die Steuertaste usw. gedrückt halten, ist es einfach, einen anderen Vorgang einzugeben. Seien Sie also vorsichtig
  time.sleep(1.5)
  
  print("called: "+str(now_counter))

  #Wenn die Taste gedrückt wird und als nächstes nichts ausgegeben werden muss, endet der Vorgang
  if now_counter >= len(my_str_list):
    print("END: finish")
    exit()
  
  cp_str = ""
  #Version kopieren
  for my_char in my_str_list[now_counter]:
    #Um die Geschwindigkeit anzupassen, habe ich unter bestimmten Bedingungen mehrere Zeichen gleichzeitig eingefügt.
    sl_time = random.uniform(-0.03, 0.10)
    cp_str += my_char
    if sl_time < 0 :
      #Fahren Sie fort, ohne einzufügen
      continue
    else :
      #Kopieren Sie die Zeichen in die Zwischenablage
      pyperclip.copy(cp_str)
      #Alle Zeichenketten werden eingefügt und registriert
      pyautogui.hotkey('ctrl', 'v')
      #Die zum Einfügen verwendete ist klar
      cp_str = ""
      #Schlaf durch Zufallszahlen
      time.sleep(sl_time)
  #Fügen Sie nach dem Verlassen der Schleife ein, falls noch etwas übrig ist
  if len(cp_str) > 0 :
      #Kopieren Sie die Zeichen in die Zwischenablage
      pyperclip.copy(cp_str)
      #Alle Zeichenketten werden eingefügt und registriert
      pyautogui.hotkey('ctrl', 'v')
      #Die zum Einfügen verwendete ist klar
      cp_str = ""
  
  
  now_counter += 1
  print("END: my_auto_func : "+str(now_counter))

#Bonus. Eine Funktion zur Behandlung von Fehlern während der Demonstration
#Setzen Sie den Zähler auf den vorherigen zurück und schreiben Sie denselben Code erneut oder beenden Sie ihn.
def my_sub_func(arg_val):
  global now_counter
  print("called: "+"for_before")
  now_counter -=1
  
  #Wenn die Taste gedrückt wird und der Ausgang negativ ist, endet der Vorgang.
  if now_counter < 0:
    print("END: finish")
    exit()
  
  print("END: my_sub_func : "+str(now_counter))

#Unten die Hauptroutine
#Wenn Sie unterwegs zwischen voller und halber Breite wechseln, scheint das Hinzufügen von Hotkeys fehlerhaft zu sein. Berühren Sie sie also nicht.
#(Im Modus halber Breite ausführen)
#Beim Anhalten "Strg+Sie können diese Python-Seite mit "c" zwangsweise beenden.
if __name__ == "__main__":

  try:
    #Fügen Sie einen Hotkey und sein Ereignis nur einmal hinzu.
    #Haupt-Hotkey-Einstellungen: Duplizieren Sie keine anderen Verknüpfungen in Ihrer App
    keyboard.add_hotkey('ctrl+q', my_auto_func, args=(1, ) )
    
    #Sub-Hotkey-Einstellungen: Duplizieren Sie keine anderen Verknüpfungen in Ihrer App
    keyboard.add_hotkey('ctrl+i', my_sub_func, args=(1, ) )

    print("Press ESC to stop.")

    keyboard.wait('esc')
    print("esc-END")

  except:
    import traceback
    print(traceback.format_exc())
    exit()

  exit()

Was ist der Reiz der automatischen Live-Codierung?

Aufgrund der begrenzten Zeit von LT Auch wenn Sie Colaboratory vorführen Selbst wenn Sie darüber nachdenken, ist es besser, den Code von Anfang an vorzubereiten. Es ist verrückt, Live-Codierung zu machen. Aber, ** Interessant wie verrückt ** (von Akagi)

Tatsächlich wird der Code jedoch im Voraus vorbereitet und sieht gefährlich aus ** Vergnügen namens Sicherheit, Vergnügen namens Sicherheit ** (von Tonegawa) Ein Mechanismus zum Schmecken.

Jeder mit diesem ** Es kann möglich sein, sich auf den ersten Blick als "Superenji" auszugeben **.

  • Ursprünglich, wenn es sich um eine Implementierung dieser Ebene handelt, wenn es sich um Windows handelt, Es ist wahrscheinlich einfacher, ein automatisiertes Tool wie "UWSC" zu verwenden. Ich habe es in Python implementiert, damit es später auf einem Mac verwendet werden kann. (Nicht auf dem Mac ausprobiert)

(Bonus) Fehlleitungsmethode als Trick

Fehlleitung wird hauptsächlich für Tricks verwendet, Ein Phänomen oder eine Technik, die die Aufmerksamkeit des Publikums auf einen anderen Ort lenkt, der nicht beabsichtigt ist.

Um es "live" aussehen zu lassen, ist es gut, die Überzeugungen des Publikums "zu machen".

・ Wagen Sie es, das erste Labor manuell zu starten Suchen Sie, indem Sie Colaboratory in Ihren Browser eingeben. ・ Erhöhen Sie die Bewegung von Shift + Enter zur Laufzeit, um das manuelle Gefühl hervorzuheben ・ Beim automatischen Tippen befindet sich Ihre Hand (natürlich) auf der Tastatur. ・ Anstatt plötzlich von der Live-Codierung einzugeben Wenn es dieser Typ ist, ist es vielleicht in Ordnung, es mit Supergeschwindigkeit zu implementieren? Es bringt mich zum Nachdenken Vorgeben, eine Atmosphäre zu schaffen, in der man etwas Erstaunliches tut usw.

Nachwort

Unangenehme Verarbeitung natürlicher Sprache, die sehr einfach durchzuführen ist

Mit GiNZA Sehr einfach (nur Browser / Umgebung nicht erforderlich) Böse (hohe Präzision / Multifunktion) Natürliche Sprache verarbeiten können Ich konnte es ausdrücken ~ Lasst uns den Donner begrüßen ~~ Die Unschärfe der Welt ~~ (Von Red Hot Chili Pepper)

Dieses Mal heißt es eigentlich LT, aber die Zeit ist ziemlich lang, 15 Minuten, ~~ Ist es nicht schon im Bereich LT? ~~ "Wie man auf interessante Ideen kommt" "Lernmethode zum Umgang mit Technologie" Ich habe über zwei Dinge gesprochen.

Ich erwähnte es als "Lernmethode, um etwas mit Technologie zu tun" Zur Veranschaulichung der "HB-Bleistiftmethode" Diesmal haben wir eine Live-Codierungsdemonstration gegeben.

Was ist die HB-Bleistiftmethode?

** Genau wie beim Falten eines HB-Stifts im Handumdrehen ** ** Lernmethode, die Sie für selbstverständlich halten können ** ** Das Wichtigste ist, "zu erkennen" **

Zum Beispiel ist die Verarbeitung natürlicher Sprache einfach, Eine Lernmethode, bei der man nur erkennen muss, dass es natürlich ist, dies tun zu können.

Für etwas (wenn Sie eine Idee haben) Apropos, ich denke nur, wenn Sie es in GiNZA nachschlagen, können Sie es tun. Wenn Sie es wirklich wissen wollen, nachdem Sie darüber nachgedacht haben Sie können diesen Artikel noch einmal lesen oder GiNZA überprüfen. Wenn Sie sich nur diesen LT ansehen, ist das Lernen bereits vorbei! ~~ Wenn ich an dieses Wort in meinem Kopf denke ~~ ~~ Weil es schon vorbei ist ~~ ~~ Du kannst es benutzen, wenn du "gelernt" hast! ~~

● Lernmethoden wie Einführungsbücher / Lehrpläne / Qualifikationsprüfungen ⇒ Die Person, die es tut, ist gut, aber ich schlafe unterwegs ein, also kann ich nicht. Es ist schwer.

● Lernen, Ihre Hände zu bewegen und selbst etwas zu machen ⇒ Es kann am Ende sein. Solange jedoch die menschliche Zeit begrenzt ist, ist alles unmöglich. Was ist die Motivation zu tun?

● Methode zur Untersuchung der Verzögerung ⇒ Tun Sie es, wenn Sie es brauchen, ähnlich wie bei der HB-Bleistiftmethode. Ohne die Information "Was kann ich tun, wenn ich lerne?" Ich kann mir keine Idee einfallen lassen, wenn ich darüber nachdenke. Auch "wenn Sie es brauchen" ist Ich persönlich mag den Ausdruck nicht, weil es sich so anfühlt, als würde er gemacht.

● HB-Bleistiftmethode ⇒ In diesem Artikel sollten Sie nur das Bild des Ausführungsergebnisses von GiNZA betrachten. Eine Lernmethode des Abschlusses. Mir ist nur klar, dass es in ungefähr 3 Minuten erledigt werden kann. Der Vorteil ist, dass es einfach ist. Selbst wenn Sie keine Zeit haben, die Details zu sehen, können Sie vage verstehen, was Sie tun können. Dies hat den Effekt, dass es einfacher ist, Ideen zu entwickeln, einschließlich verlernter Techniken. Werde ich das zu einem späteren Zeitpunkt erfahren? Motivation ist wahrscheinlich.

~~ Wie Luft ein- und ausatmen! ~~ ~~ Das Manipulieren des Standes ist eine natürliche mentale Kraft! ~~ ~~ Genau die Lernmethode, die die Welt dominiert ~~

Zusammenfassung

Also diesmal "Lassen Sie uns erkennen, dass eine hochpräzise Analyse der natürlichen Sprache nur mit einem Browser durchgeführt werden kann!" "Lassen Sie uns erkennen, dass halbautomatische Live-Codierung in LT demonstriert werden kann!" Ich habe zwei Beispiele vorgestellt.

Wenn Sie eine Ideenoffenbarung haben Wenn dieser Artikel ein wenig positiv funktioniert, wäre ich nicht so glücklich.

Zum Schluss mit den GiNZA-Entwicklern Wir möchten allen an der Veranstaltung beteiligten Personen unseren Dank aussprechen.

das ist alles.