[PYTHON] [Introduction à RasPi4] Construction de l'environnement, système de traitement du langage naturel mecab, etc. .. .. ♪

Installez Lib, un système de traitement du langage naturel, pour exécuter l'application de conversation. C'est presque la même chose que ~~ -nano, mais ~~ ** J'ai eu quelques problèmes, alors j'aimerais le décrire attentivement. C'est presque comme une référence, mais certains répertoires sont différents, nous allons donc le supporter. 【référence】

installer mecab

installer mecab

$ sudo apt install mecab
$ sudo apt install libmecab-dev
$ sudo apt install mecab-ipadic-utf8

Je l'ai fait jusqu'ici.

$ mecab
Hakutaka express limité
Nom express limité,Général,*,*,*,*,Express limité,Tokyu,Tokkyu
Est un assistant,Assistance,*,*,*,*,Est,C,sensationnel
Verbe Ku,Indépendance,*,*,Kahen / Kuru,Connexion Word spéciale 2,viens,Ku,Ku
Verbe auxiliaire,*,*,*,Spécial,Forme basique,Ta,Ta,Ta
Assistant Ka,Sous-auxiliaire / assistant parallèle / assistant final,*,*,*,*,Ou,Puissance,Puissance
EOS

Vous obtiendrez la sortie ci-dessus.

Installez neologd

$ git clone https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ sudo bin/install-mecab-ipadic-neologd

Vous pouvez l'installer jusqu'à présent sans aucun problème. Le téléchargement du dictionnaire a pris du temps (environ 30 minutes).

Éditez / etc / mecabrc

Un problème est survenu ici. Dans ubuntu, le dictionnaire est installé dans le répertoire suivant, mais dans Raspbian, il semble être différent.

dicdir = /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd

Alors, recherchez le répertoire dans lequel le fichier existe. 【référence】 Rechercher des fichiers [rechercher et localiser]

$ sudo find / -name '*mecab-ipadic-neologd*'
/usr/lib/arm-linux-gnueabihf/mecab/dic/mecab-ipadic-neologd

Vous pouvez maintenant le réécrire avec la commande suivante. Au fait, veuillez vous référer à la commande vi. 【référence】 Fonctionnement de base de vi

$ sudo vi /etc/mecabrc

Alors, je l'ai réécrit comme suit.

$ cat /etc/mecabrc
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
;dicdir = /var/lib/mecab/dic/debian
dicdir =/usr/lib/arm-linux-gnueabihf/mecab/dic/mecab-ipadic-neologd 
; userdic = /home/foo/bar/user.dic

; output-format-type = wakati
; input-buffer-size = 8192

; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n

Confirmez ensuite que le dictionnaire a changé. J'ai pu les séparer sous une forme cohérente sous le nom de "Hakutaka".

$ mecab
Hakutaka express limité
Nom express limité,Général,*,*,*,*,Express limité,Tokyu,Tokkyu
Hakutaka substantif,Nom propre,Général,*,*,*,Hakutaka,Hakutaka,Hakutaka
EOS

Rendez-le disponible en python3

sudo apt install swig
sudo apt install python3-pip
sudo pip3 install mecab-python3

Maintenant, l'exemple de référence fonctionne comme ci-dessous.

$ python3 mecab_sample.py
nom,固有nom,Général,*,*,*,Hakutaka,Hakutaka,Hakutaka
Hakutaka
nom,固有nom,zone,Général,*,*,Toyama,Toyama,Toyama
Toyama
nom,固有nom,zone,Général,*,*,Kanazawa,Kanazawa,Kanazawa
Kanazawa
nom,固有nom,zone,Général,*,*,Kenrokuen,Ken Roquen,Ken Roquen
Kenrokuen

Installez pyaudio

L'application de conversation utilise pyaudio car elle génère des conversations vocales. 【référence】 Installation de PyAudio | Mémorandum Python

$ sudo apt-get install python3-pyaudio

J'ai pu l'installer avec succès.

Installez Pykakasi

Ceci est utilisé pour générer l'audio enregistré (le nom du fichier est alphabétique) et convertir l'audio généré en texte.

$ pip3 install pykakasi --user

Vérifiez avec le code ci-dessous

# coding: utf-8
from pykakasi import kakasi
kakasi = kakasi()
kakasi.setMode('H', 'a')
kakasi.setMode('K', 'a')
kakasi.setMode('J', 'a')
conv = kakasi.getConverter()
filename = 'C'est une journée ensoleillée.jpg'
print(filename) #C'est une journée ensoleillée.jpg
print(type(filename))
print(conv.do(filename))

Exemple de sortie.


$ python3 pykakasi_ex.py
C'est une journée ensoleillée.jpg
<class 'str'>
honjitsuhaseitennari.jpg

environnement

$ uname -a
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux

$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

Lancer l'application de conversation

gensm_ex1.py

$ python3 gensm_ex1.py

Commence l'entraînement
Epoch: 1
gensm_ex1.py:16: DeprecationWarning: Call to deprecated `iter` (Attribute will be removed in 4.0.0, use self.epochs instead).
  model.train(sentences, epochs=model.iter, total_examples=model.corpus_count)
Epoch: 2
Epoch: 3
Epoch: 4
Epoch: 5
Epoch: 6
Epoch: 7
Epoch: 8
Epoch: 9
Epoch: 10
Epoch: 11
Epoch: 12
Epoch: 13
Epoch: 14
Epoch: 15
Epoch: 16
Epoch: 17
Epoch: 18
Epoch: 19
Epoch: 20
SENT_0
[('SENT_2', 0.08270145207643509), ('SENT_3', 0.0347767099738121), ('SENT_1', -0.08307887613773346)]
SENT_3
[('SENT_0', 0.0347767099738121), ('SENT_1', 0.02076556906104088), ('SENT_2', -0.003991239238530397)]
SENT_1
[('SENT_3', 0.02076556347310543), ('SENT_2', 0.010350690223276615), ('SENT_0', -0.08307889103889465)]
gensm_ex1.py:33: DeprecationWarning: Call to deprecated `similar_by_word` (Method will be removed in 4.0.0, use self.wv.similar_by_word() instead).
  print (model.similar_by_word(u"poisson"))
[('maintenant', 0.15166150033473969), ('Mer', 0.09887286275625229), ('demain', 0.03284810855984688), ('Chat', 0.019402338191866875), ('Aboyé', -0.0008345211390405893), ('nager', -0.02624458074569702), ('maintenant日', -0.05557712912559509), ('chien', -0.0900348424911499)]

RaspberryPi4_conversation/model_skl.py /

$ python3 model_skl.py
TfidfVectorizer(analyzer='word', binary=False, decode_error='strict',
                dtype=<class 'numpy.float64'>, encoding='utf-8',
                input='content', lowercase=True, max_df=1.0, max_features=None,
                min_df=1, ngram_range=(1, 1), norm='l2', preprocessor=None,
                smooth_idf=True, stop_words=None, strip_accents=None,
                sublinear_tf=False, token_pattern='(?u)\\b\\w\\w+\\b',
                tokenizer=None, use_idf=True, vocabulary=None)
{'je': 5, 'Sauce soja': 6, 'ramen': 2, 'Tonkotsu': 1, 'Comme': 4, 'est': 0, 'miso': 3}
{'Sauce soja': 4, 'ramen': 1, 'Tonkotsu': 0, 'Comme': 3, 'miso': 2}
Sauce soja 4
Ramen 1
Tonkotsu 0
J'aime 3
Miso 2
['Tonkotsu', 'ramen', 'miso', 'Comme', 'Sauce soja']
  (0, 4)	0.4976748316029239
  (0, 1)	0.7081994831914716
  (0, 0)	0.3540997415957358
  (0, 3)	0.3540997415957358
  (1, 1)	0.7081994831914716
  (1, 0)	0.3540997415957358
  (1, 3)	0.3540997415957358
  (1, 2)	0.4976748316029239
{'Sauce soja': 6, 'ramen': 3, 'Tonkotsu': 2, 'Comme': 5, 'miso': 4, 'Katsudon': 1, 'Oshiyaki': 0}
  (0, 6)	0.5486117771118656
  (0, 3)	0.6480379064629606
  (0, 2)	0.4172333972107692
  (0, 5)	0.3240189532314803
  (1, 3)	0.6480379064629607
  (1, 2)	0.41723339721076924
  (1, 5)	0.32401895323148033
  (1, 4)	0.5486117771118657
  (2, 3)	0.35959372325985667
  (2, 5)	0.35959372325985667
  (2, 1)	0.6088450986844796
  (2, 0)	0.6088450986844796
[[1.         0.69902512 0.34954555]
 [0.69902512 1.         0.34954555]
 [0.34954555 0.34954555 1.        ]]

De cette façon, je suis arrivé à l'application de conversation en toute sécurité. RaspberryPi4_conversation/auto_conversation_.py

$ python3 auto_conversation_.py -i data/conversation_n.txt  -s data/stop_words.txt
data/conversation_n.txt
>Il fait beau aujourd'hui
(0.41):C'est vrai.
>Qu'est-ce que c'est
(0.55):Qu'est-ce qu'un chien
>Le chien est un chien
(0.41):Où était le chien
>C'est une ruelle là-bas
(0.46):* * * Qu'Est-ce que c'est?
>À proximité du parc
(0.00): """«Pourquoi dois-je le faire seul? Aidez-moi un peu s'il vous plaît.,"""
>Que dois-je aider
(0.46):(Oui c'est bon)
>D'une certaine manière c'est fou
(0.38):De qui parles-tu
>Vous voyez
(0.00):Dites "Awanchan", et au fait, ces gens sont allés ici, et nous sommes allés ici.
>Je ne m'en souviens pas
(0.35):Je ne suis pas idiot
>Je pense que c'est stupide
(0.33):Il semble bon.
> 

Vous trouverez ci-dessous l'installation de ce dont vous avez besoin.

【référence】 How to install scipy and numpy on Ubuntu 16.04?

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install python3-numpy python3-scipy
$ sudo pip3 install numpy scipy
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: numpy in /usr/lib/python3/dist-packages (1.16.2)
Requirement already satisfied: scipy in /usr/lib/python3/dist-packages (1.1.0)
$ pip3 install --user gensim

Successfully installed boto-2.49.0 boto3-1.11.14 botocore-1.14.14 gensim-3.8.1 jmespath-0.9.4 s3transfer-0.3.3 smart-open-1.9.0

【référence】 Installation de scikit-learn dans Ubuntu

$ sudo pip3 install scikit-learn
...
Requirement already satisfied: scipy>=0.17.0 in /usr/lib/python3/dist-packages (from scikit-learn) (1.1.0)
Requirement already satisfied: numpy>=1.11.0 in /usr/lib/python3/dist-packages (from scikit-learn) (1.16.2)
Installing collected packages: joblib, scikit-learn
Successfully installed joblib-0.14.1 scikit-learn-0.22.1

Résumé

・ Lib installé requis pour le système de langage naturel sur RasPi4 ・ Pour le moment, j'ai pu exécuter une application en langage naturel

・ Je veux rendre l'application de conversation un peu plus décente

prime

C'est sur le point d'entrer. 【référence】 ・ Différence entre la liste pip et freeze

$ pip3 freeze > requirements.txt

RaspberryPi4_conversation / requirements.txt

$ pip3 freeze
absl-py==0.9.0
arrow==0.15.5
asn1crypto==0.24.0
astor==0.8.1
astroid==2.1.0
asttokens==1.1.13
attrs==19.3.0
automationhat==0.2.0
backcall==0.1.0
beautifulsoup4==4.7.1
bleach==3.1.0
blinker==1.4
blinkt==0.1.2
boto==2.49.0
boto3==1.11.14
botocore==1.14.14
buttonshim==0.0.2
Cap1xxx==0.1.3
certifi==2018.8.24
chardet==3.0.4
Click==7.0
colorama==0.3.7
colorzero==1.1
cookies==2.2.1
cryptography==2.6.1
cycler==0.10.0
Cython==0.29.14
decorator==4.4.1
defusedxml==0.6.0
dill==0.3.1.1
docutils==0.14
drumhat==0.1.0
entrypoints==0.3
envirophat==1.0.0
ExplorerHAT==0.4.2
Flask==1.0.2
fourletterphat==0.1.0
gast==0.3.3
gensim==3.8.1
google-pasta==0.1.8
gpiozero==1.5.1
grpcio==1.27.1
h5py==2.10.0
html5lib==1.0.1
idna==2.6
importlib-metadata==1.5.0
ipykernel==5.1.4
ipython==7.12.0
ipython-genutils==0.2.0
ipywidgets==7.5.1
isort==4.3.4
itsdangerous==0.24
jedi==0.13.2
jinja2-time==0.2.0
jmespath==0.9.4
joblib==0.14.1
jsonschema==3.2.0
jupyter==1.0.0
jupyter-client==5.3.4
jupyter-console==6.1.0
jupyter-core==4.6.1
Keras==2.3.1
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.0
keyring==17.1.1
keyrings.alt==3.1.1
kiwisolver==1.1.0
klepto==0.1.8
lazy-object-proxy==1.3.1
logilab-common==1.4.2
lxml==4.3.2
make==0.1.6.post1
Markdown==3.2
MarkupSafe==1.1.0
matplotlib==3.1.3
mccabe==0.6.1
mecab-python3==0.996.3
microdotphat==0.2.1
mistune==0.8.4
mote==0.0.4
motephat==0.0.2
mypy==0.670
mypy-extensions==0.4.1
nbconvert==5.6.1
nbformat==5.0.4
notebook==6.0.3
numpy==1.16.2
oauthlib==2.1.0
olefile==0.46
opencv-python==3.4.6.27
pandocfilters==1.4.2
pantilthat==0.0.7
parso==0.3.1
pexpect==4.8.0
pgzero==1.2
phatbeat==0.1.1
pianohat==0.1.0
picamera==1.13
pickleshare==0.7.5
piglow==1.2.5
pigpio==1.44
pox==0.2.7
prometheus-client==0.7.1
prompt-toolkit==3.0.3
protobuf==3.11.3
psutil==5.5.1
ptyprocess==0.6.0
PyAudio==0.2.11
pygame==1.9.4.post1
Pygments==2.3.1
PyGObject==3.30.4
pyinotify==0.9.6
PyJWT==1.7.0
pykakasi==1.2
pylint==2.2.2
pyOpenSSL==19.0.0
pyparsing==2.4.6
pyrsistent==0.15.7
pyserial==3.4
python-apt==1.8.4.1
python-dateutil==2.8.1
PyYAML==5.3
pyzmq==18.1.1
qtconsole==4.6.0
rainbowhat==0.1.0
requests==2.21.0
requests-oauthlib==1.0.0
responses==0.9.0
roman==2.0.0
RPi.GPIO==0.7.0
RTIMULib==7.2.1
s3transfer==0.3.3
scikit-learn==0.22.1
scipy==1.1.0
scrollphat==0.0.7
scrollphathd==1.2.1
SecretStorage==2.3.1
Send2Trash==1.5.0
sense-hat==2.2.0
simplejson==3.16.0
six==1.12.0
skywriter==0.0.7
smart-open==1.9.0
sn3218==1.2.7
soupsieve==1.8
spidev==3.4
ssh-import-id==5.7
tensorboard==1.13.1
tensorflow-estimator==1.14.0
termcolor==1.1.0
terminado==0.8.3
testpath==0.4.4
thonny==3.2.6
tornado==6.0.3
touchphat==0.0.1
traitlets==4.3.3
twython==3.7.0
unicornhathd==0.0.4
wcwidth==0.1.8
webencodings==0.5.1
widgetsnbextension==3.5.1
wrapt==1.11.2
zipp==2.2.0

Recommended Posts

[Introduction à RasPi4] Construction de l'environnement, système de traitement du langage naturel mecab, etc. .. .. ♪
[Introduction à RasPi4] Construction de l'environnement; OpenCV / Tensorflow, entrée japonaise ♪
De Ubuntu 20.04 introduction à la construction d'environnement
Se préparer à démarrer le traitement du langage naturel
Mettre en place un environnement de développement pour le traitement du langage naturel
Python: traitement du langage naturel
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
Introduction au langage Python
[Chapitre 6] Introduction à scicit-learn avec 100 coups de traitement du langage
RNN_LSTM2 Traitement du langage naturel
Créer un environnement pour le traitement du langage naturel avec Python
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
Construction de l'environnement de développement Python 2020 [De l'installation de Python à l'introduction à la poésie]
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel
opencv-python Introduction au traitement d'image
Traitement du langage naturel 1 Analyse morphologique
Traitement du langage naturel 3 Continuité des mots
Traitement du langage naturel 2 similitude de mots
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 06 Mémo «Identifiant»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 2 Étape 02 Mémo "Prétraitement"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 2 Étape 07 Mémo «Évaluation»
Spigot (Paper) Introduction à la création d'un plug-in pour 2020 # 01 (Construction de l'environnement)
Articles en vrac pour ceux qui veulent commencer le traitement du langage naturel
Résumez comment prétraiter le texte (traitement du langage naturel) avec l'api tf.data.Dataset
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 2 Étape 04 Mémo «Extraction de fonctionnalités»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 4 Étape 15 Mémo "Collecte de données"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» - Chapitre 3 Étape 08 Mémo «Introduction aux réseaux de neurones»
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" - Chapitre 3 Étape 11 Mémo "Embeddings de mots"
100 traitements du langage naturel frappent le chapitre 4 Commentaire
Introduction à Protobuf-c (langage C ⇔ Python)
Logivan du langage artificiel et traitement du langage naturel (traitement du langage artificiel)
Résumé de l'installation de l'analyseur de traitement du langage naturel
[Introduction à Python3 Day 21] Chapitre 10 Système (10.1 à 10.5)
De l'introduction de l'API GoogleCloudPlatform Natural Language à son utilisation
3. Traitement du langage naturel avec Python 1-2. Comment créer un corpus: Aozora Bunko
[Introduction to Data Scientist] Bases du calcul scientifique, du traitement des données et comment utiliser la bibliothèque de dessins graphiques ♬ Construction d'environnement
Essayez le livre "Introduction au développement d'applications de traitement du langage naturel en 15 étapes" --Chapitre 3 Étape 12 Mémo "Réseaux de neurones convolutifs"
Essayez le livre «Introduction au développement d'applications de traitement du langage naturel en 15 étapes» --Chapitre 3 Étape 13 Mémo «Réseaux de neurones récurrents»