[PYTHON] 100 Sprachverarbeitung Knock-39 (mit Pandas): Zipf-Gesetz

Sprachverarbeitung 100 Schläge 2015 ["Kapitel 4: Morphologische Analyse"](http: //www.cl.ecei.tohoku) Dies ist die Aufzeichnung von 39. "Zipf's Law" von .ac.jp / nlp100 / # ch4). "Zipfs Gesetz" ist [Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%83%E3%83%97%E3%81%AE%E6%B3 Gemäß% 95% E5% 89% 87) wird es in der folgenden Erklärung geschrieben, und um es klar auszudrücken, die Regel lautet: ** Je häufiger es erscheint, desto größer ist das Gesamtverhältnis **.

Das Zipf-Gesetz (Zipf-Gesetz) oder das Zipf-Gesetz ist eine empirische Regel, nach der der Anteil des k-ten am häufigsten vorkommenden Elements im Ganzen proportional zu $ \ frac {1} {k} $ ist.

Referenzlink

Verknüpfung Bemerkungen
039.Zipfs Gesetz.ipynb Antwortprogramm GitHub Link
100 Klicks Amateur-Sprachverarbeitung:39 Kopieren Sie die Quelle vieler Quellteile und fügen Sie sie ein
MeCab Official MeCab-Seite zum ersten Mal

Umgebung

Art Ausführung Inhalt
OS Ubuntu18.04.01 LTS Es läuft virtuell
pyenv 1.2.16 Ich benutze pyenv, weil ich manchmal mehrere Python-Umgebungen benutze
Python 3.8.1 python3 auf pyenv.8.Ich benutze 1
Pakete werden mit venv verwaltet
Mecab 0.996-5 apt-Installieren Sie mit get

In der obigen Umgebung verwende ich die folgenden zusätzlichen Python-Pakete. Einfach mit normalem Pip installieren.

Art Ausführung
matplotlib 3.1.3
pandas 1.0.1

Kapitel 4: Morphologische Analyse

Inhalt des Studiums

Wenden Sie den morphologischen Analysator MeCab auf Natsume Sosekis Roman "Ich bin eine Katze" an und erhalten Sie die Statistik der Wörter im Roman.

Morphologische Analyse, MeCab, Teiltexte, Häufigkeit des Auftretens, Zipf-Gesetz, matplotlib, Gnuplot

Inhalt anklopfen

Verwenden von MeCab für den Text (neko.txt) von Natsume Sosekis Roman "Ich bin eine Katze" Führen Sie eine morphologische Analyse durch und speichern Sie das Ergebnis in einer Datei namens neko.txt.mecab. Verwenden Sie diese Datei, um ein Programm zu implementieren, das die folgenden Fragen beantwortet.

Verwenden Sie für die Probleme 37, 38, 39 matplotlib oder Gnuplot.

39. Zipf-Gesetz

Zeichnen Sie beide logarithmischen Diagramme mit der Häufigkeit des Auftretens von Wörtern auf der horizontalen Achse und der Häufigkeit des Auftretens auf der vertikalen Achse.

Antworten

Antwortprogramm [039.Zipfs Law.ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/04.%E5%BD%A2%E6%85%8B%E7%B4%A0%E8 % A7% A3% E6% 9E% 90 / 039.Zipf% E3% 81% AE% E6% B3% 95% E5% 89% 87.ipynb)

import matplotlib.pyplot as plt
import pandas as pd

def read_text():
    # 0:Oberflächentyp(surface)
    # 1:Teil(pos)
    # 2:Teiltexte Unterklassifizierung 1(pos1)
    # 7:Grundform(base)
    df = pd.read_table('./neko.txt.mecab', sep='\t|,', header=None, 
                       usecols=[0, 1, 2, 7], names=['surface', 'pos', 'pos1', 'base'], 
                       skiprows=4, skipfooter=1 ,engine='python')
    return df[(df['pos'] != 'Leer') & (df['surface'] != 'EOS') & (df['pos'] != 'Symbol')]

df = read_text()

frequency = df['surface'].value_counts().values.tolist()

plt.xscale('log')
plt.yscale('log')

plt.xlim(1, len(frequency)+1)
plt.ylim(1, frequency[0])
plt.xlabel('Rang')
plt.ylabel('Häufigkeit des Auftretens')

plt.scatter(x=range(1, len(frequency)+1), y=df['surface'].value_counts().values.tolist())

Kommentar beantworten

Liste der Auftrittshäufigkeit

Die Funktion value_counts zählt die eindeutigen Frequenzen und die Funktion tolist listet sie auf.

python


frequency = df['surface'].value_counts().values.tolist()

Protokollskalenanzeige

Dieses Mal lautet die Problemstellung "beide logarithmischen Graphen", daher verwende ich die Protokollskala.

Zeichnen Sie beide logarithmischen Diagramme mit der Häufigkeit des Auftretens von Wörtern auf der horizontalen Achse und der Häufigkeit des Auftretens auf der vertikalen Achse.

python


plt.xscale('log')
plt.yscale('log')

Die x-Achse maximiert die Listenlänge + 1 (da Python bei 0 beginnt), und die y-Achse maximiert den 0. Wert, der bei absteigenden Sortierungen am häufigsten vorkommt.

python


plt.xlim(1, len(frequency)+1)
plt.ylim(1, frequency[0])

Ausgabeergebnis (Ausführungsergebnis)

Wenn das Programm ausgeführt wird, werden die folgenden Ergebnisse ausgegeben. Es geht hervorragend bergab.

image.png

Recommended Posts

100 Sprachverarbeitung Knock-39 (mit Pandas): Zipf-Gesetz
Sprachverarbeitung 100 Knocks-31 (mit Pandas): Verben
100 Sprachverarbeitung Knock-38 (mit Pandas): Histogramm
100 Sprachverarbeitung Knock-33 (mit Pandas): Sahen Nomen
100 Sprachverarbeitung Knock-35 (mit Pandas): Nomenklatur
100 Sprachverarbeitung Knock-34 (mit Pandas): "B von A"
100 Sprachverarbeitung Knock-20 (unter Verwendung von Pandas): Lesen von JSON-Daten
100 Sprachverarbeitung Knock-32 (mit Pandas): Prototyp des Verbs
100 Sprachverarbeitung Knock-99 (mit Pandas): Visualisierung durch t-SNE
100 Sprachverarbeitung Knock-95 (mit Pandas): Bewertung mit WordSimilarity-353
100 Sprachverarbeitung Knock-36 (unter Verwendung von Pandas): Häufigkeit des Auftretens von Wörtern
100 Sprachverarbeitung Knock: Kapitel 2 UNIX-Befehlsgrundlagen (mit Pandas)
100 Sprachverarbeitung Knock-83 (mit Pandas): Messung der Wort- / Kontexthäufigkeit
100 Sprachverarbeitung Knock-76 (mit Scicit-Learn): Beschriftung
100 Sprachverarbeitung Knock-73 (mit Scikit-Learn): Lernen
100 Sprachverarbeitung Knock-74 (mit Scicit-Learn): Vorhersage
100 Sprachverarbeitungsklopfen (2020): 28
100 Sprachverarbeitungsklopfen (2020): 38
100 Sprachverarbeitung klopfen 00 ~ 02
100 Sprachverarbeitung Knock-84 (mit Pandas): Erstellen einer Wortkontextmatrix
100 Sprachverarbeitung Knock-97 (mit Scicit-Learn): k-bedeutet Clustering
100 Sprachverarbeitung Knock-71 (mit Stanford NLP): Stoppwort
100 Sprachverarbeitung klopfen 2020 [00 ~ 39 Antwort]
100 Sprachverarbeitung klopfen 2020 [00-79 Antwort]
100 Sprachverarbeitung klopfen 2020 [00 ~ 69 Antwort]
100 Sprachverarbeitung Knock 2020 Kapitel 1
100 Amateur-Sprachverarbeitungsklopfen: 17
100 Sprachverarbeitung klopfen 2020 [00 ~ 49 Antwort]
100 Sprachverarbeitung Knock-52: Stemming
100 Amateur-Sprachverarbeitungsklopfen: 07
100 Sprachverarbeitung Knock 2020 Kapitel 3
100 Sprachverarbeitung Knock 2020 Kapitel 2
100 Amateur-Sprachverarbeitungsklopfen: 09
100 Amateur-Sprachverarbeitungsklopfen: 47
100 Sprachverarbeitung Knock-53: Tokenisierung
100 Amateur-Sprachverarbeitungsklopfen: 97
100 Sprachverarbeitung klopfen 2020 [00 ~ 59 Antwort]
100 Amateur-Sprachverarbeitungsklopfen: 67
100 Sprachverarbeitung Knock-75 (mit Scicit-Learn): Gewicht der Identität
100 Sprachverarbeitung Knock-72 (unter Verwendung von Stanford NLP): Identitätsextraktion
100 Sprachverarbeitung Knock-93 (unter Verwendung von Pandas): Berechnung der Genauigkeitsrate der Analogie-Aufgabe
100 Sprachverarbeitungsklopfen mit Python 2015
100 Sprachverarbeitung Knock-92 (mit Gensim): Anwendung auf Analogiedaten
100 Sprachverarbeitung Knock-51: Wortausschnitt
100 Sprachverarbeitung Knock-58: Extraktion von Taple
100 Sprachverarbeitung Knock-57: Abhängigkeitsanalyse
100 Sprachverarbeitung Knock-50: Satzumbruch
100 Sprachverarbeitung Knock Kapitel 1 (Python)
100 Sprachverarbeitung Knock Kapitel 2 (Python)
100 Sprachverarbeitung Knock-25: Vorlagenextraktion
Sprachverarbeitung 100 Knock-87: Wortähnlichkeit
100 Sprachverarbeitung Knock-94 (mit Gensim): Ähnlichkeitsberechnung mit WordSimilarity-353
Ich habe versucht, 100 Sprachverarbeitung klopfen 2020
100 Sprachverarbeitung Knock-56: Co-Referenz-Analyse
Lösen von 100 Sprachverarbeitungsklopfen 2020 (01. "Patatokukashi")
100 Sprachverarbeitung Knock-37 (mit Pandas): Top 10 der häufigsten Wörter
100 Amateur-Sprachverarbeitungsklopfen: Zusammenfassung
100 Sprachverarbeitung Knock-77 (mit Scicit-Learn): Messung der korrekten Antwortrate
Knock-70 mit 100 Sprachverarbeitung (unter Verwendung von Stanford NLP): Abrufen und Formatieren von Daten
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)