3. Verarbeitung natürlicher Sprache durch Python 2-1. Netzwerk für das gleichzeitige Auftreten

** 1. Aufbereitung von Textdaten **

⑴ Import verschiedener Module

import re
import zipfile
import urllib.request
import os.path
import glob

⑵ Dateipfad abrufen

URL = 'https://www.aozora.gr.jp/cards/000148/files/772_ruby_33099.zip'

(3) Erfassung von Textdateien und Extraktion von Text

def download(URL):

    #Zip-Datei herunterladen
    zip_file = re.split(r'/', URL)[-1]
    urllib.request.urlretrieve(URL, zip_file)
    dir = os.path.splitext(zip_file)[0]

    #Entpacken und speichern Sie die Zip-Datei
    with zipfile.ZipFile(zip_file) as zip_object:
        zip_object.extractall(dir)
    os.remove(zip_file)

    #Holen Sie sich den Pfad der Textdatei
    path = os.path.join(dir,'*.txt')
    list = glob.glob(path)
    return list[0]
def convert(download_text):

    #Datei lesen
    data = open(download_text, 'rb').read()
    text = data.decode('shift_jis')

    #Extraktion von Text
    text = re.split(r'\-{5,}', text)[2] 
    text = re.split(r'Unteres Buch:', text)[0]
    text = re.split(r'[#Neue Seite]', text)[0]

    #Löschen Sie nicht benötigte Teile
    text = re.sub(r'《.+?》', '', text)
    text = re.sub(r'[#.+?]', '', text)
    text = re.sub(r'|', '', text)
    text = re.sub(r'\r\n', '', text)
    text = re.sub(r'\u3000', '', text)
    text = re.sub(r'「', '', text)
    text = re.sub(r'」', '', text)

    return text
#Dateipfad abrufen
download_file = download(URL)

#Extrahieren Sie nur den Text
text = convert(download_file)

#In eine anweisungsbasierte Liste aufteilen
sentences = text.split("。")

image.png

** 2. Koexistenzdaten erstellen **

⑷ Installation von MeCab

!apt install aptitude
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3==0.7

⑸ Erstellung einer Nomenklaturliste für jeden Satz

import MeCab
mecab = MeCab.Tagger("-Ochasen")

#Generieren Sie eine satzbasierte Nomenklaturliste
noun_list = [
             [v.split()[2] for v in mecab.parse(sentence).splitlines()
             if (len(v.split())>=3 and v.split()[3][:2]=='Substantiv')]
             for sentence in sentences
             ]

⑹ Generierung von Co-Auftrittsdaten

  • Co-Auftrittsdaten sind ein Objekt vom Typ eines Wörterbuchs, das aus Wortpaaren für das gleichzeitige Auftreten und der Häufigkeit des Auftretens besteht.
import itertools
from collections import Counter
  • itertools: Ein Modul, das Iteratorfunktionen für eine effiziente Schleifenverarbeitung sammelt.
  • Counter: Ein Modul zum Zählen der Anzahl der Vorkommen jedes Elements
#Generieren Sie eine satzbasierte Nomenklaturpaarliste
pair_list = [
             list(itertools.combinations(n, 2))
             for n in noun_list if len(noun_list) >=2
             ]

#Abflachen der Nasenpaarliste
all_pairs = []
for u in pair_list:
    all_pairs.extend(u)

#Zählen Sie die Häufigkeit von Substantivpaaren
cnt_pairs = Counter(all_pairs)
  • Extrahieren Sie nacheinander zwei oder mehr Wörter aus der satzbasierten Nomenklaturliste, generieren Sie eine Kombination aus zwei Wörtern mit "itertools.combinations ()", listen Sie sie mit "list ()" auf und speichern Sie sie in "pair_list".
  • Da pair_list jedoch eine Satzeinheit ist, kann sie nicht so gezählt werden, wie sie ist. Reduzieren Sie es daher, indem Sie es der neu vorbereiteten Variablen "all_pairs" nacheinander mit "verlängern ()" hinzufügen.
  • Übergeben Sie dies an Counter (), um ** Wörterbuch-Co-Auftrittsdaten ** cnt_pairs zu generieren.

image.png

** 3. Zeichnungsdaten erstellen **

import pandas as pd
import numpy as np

⑺ Eingrenzen von Daten zum gleichzeitigen Auftreten

  • Grenzen Sie die Elemente ein, um das Erscheinungsbild beim Zeichnen zu vereinfachen. Hier erstellen wir eine Liste der Top-50-Sets nach Erscheinungshäufigkeit.
tops = sorted(
    cnt_pairs.items(), 
    key=lambda x: x[1], reverse=True
    )[:50]
  • Die Syntax ist eine Kombination aus den Ausdrücken "sortiert ()" und "Lambda" und sortiert Objekte vom Typ Wörterbuch basierend auf den unter "Schlüssel = Lambda" angegebenen Elementen.
  • Die Referenz "x [1]" extrahiert die oberen 50 Paare aus dem zweiten Element, dh der umgekehrten Sortierung nach der Frequenz "reverse = True".

⑻ Erzeugung gewichteter Daten

noun_1 = []
noun_2 = []
frequency = []

#Erstellen eines Datenrahmens
for n,f in tops:
    noun_1.append(n[0])    
    noun_2.append(n[1])
    frequency.append(f)

df = pd.DataFrame({'Die obige Nomenklatur': noun_1, 'Spätere Nomenklatur': noun_2, 'Häufigkeit des Auftretens': frequency})

#Gewichtete Daten einstellen
weighted_edges = np.array(df)
  • Konvertierte die Top 50 Sätze von Co-Auftrittsdaten in ein Array, um "weighted_edges" (gewichtete Daten) zu erstellen.
  • Unten ist der Datenrahmen vor der Konvertierung in ein Array.

image.png

** 4. Zeichnen eines Netzwerkdiagramms **

⑼ Import der Visualisierungsbibliothek

import matplotlib.pyplot as plt
import networkx as nx
%matplotlib inline 
  • ** networkX ** ist ein Paket zum Erstellen und Bearbeiten komplexer Netzwerke und Diagrammstrukturen in Python.
  • Im Netzwerkdiagramm werden die Scheitelpunkte als ** Knoten ** und die Kanten, die die Scheitelpunkte verbinden, als ** Kanten ** bezeichnet.
  • Um die Knotenbezeichnung auf Japanisch anzuzeigen, muss die folgende japanize_matplotlib importiert und anschließend die japanische Schriftart angegeben werden.
#Ein Modul, das matplotlib mit dem japanischen Display kompatibel macht
!pip install japanize-matplotlib
import japanize_matplotlib

⑽ Visualisierung mit NetworkX

  • Das Verfahren zum Zeichnen eines Netzwerkdiagramms mit networkX besteht aus drei Schritten: ➀ Erstellen eines Objekts mit einer Diagrammstruktur, ➁ Laden von Daten und ➂ Festlegen von Spezifikationen wie Knoten und Kanten auf matplotlib und Zeichnen.
  • Es scheint verwirrend zu sein, aber font_family =" IPAexGothic " ist der Schlüssel, und durch Angabe von ** font_family mit einer japanischen Schriftart ** wird die Knotenbezeichnung mit der japanischen Anzeige kompatibel gemacht.
#Diagrammobjekt generieren
G = nx.Graph()

#Gewichtete Daten lesen
G.add_weighted_edges_from(weighted_edges)

#Zeichnen eines Netzwerkdiagramms
plt.figure(figsize=(10,10))
nx.draw_networkx(G,
                 node_shape = "s",
                 node_color = "c", 
                 node_size = 500,
                 edge_color = "gray", 
                 font_family = "IPAexGothic") #Schriftartspezifikation

plt.show()

image.png


  • Um den Mechanismus der gleichzeitigen Netzwerkanalyse als einen großen Fluss zu erfassen, werden Details wie das Setzen von Stoppwörtern (auszuschließende Wörter) und die Verarbeitung zusammengesetzter Wörter (z. B. "Individualismus" anstelle von "Individuum" und "Prinzip") usw. Ich schloss die Augen.
  • Außerdem habe ich es der Einfachheit halber in die folgenden vier Arbeitsschritte unterteilt. Es gibt vier Schritte: ➀ Vorbereitung der Textdaten, creation Erstellung von Daten für das gleichzeitige Auftreten, ➂ Erstellung von Zeichnungsdaten und drawing Zeichnen von Netzwerkdiagrammen. Im Allgemeinen denke ich jedoch, dass es in drei Schritten verstanden wird: ➊ Vorverarbeitung, ➋ Analyse und ➌ Visualisierung.
  • Besonders ➊ Ich denke, die Vorverarbeitung ist das Herzstück der Verarbeitung natürlicher Sprache. Eigentlich kann es als Teil von ➋ in das Skript aufgenommen werden, aber kurz gesagt, es geht darum, "wie man die notwendigen Wörter aus den Rohdaten extrahiert". Welche Art von Analyse und welche Kriterien sollten verwendet werden, um Wörter zu extrahieren? Es wird direkt in den Analyseergebnissen angezeigt, was sich auf die Interpretation auswirkt. Es ist die Arbeitseinheit, die am meisten Rücksicht nimmt und Zeit und Energie benötigt.

Recommended Posts

3. Verarbeitung natürlicher Sprache durch Python 2-1. Netzwerk für das gleichzeitige Auftreten
3. Verarbeitung natürlicher Sprache durch Python 2-2. Koexistenznetzwerk [mecab-ipadic-NEologd]
Python: Verarbeitung natürlicher Sprache
3. Verarbeitung natürlicher Sprache durch Python 1-1. Word N-Gramm
100 Sprachverarbeitungsklopfen mit Python 2015
[Python] Ich habe mit der Verarbeitung natürlicher Sprache ~ Transformatoren ~ gespielt
Erstellen einer Umgebung für die Verarbeitung natürlicher Sprache mit Python
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
Ich habe versucht, natürliche Sprache mit Transformatoren zu verarbeiten.
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
RNN_LSTM2 Verarbeitung natürlicher Sprache
Bildverarbeitung mit Python
Erste Schritte mit Python mit 100 Klopfen bei der Sprachverarbeitung
Python: Tiefes Lernen in der Verarbeitung natürlicher Sprache: Grundlagen
Lassen Sie uns die Verarbeitung natürlicher Sprache mit der COTOHA-API genießen
3. Verarbeitung natürlicher Sprache mit Python 1-2. So erstellen Sie einen Korpus: Aozora Bunko
Bildverarbeitung mit Python (Teil 2)
"Apple-Verarbeitung" mit OpenCV3 + Python3
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Neuronales Netzwerk mit Python (Scikit-Learn)
Akustische Signalverarbeitung mit Python (2)
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Modell unter Verwendung eines Faltungsnetzwerks in der Verarbeitung natürlicher Sprache
3. Verarbeitung natürlicher Sprache durch Python 3-1. Wichtiges Tool zur Wortextraktion TF-IDF-Analyse [Originaldefinition]
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
Bildverarbeitung mit Python (Teil 1)
Verarbeitung natürlicher Sprache 1 Morphologische Analyse
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Verarbeitung natürlicher Sprache 3 Wortkontinuität
Bildverarbeitung mit Python (3)
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Python: Vektordarstellung in natürlicher Sprache
Netzwerkprogrammierung mit Python Scapy
Verarbeitung natürlicher Sprache 2 Wortähnlichkeit
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
[Python] Bildverarbeitung mit Scicit-Image
[Übung] Erstellen Sie eine Watson-App mit Python! # 3 [Klassifizierung der natürlichen Sprache]
[Python] Versuchen Sie, Ramen-Shops durch Verarbeitung natürlicher Sprache zu klassifizieren
[Python] Einfache Parallelverarbeitung mit Joblib
Neuronales Netzwerk mit OpenCV 3 und Python 3
100 Klicks in der Verarbeitung natürlicher Sprache Kapitel 4 Kommentar
100 Sprachverarbeitung Knock Kapitel 1 in Python
Einwegverzögerungsmessung des Netzwerks mit Python
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Künstliche Sprache Logivan und Verarbeitung natürlicher Sprache (Verarbeitung künstlicher Sprache)
10 Funktionen von "Sprache mit Batterie" Python
Python-Anfänger versucht 100 Sprachverarbeitung klopfen 2015 (05 ~ 09)
[Sprachverarbeitung 100 Schläge 2020] Kapitel 8: Neuronales Netz
100 Bildverarbeitung mit Python Knock # 2 Graustufen
100 Sprachverarbeitung Knock Kapitel 1 von Python
Vorbereitung zum Starten der Verarbeitung natürlicher Sprache