** Wort N-Gramm ** verwendet eine Reihe benachbarter Wörter als Dateneinheit. 2 Gramm (2 Wörter) ist wie folgt.
** Co-Location ** zählt, wie oft ** Wörter zusammen in der Zieleinheit (Satz) erscheinen **.
Das Obige ist ein Beispiel für zwei Wörter für die Nomenklatur. Mit anderen Worten, unabhängig von der gegenseitigen Positionsbeziehung ** ist die Kombination von Wörtern, die im selben Satz vorkommen, die Dateneinheit **.
import re
import zipfile
import urllib.request
import os.path
import glob
re
: Abkürzung für Regular Expression, ein Modul zur Bearbeitung regulärer Ausdrückezipfile
: Modul zum Bearbeiten von Zip-Dateienurllib.request
: Modul zum Abrufen von Ressourcen im Internetos.path
: Modul zum Bearbeiten von Pfadnamenglob
: Modul zum Abrufen des DateipfadnamensURL = 'https://www.aozora.gr.jp/cards/000148/files/772_ruby_33099.zip'
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("。")
!apt install aptitude
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3==0.7
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
]
v.split () [3] [: 2] == 'noun'
ist der Teil, der dem vierten Element [3]
of v
entspricht, ein Nomen (<font color = "LightBlue"). Es werden nur diejenigen extrahiert, die dem Teil "> ■ </ font>" entsprechen.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)
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.Counter ()
, um ** Wörterbuch-Co-Auftrittsdaten ** cnt_pairs
zu generieren.import pandas as pd
import numpy as np
tops = sorted(
cnt_pairs.items(),
key=lambda x: x[1], reverse=True
)[:50]
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)
import matplotlib.pyplot as plt
import networkx as nx
%matplotlib inline
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
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()
Recommended Posts