Sprachverarbeitung 100 Schläge 2015 ["Kapitel 4: Morphologische Analyse"](http: //www.cl.ecei.tohoku) Es ist eine Aufzeichnung von 35. "Verkettung der Nomenklatur" von .ac.jp / nlp100 / # ch4). Wie beim letzten Mal ist es ein Inhalt, der von Pandas nicht einfach verarbeitet werden kann. Der Teil "Verkettung der Nomenklatur" ist jedoch keine schwierige Verarbeitung von etwa 10 Zeilen.
Verknüpfung | Bemerkungen |
---|---|
035.Verkettung der Nomenklatur.ipynb | Antwortprogramm GitHub Link |
100 Klicks Amateur-Sprachverarbeitung:35 | 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" Analysieren Sie die Morphologie 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 die Verkettung der Nomenklatur (Substantive, die nacheinander erscheinen) mit der längsten Übereinstimmung.
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'] == 'Substantiv']
df = read_text()
nouns = []
for index in df['surface'].index:
nouns.append(df['surface'][index])
#Verkettung am Ende der Nase, wenn kein Index vor Ihnen liegt
if (index + 1) not in df.index:
#Mehrere(Verkettung)Im Falle von
if len(nouns) > 1:
print(len(nouns), '\t', index, '\t', ''.join(nouns))
nouns = []
#Begrenzt, weil es viele gibt
if index > 2000:
break
Dieses Mal ist nur die Nomenklatur erforderlich, sodass die Einträge unmittelbar nach dem Lesen der Datei auf nur die Nomenklatur eingegrenzt werden.
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')
return df[df['pos'] == 'Substantiv']
Der Rest wird in einer Schleife verarbeitet. Die Beurteilung des Verkettungsende basiert darauf, ob der Index des nächsten Eintrags +1 ist. Gibt die Nomenklatur nur aus, wenn die Länge der Verkettungsliste am Ende der Verkettung 1 oder mehr beträgt.
python
nouns = []
for index in df['surface'].index:
nouns.append(df['surface'][index])
#Verkettung am Ende der Nase, wenn kein Index vor Ihnen liegt
if (index + 1) not in df.index:
#Mehrere(Verkettung)Im Falle von
if len(nouns) > 1:
print(len(nouns), '\t', index, '\t', ''.join(nouns))
nouns = []
Wenn das Programm ausgeführt wird, werden die folgenden Ergebnisse ausgegeben.
Ausgabeergebnis
2 28
2 66 Mensch
2 69 Das Schlimmste
2 172
2 190 Ein Haar
2 209 Dann Katze
2 222 einmal
2 688 Haus
2 860 Andere als Studenten
3 1001
2 1028 Neulich
2 1031 Mima
2 1106 Küche
2 1150 wie es ist
2 1235 Ganztagesstudie
2 1255 Studyer
2 1266 Studyer
2 1288 Fleißig
3 1392 Page 23
2 1515 Außer dem Meister
2 1581 Solange ich bin
2 1599 Morgenmeister
2 1690 Sehr aufmerksam
2 1733 Eine Etage
2 1781 Letzte schwere
3 1829 Neurogastrische Schwäche
2 1913 Sprachpause
2 1961
3 1965 Gesamtfamilie