[PYTHON] Vous devenez ingénieur en 100 jours ――Jour 67 ――Programmation ――A propos de l'analyse morphologique

Cliquez ici jusqu'à hier

Vous deviendrez ingénieur dans 100 jours - Jour 66 - Programmation - À propos du traitement du langage naturel

Vous deviendrez ingénieur dans 100 jours - Jour 63 - Programmation - À propos de la probabilité 1

Vous deviendrez ingénieur dans 100 jours - Jour 59 - Programmation - À propos des algorithmes

Vous deviendrez ingénieur dans 100 jours --- Jour 53 --Git --À propos de Git

Vous deviendrez ingénieur dans 100 jours --Jour 42 --Cloud --À propos des services cloud

Vous deviendrez ingénieur dans 100 jours - Jour 36 --Base de données --À propos de la base de données

Vous deviendrez ingénieur dans 100 jours-24 jours-Python-Bases du langage Python 1

Vous deviendrez ingénieur dans 100 jours --Jour 18 --Javascript --Les bases de JavaScript 1

Vous deviendrez ingénieur dans 100 jours - Jour 14 --CSS --CSS Basics 1

Vous deviendrez ingénieur dans 100 jours - Jour 6 --HTML - Bases du HTML 1

A partir de ce moment, il s'agit de traitement du langage naturel.

Qu'est-ce que l'analyse morphologique?

L'analyse des éléments de formulaire sépare les phrases en la plus petite unité de mots appelée "éléments de formulaire". C'est une méthode pour distinguer la partie de chaque morphologie.

** Séparation **

C'est une manière d'écrire avec un espace entre les mots comme en anglais. Watashi Ga Hentai Death I had Lewd Death

** Analyse morphologique anglaise **

C'est très facile dans des langues comme l'anglais où les mots sont séparés par des espaces. La procédure d'analyse morphologique en anglais est résumée ci-dessous.

1.Rendre la phrase entière plus basse et éviter que les mots ne soient distingués par la position du mot

2.it's et don'Séparer les abréviations telles que t (il's → it 's 、 don't → do n't)

3.Séparez le point à la fin de la phrase du mot précédent (M..Ne séparez pas les périodes qui ne sont pas liées à la fin des phrases utilisées pour

4.Diviser par l'espace

** Analyse morphologique japonaise **

Contrairement à l'anglais, le japonais a peu de blancs et vous ne pouvez pas voir les coupures dans les mots. Par conséquent, il est nécessaire de considérer la division par des règles sur la base d'un dictionnaire en utilisant un «dictionnaire» dédié.

Si vous souhaitez effectuer vous-même une analyse morphologique, vous devez définir et appliquer vous-même cette règle de division.

Plusieurs «bibliothèques» ont été développées pour l'analyse morphologique japonaise. Il est courant de l'utiliser pour l'analyse morphologique.

Une bibliothèque typique est appelée «MeCab».

https://ja.wikipedia.org/wiki/MeCab

Il existe également une bibliothèque appelée janome dans le langage Python.

https://mocobeta.github.io/janome/

Si elle est mise en œuvre à l'aide d'une telle bibliothèque, l'analyse morphologique peut être effectuée relativement facilement.

Aujourd'hui, nous allons effectuer une analyse morphologique à l'aide de la bibliothèque janome.

Qu'est-ce qu'un élément morphologique?

Anglais: morphème En termes linguistiques, la plus petite unité d'élément d'expression significatif C'est une phrase qui n'a plus de sens si elle est décomposée davantage.

Exemple: "Combien dois-je diviser?"

Ce que vous faites est un "verbe", mais si vous le divisez davantage Cela n'a pas de sens. Do ⇒ verbe 〇

Ligne ⇒ nez × U ⇒ Verbe impressionnant ×

Par conséquent, il est nécessaire d'arrêter le démontage dans un endroit approprié.

Paroles de la partie japonaise

Les paroles de la partie japonaise sont les suivantes.

image.png

Problèmes dans l'analyse morphologique japonaise

Il y a les problèmes suivants lors de l'analyse de la morphologie japonaise.

・ Problème de discrimination des limites de mots ・ Problème de discrimination de mot partiel ・ Problème de langue inconnue ・ Problèmes de grammaire lâches ・ Le problème que le sens change en fonction de la présence ou de l'absence de modificateurs

** Problème de démarcation de mots **

Par exemple, il existe plusieurs lectures grammaticalement correctes pour la phrase «Uraniwa a un écureuil».

・ Il y a / poulet / dans la cour / ・ Il y a / deux / plumes / oiseaux / dans la cour / ・ Retour / sur / crocodile / est / poulet / est / ・ Dans la cour / dans / il y a /

Même dans les cuisses, le problème est de savoir où se diviser. Afin d'obtenir la réponse parfaite, vous devez comprendre le contexte dans lequel la phrase est placée et l'arrière-plan de l'intention de l'auteur.

** Problème de discrimination de mot partiel **

Par exemple, le mot «temps» a une signification autre que celle du nom «temps» Il a également une signification en tant que verbe "--double", donc cela dépend du sens que vous prenez. La structure grammaticale de la phrase et le sens à en déduire seront complètement différents.

Le type de partie du mot est étroitement lié à la structure de la phrase, il doit donc être considéré ensemble.

** Problème de langue inconnue ** Parce que l'analyse morphologique est généralement effectuée à l'aide d'un dictionnaire contenant des mots dans cette langue Les mots qui ne sont pas inclus dans le dictionnaire dans la phrase à analyser sont appelés mots inconnus.

Selon la façon dont vous gérez les mots inconnus, les résultats de l'analyse ultérieure vous affecteront grandement. Par conséquent, le dictionnaire doit être mis à jour régulièrement. .. (Nomenclature particulièrement appropriée: nom de la personne, nom de l'établissement, nom du produit, bâillon, etc.)

** Problèmes de grammaire lâches ** Le contenu des conversations telles que SNS, e-mails et applications de conversation est souvent loin d'une grammaire japonaise modélisée particulière. Afin d'analyser de tels contenus, il est nécessaire de considérer fondamentalement les fluctuations de notation des phrases et des mots et la méthode d'étalonnage.

Le problème que le sens change en fonction de la présence ou de l'absence de modificateurs Les modificateurs fonctionnent pour changer la signification des verbes et des adjectifs, mais lorsque l'analyse morphologique est effectuée Il est divisé par des mots. Si vous ne l'interprétez pas comme une combinaison de plusieurs mots, la signification sera complètement différente.

Analyse morphologique avec Janome

Effectuons une analyse morphologique à l'aide de la bibliothèque janome de python.

Si vous ne l'avez pas installé, vous ne pouvez pas l'utiliser. Veuillez installer avec la commande suivante.

pip install janome

Ceci est un exemple d'une analyse morphologique simple.


from janome.tokenizer import Tokenizer
t = Tokenizer()

tokens = t.tokenize('Pas sucré, pas épicé, pas délicieux')
for token in tokens:
    print(token)

De doux à adjectif, indépendance, *, *, adjectif / auo dan, connexion nu, doux, amakara, amakara Verbe auxiliaire Zu, *, *, *, special / nu, utilisation continue deux connexions, nu, zu, zu Épicé à l'adjectif, indépendance, *, *, adjectif / auo dan, connexion nu, épicé, karakara, karakara Verbe auxiliaire Zu, *, *, *, special / nu, utilisation continue deux connexions, nu, zu, zu Du sens, adjectif, indépendance, *, *, adjectif / auodan, connexion nu, délicieux, couleur du cheval, couleur du cheval Verbe auxiliaire Zu, *, *, *, special / nu, utilisation continue deux connexions, nu, zu, zu

Appelez Tokenizer of janome et instanciez-le.

from janome.tokenizer import Tokenizer
Nom de variable= Tokenizer()

Vous pouvez retourner le résultat de l'analyse morphologique d'une phrase avec nom de variable.tokenize ('phrase').

Le résultat de l'analyse morphologique est ·mot ・ Une partie des mots ·en train de lire Il est divisé en.

Le résultat divisé par mots sera renvoyé, donc si vous souhaitez traiter chacun d'eux Répétez le processus en utilisant l'instruction for.

Je vais changer la phrase.

words = 'Des cuisses et des cuisses'
tokens = t.tokenize(words)
for token in tokens:
    print(token)

Nomenclature Sumomo, général, *, *, *, *, sumomo, sumomo, sumomo Mo assistant, commis, *, *, *, *, mo, mo, mo Nomenclature de la cuisse, général, *, *, *, *, cuisse, pêche, pêche Mo assistant, commis, *, *, *, *, mo, mo, mo Nomenclature de la cuisse, général, *, *, *, *, cuisse, pêche, pêche Auxiliaire, syndicalisation, *, *, *, *, de, non, non Dont nomenclature, non-indépendance, avocat possible, *, *, *

Que se passe-t-il si la phrase suivante est analysée morphologiquement?

«Nippon TV Tokyo»

tokens = t.tokenize('Nippon Television Tokyo')
for token in tokens:
    print(token)

Nippon TV Nomenclature, nomenclature appropriée, organisation, *, *, *, Nippon TV, Nihon TV, Nihon TV Nomenclature de Tokyo, nomenclature propre, région, général, *, *, Tokyo, Tokyo, Tokyo

C'est le résultat calculé par le "coût" stocké dans les données du dictionnaire pour l'analyse morphologique. Sauts de mots plus connus ou plus faciles à connecter et à moindre coût En raison du mécanisme de choix, le résultat est le suivant.

Parce qu'il existe de nombreux cas où le dictionnaire ne prend pas en charge la «nomenclature propriétaire» récemment créée, etc. Cela peut conduire à des résultats indésirables.

tokens = t.tokenize(u'J'ai vu un poisson à Sky Tree Station aujourd'hui')
for token in tokens:
    print(token)

Adverbes Tou, Connexions Auxiliaires, *, *, *, *, Tou, Tou, Tou Nomenclature d'aujourd'hui, compléments possibles, *, *, *, *, aujourd'hui, kyo, kyo Nomenclature du ciel, général, *, *, *, *, ciel, ciel, ciel Nomenclature des arbres, général, *, *, *, *, arbre, arbre, arbre Nomenclature de la station, suffixe, région, *, *, *, station, excitation, excitation In, assistant, cas, général, *, *, *, in, de, de Nomenclature des poissons, général, *, *, *, *, poissons, poissons, poissons Auxiliaire, auxiliaire de cas, général, *, *, *, wo, wo Voir verbe, indépendance, *, *, une étape, forme continue, voir, mi, mi Te assistant, assistant de connexion, *, *, *, *, te, te, te Verbe Ki, non-indépendance, *, *, kahen / kuru, forme continue, kuru, ki, ki Verbe auxiliaire masu, *, *, *, spécial / masse, forme continue, masu, mashi, mashi Ta verbe auxiliaire, *, *, *, ta spéciale, forme de base, ta, ta, ta

À l'origine, je voulais dire «Tokyo Sky Tree Station», mais comme il n'y a pas de mot de ce type dans le dictionnaire, il sera divisé en mots appropriés.

Dans ce cas, utilisez le «dictionnaire utilisateur». Créez un fichier de dictionnaire et lisez-le.

Nom de la variable = Tokenizer ('nom de fichier de dictionnaire', udic_enc = 'code de caractère')

userdic.csv


Tokyo Sky Tree,1288,1288,4569,nom,固有nom,Général,*,*,*,Tokyo Sky Tree,Tokyo Sky Tree,Tokyo Sky Tree
Station Tokyo Sky Tree,1288,1288,4143,nom,固有nom,Général,*,*,*,Station Tokyo Sky Tree,Station Tokyo Sky Tree,Station Tokyo Sky Tree
Tobu Sky Tree Line,1288,1288,4700,nom,固有nom,Général,*,*,*,Tobu Sky Tree Line,Tobu Sky Tree Line,Tobu Sky Tree Line
Station Tokyo Sky Tree,1288,1288,4143,nom,固有nom,Général,*,*,*,Station Tokyo Sky Tree,Station Tokyo Sky Tree,Station Tokyo Sky Tree
t = Tokenizer("userdic.csv", udic_enc="utf8")
tokens = t.tokenize(u'J'ai vu un poisson à Sky Tree Station aujourd'hui')
for token in tokens:
    print(token)

Nomenclature Tokyo Sky Tree Station, Nomenclature propriétaire, Général, *, *, *, Tokyo Sky Tree Station, Tokyo Sky Tree Eki, Tokyo Sky Tree Eki In, assistant, cas, général, *, *, *, in, de, de Nomenclature des poissons, général, *, *, *, *, poissons, poissons, poissons Auxiliaire, auxiliaire de cas, général, *, *, *, wo, wo Voir verbe, indépendance, *, *, une étape, forme continue, voir, mi, mi Te assistant, assistant de connexion, *, *, *, *, te, te, te Verbe Ki, non-indépendance, *, *, kahen / kuru, forme continue, kuru, ki, ki Verbe auxiliaire masu, *, *, *, spécial / masse, forme continue, masu, mashi, mashi Ta verbe auxiliaire, *, *, *, ta spéciale, forme de base, ta, ta, ta

«La nomenclature correcte enregistrée dans userdic.csv» est maintenant reflétée. «Mot inconnu» crée un dictionnaire et le gère.

Vous pouvez obtenir la partie mot avec token.surface.

for token in tokens:
    print(token.surface)

Station Tokyo Sky Tree alors poisson À Vous voyez main Ki Mieux Ta

Seule la partie de la pièce peut être extraite avec token.part_of_speech. Parce que la partie de la pièce est subdivisée par des délimiteurs , Lorsque vous obtenez le subdivisé, divisez-le par , et retirez-le.

for token in tokens:
    print(token.part_of_speech)

Nomenclature, nomenclature propre, général, * Auxiliaire, adjectif de cas, général, * Nez, nez, général, * Auxiliaire, adjectif de cas, général, * Verbe, indépendance, *, * Auxiliaire, auxiliaire de connexion, *, * Verbe, non indépendant, *, * Verbe auxiliaire, *, *, * Verbe auxiliaire, *, *, *

Vous pouvez vérifier la lecture avec token.reading.

for token in tokens:
    print(token.reading)

Station Tokyo Sky Tree De Poisson Wo Mi Te Ki Mashi Ta

Utilisez correctement les mots de la partie et les lectures dans la «phrase pour» et effectuez le traitement suivant.

Résumé

L'analyse morphologique est l'une des bases de l'analyse du langage. Il existe de nombreuses bibliothèques, c'est donc une bonne idée d'expérimenter.

La seule façon de traiter les nouveaux mots est de créer un dictionnaire Si vous souhaitez effectuer correctement l'analyse morphologique, il est essentiel de préparer un dictionnaire pour les mots inconnus.

33 jours avant de devenir ingénieur

Informations sur l'auteur

HP d'Otsu py: http://www.otupy.net/

Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter: https://twitter.com/otupython

Recommended Posts

Vous devenez ingénieur en 100 jours ――Jour 67 ――Programmation ――A propos de l'analyse morphologique
Vous devenez ingénieur en 100 jours ――Jour 66 ――Programmation ――À propos du traitement du langage naturel
Vous serez ingénieur dans 100 jours ――Jour 71 ――Programmation ――À propos du scraping 2
Vous serez ingénieur dans 100 jours ――Jour 61 ――Programmation ――A propos de l'exploration
Vous serez ingénieur dans 100 jours ――Jour 74 ――Programmation ――À propos du scraping 5
Vous serez ingénieur dans 100 jours ――Jour 73 ――Programmation ――À propos du scraping 4
Vous serez ingénieur dans 100 jours ――Jour 75 ――Programmation ――À propos du scraping 6
Vous deviendrez ingénieur dans 100 jours --Jour 68 --Programmation --A propos de TF-IDF
Vous serez ingénieur dans 100 jours ――Jour 70 ――Programmation ――À propos du grattage
Vous serez ingénieur dans 100 jours ――Jour 82 ――Programmation ――À propos de l'apprentissage automatique 7
Vous serez ingénieur dans 100 jours ――Jour 76 ――Programmation ――À propos de l'apprentissage automatique
Vous serez ingénieur dans 100 jours ―― Jour 80 ―― Programmation ―― À propos de l'apprentissage automatique 5
Vous serez ingénieur dans 100 jours ――Jour 78 ――Programmation ――À propos de l'apprentissage automatique 3
Vous serez ingénieur dans 100 jours ――Jour 84 ――Programmation ――À propos de l'apprentissage automatique 9
Vous serez ingénieur dans 100 jours ――Jour 83 ――Programmation ――À propos de l'apprentissage automatique 8
Vous serez ingénieur dans 100 jours ――Jour 77 ――Programmation ――À propos de l'apprentissage automatique 2
Vous serez ingénieur dans 100 jours ――Jour 85 ――Programmation ――À propos de l'apprentissage automatique 10
Vous serez ingénieur dans 100 jours ――Jour 63 ――Programmation ――À propos de la probabilité 1
Vous serez ingénieur dans 100 jours ――Jour 64 ――Programmation ――À propos de la probabilité 2
Vous serez ingénieur dans 100 jours ―― Jour 60 ―― Programmation ―― À propos de la structure des données et de l'algorithme de tri
Vous serez ingénieur dans 100 jours - Jour 27 - Python - Exercice Python 1
Vous serez ingénieur dans 100 jours - Jour 34 - Python - Exercice Python 3
Vous serez ingénieur dans 100 jours - Jour 31 - Python - Python Exercice 2
Vous serez ingénieur dans 100 jours ――Jour 24 ―― Python ―― Bases du langage Python 1
Vous serez ingénieur dans 100 jours ――Jour 30 ―― Python ―― Bases du langage Python 6
Vous serez ingénieur dans 100 jours ――Jour 25 ―― Python ―― Bases du langage Python 2
Vous serez ingénieur dans 100 jours - Jour 29 - Python - Bases du langage Python 5
Vous serez ingénieur dans 100 jours - Jour 33 - Python - Bases du langage Python 8
Vous serez ingénieur dans 100 jours --Jour 26 --Python --Basiques du langage Python 3
Vous devenez ingénieur en 100 jours - Jour 35 - Python - Ce que vous pouvez faire avec Python
Vous serez ingénieur dans 100 jours --Jour 32 --Python --Basiques du langage Python 7
Vous serez ingénieur dans 100 jours --Jour 28 --Python --Les bases du langage Python 4
Devenez bientôt un ingénieur IA! Apprenez complètement Python / AI / Machine learning / Deep learning / Analyse statistique en quelques jours!
Puis-je devenir ingénieur IA dans un cours en ligne à AI Academy?
Ce que les débutants pensent de la programmation en 2016