Sprachverarbeitung 100 Schläge 2015 ["Kapitel 4: Morphologische Analyse"](http: //www.cl.ecei.tohoku) Es ist eine Aufzeichnung von 31. "Verb" von .ac.jp / nlp100 / # ch4). Da ich "Pandas" benutze, kann ich es in einem Satz verarbeiten und es ist so einfach, dass ich es nicht schlagen kann.
Verknüpfung | Bemerkungen |
---|---|
031.Verb.ipynb | Antwortprogramm GitHub Link |
100 Klicks Amateur-Sprachverarbeitung:31 | Kopieren Sie die Quelle vieler Quellteile und fügen Sie sie ein |
MeCab Official | MeCab-Seite zum ersten Mal |
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 |
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
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.
Extrahieren Sie alle Oberflächenformen des Verbs.
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()
df[df['pos'] == 'Verb']['surface']
Ich entferne die zusätzlichen Zeilen, die ich aus der Datei gelesen habe. Technisch gesehen werden nur die erforderlichen Zeilen extrahiert und nicht "gelöscht".
df ['pos']! = 'Blank'
sollte für pos1
angegeben werden (Teil-Teil-Unterklassifizierung 1), aber wie ich letztes Mal erklärt habe, werden die Leerzeichen um eine Spalte verschoben, sodass keine Auswahl besteht Eine Bedingung wird für pos
(Teil des Wortes) angegeben.
python
df[(df['pos'] != 'Leer') & (df['surface'] != 'EOS') & (df['pos'] != 'Symbol')]
Infolge des Entfernens der zusätzlichen Zeile lauten die DataFrame-Informationen wie folgt in "print (df.info ())".
Int64Index: 180417 entries, 0 to 212550
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 surface 180417 non-null object
1 pos 180417 non-null object
2 pos1 180417 non-null object
3 base 180417 non-null object
dtypes: object(4)
memory usage: 6.9+ MB
Und die ersten und letzten 5 Zeilen des DataFrame.
Dies ist der Teil, in dem die "Oberflächenform" des "Verbs" extrahiert wird.
python
df[df['pos'] == 'Verb']['surface']
Wenn das Programm ausgeführt wird, werden die folgenden Ergebnisse ausgegeben.
Ausgabeergebnis
13 Geboren
19
31 weinen
37
39
..
212527 tot
212532 bekommen
212537 tot
212540 Gewinn
212541
Name: surface, Length: 28119, dtype: object