Traitement du langage 100 coups 2015 ["Chapitre 4: Analyse morphologique"](http: //www.cl.ecei.tohoku) Il s'agit d'un enregistrement du 31e "verbe" de .ac.jp / nlp100 / # ch4).
Depuis que j'utilise pandas
, je peux le traiter en une phrase, et c'est tellement facile que je ne peux pas le battre.
Lien | Remarques |
---|---|
031.verbe.ipynb | Lien GitHub du programme de réponse |
100 coups de traitement du langage amateur:31 | Copiez et collez la source de nombreuses pièces source |
Officiel MeCab | Page MeCab à regarder en premier |
type | version | Contenu |
---|---|---|
OS | Ubuntu18.04.01 LTS | Il fonctionne virtuellement |
pyenv | 1.2.16 | J'utilise pyenv car j'utilise parfois plusieurs environnements Python |
Python | 3.8.1 | python3 sur pyenv.8.J'utilise 1 Les packages sont gérés à l'aide de venv |
Mecab | 0.996-5 | apt-Installer avec get |
Dans l'environnement ci-dessus, j'utilise les packages Python supplémentaires suivants. Installez simplement avec pip ordinaire.
type | version |
---|---|
pandas | 1.0.1 |
Appliquer l'analyseur morphologique MeCab au roman «Je suis un chat» de Natsume Soseki et obtenir les statistiques des mots du roman.
Analyse morphologique, MeCab, paroles de partie, fréquence d'occurrence, loi de Zipf, matplotlib, Gnuplot
Utilisation de MeCab pour le texte (neko.txt) du roman de Natsume Soseki "Je suis un chat" Effectuez une analyse morphologique et enregistrez le résultat dans un fichier appelé neko.txt.mecab. Utilisez ce fichier pour implémenter un programme qui répond aux questions suivantes.
Pour les problèmes 37, 38 et 39, utilisez matplotlib ou Gnuplot.
Extraire toutes les formes de surface du verbe.
import pandas as pd
def read_text():
# 0:Type de surface(surface)
# 1:Partie(pos)
# 2:Sous-classification des paroles des parties 1(pos1)
# 7:Forme basique(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'] != 'Vide') & (df['surface'] != 'EOS') & (df['pos'] != 'symbole')]
df = read_text()
df[df['pos'] == 'verbe']['surface']
Je supprime les lignes supplémentaires que j'ai lues du fichier. Techniquement, nous extrayons uniquement les lignes nécessaires plutôt que «supprimer».
df ['pos']! = 'Blank'
devrait être spécifié pour pos1
(sous-classification de partie de partie 1), mais comme je l'ai expliqué la dernière fois, le blanc est décalé d'une colonne, donc cela ne peut pas être aidé. Une condition est spécifiée pour pos
(paroles de partie).
python
df[(df['pos'] != 'Vide') & (df['surface'] != 'EOS') & (df['pos'] != 'symbole')]
Suite à la suppression des lignes supplémentaires, les informations DataFrame dans print (df.info ())
sont les suivantes.
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
Et les 5 premières et dernières lignes du DataFrame.
C'est la partie où la "forme de surface" du "verbe" est extraite.
python
df[df['pos'] == 'verbe']['surface']
Lorsque le programme est exécuté, les résultats suivants sont affichés.
Résultat de sortie
13 Né
19
31 pleurs
37
39
..
212527 morts
212532 obtenir
212537 morts
212540 gain
212541
Name: surface, Length: 28119, dtype: object
Recommended Posts