[PYTHON] 100 Sprachverarbeitung Knock-34 (mit Pandas): "B von A"

Sprachverarbeitung 100 Schläge 2015 ["Kapitel 4: Morphologische Analyse"](http: //www.cl.ecei.tohoku) .ac.jp / nlp100 / # ch4) 34. "A B" Datensatz. Diesmal ist es eine Herausforderung, Zeileninformationen zu kombinieren, daher ist es nicht mehr so einfach wie früher. Ich bin nicht gut in Pandas und SQL. Es ist jedoch nicht schwierig, da es sich nur um einen Schleifenprozess handelt.

Referenzlink

Verknüpfung Bemerkungen
034."B von A".ipynb Antwortprogramm GitHub Link
100 Klicks Amateur-Sprachverarbeitung:34 Kopieren Sie die Quelle vieler Quellteile und fügen Sie sie ein
MeCab Official MeCab-Seite zum Anschauen

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
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

Klopfe an den Inhalt

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.

34. "B von A"

Extrahieren Sie die Nomenklatur, in der zwei Nomenklaturen durch "Nein" verbunden sind.

Antworten

Antwortprogramm [034. "A's B" .ipynb](https://github.com/YoheiFukuhara/nlp100/blob/master/04.%E5%BD%A2%E6%85%8B%E7%B4%A0 % E8% A7% A3% E6% 9E% 90 / 034.% E3% 80% 8CA% E3% 81% AEB% E3% 80% 8D.ipynb)

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')
    # EOS,Symbol,Lass ein Leerzeichen
    return df

df = read_text()

POS_TARGET = 'Substantiv'

for index in df['surface'].index:
    
    #Keine spezielle Logik in der ersten und letzten Zeile
    if df['surface'][index] == 'von' \
     and df['pos'][index-1] == POS_TARGET \
     and df['pos'][index+1] == POS_TARGET:
        print(index, '\t', df['surface'][index-1] + 'von' + df['surface'][index+1])
    
    #Begrenzt, weil es viele gibt
    if index > 2000:
        break

Kommentar beantworten

Datei lesen

Im Gegensatz zum vorherigen Klopfen werden EOS, Symbole und Leerzeilen nicht entfernt. Dies liegt daran, dass ich es zu einer Bedingung machen wollte, dass "B von A" stetig ist, einschließlich der Klarheit am Ende von Sätzen und Symbolen.

python


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')
    # EOS,Symbol,Lass ein Leerzeichen
    return df

Urteil "A bis B"

Schleife auf dem Pandas Series Index. Und es wird beurteilt, ob die Zeilen davor und danach Nomenklaturen sind.

python


for index in df['surface'].index:
    
    #Keine spezielle Logik in der ersten und letzten Zeile
    if df['surface'][index] == 'von' \
     and df['pos'][index-1] == POS_TARGET \
     and df['pos'][index+1] == POS_TARGET:
        print(index, '\t', df['surface'][index-1] + 'von' + df['surface'][index+1])

Ausgabeergebnis (Ausführungsergebnis)

Wenn das Programm ausgeführt wird, werden die folgenden Ergebnisse ausgegeben. Da es so viele gibt, sehe ich nur bis zu 2000 Zeilen.

Ausgabeergebnis


118 seine Handfläche
144 auf der Handfläche
151 Schülergesicht
197 Gesicht, das sein sollte
235 in der Mitte des Gesichts
248 Im Loch
292 Die Handfläche des Schülers
294 Hinter der Handfläche
382 was
421 Wesentliche Mutter
478 auf dem Strohhalm
484 In Sasahara
498 Endlich Gedanken
516 Vor dem Teich
658 Endlich was
729 Danke an Kazuki
742 Zaunloch
752 Die drei Haare des Nachbarn
758 Uhr Passage
806 Momentane Gnade
842 Im Haus
858 Sein Schüler
Andere Menschen als 861
892 Vorheriger Schüler
958 Deine Chance
1029 Sansan no San
1046 Brustjucken
1068 Haushälterin
1089 Meister
1121 unter der Nase
1130 Mein Gesicht
1192 Mein Zuhause
1208 Mein Mann
1249 Heimzeug
1281 davon
1300 sein Arbeitszimmer
Auf 1326 Büchern
1341 Hautfarbe
Am 1402
1411 seine jede Nacht
Andere als 1516
1588 Neben meinem Mann
1608 sein Knie
1610 am Knie
1659 Erfahrung
1665 Auf der Reisschüssel
1671 Auf dem 炬 燵
1700 hier raus
1702 Unser kleiner Begleiter
1704 Kleines Bett
1747 Mitte von ihnen
1773 Einer der kleinen Gefährten
1826 Fälle von Nerven
1830 Sexueller Meister
1839 Nebenzimmer
1919 egoistisch
1953 I.
2000 Zwischen den Küchenbrettern

Recommended Posts

100 Sprachverarbeitung Knock-34 (mit Pandas): "B von A"
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-39 (mit Pandas): Zipf-Gesetz
100 Sprachverarbeitung Knock-84 (mit Pandas): Erstellen einer Wortkontextmatrix
100 Sprachverarbeitung Knock-20 (unter Verwendung von Pandas): Lesen von JSON-Daten
100 Sprachverarbeitung Knock-32 (mit Pandas): Prototyp des Verbs
100-Sprach-Verarbeitung Knock-98 (unter Verwendung von Pandas): Clustering nach Ward-Methode
100 Sprachverarbeitung Knock-99 (mit Pandas): Visualisierung durch t-SNE
100 Sprachverarbeitung Knock: Kapitel 2 UNIX-Befehlsgrundlagen (mit Pandas)
100 Sprachverarbeitung Knock-83 (mit Pandas): Messung der Wort- / Kontexthäufigkeit
100 Sprachverarbeitung Knock-30 (unter Verwendung von Pandas): Lesen der Ergebnisse der morphologischen Analyse
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-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 Sprachverarbeitung Knock Kapitel 1
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-90 (mit Gensim): Lernen mit word2vec
100-Sprach-Verarbeitung Knock-79 (mit Scikit-Learn): Präzisions-Recall-Grafikzeichnung
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-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
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
100 Sprachverarbeitung Knock 2020 Kapitel 2: UNIX-Befehle
100 Sprachverarbeitung Knock 2015 Kapitel 5 Abhängigkeitsanalyse (40-49)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitung Knock Kapitel 1 in Python