[PYTHON] J'ai essayé d'extraire des expressions uniques avec la bibliothèque de traitement du langage naturel GiNZA

Objectif de cet article

Récemment, lorsque je cherchais diverses choses parce que je voulais utiliser facilement la reconnaissance d'entité nommée (NER) en japonais avec Python, j'ai découvert `` GiNZA '', alors j'ai essayé de l'utiliser. T. À propos, l'extraction d'expressions propres est l'une des tâches du traitement du langage naturel, qui détecte des mots spécifiques tels que date et personne, comme indiqué dans la figure ci-dessous.

image.png

À propos de GiNZA

GiNZA est le traitement du langage naturel(Natural Language Processing; NLP)Dans l'une des bibliothèques à faire,Vous pouvez effectuer diverses tâches autres que l'extraction d'expressions uniques..


 Pour être précis, il existe une bibliothèque de traitement du langage naturel appelée `` spaCy``, mais il semble qu'elle soit en charge de la partie traitement du japonais.Par conséquent, ceux qui comprennent comment utiliser `` spaCy``` Je pense que c'est tôt.


 Pour plus de détails, veuillez vérifier les points suivants: Cette fois, nous n'introduirons que l'extraction d'expression unique.
GitHub:[megagonlabs/ginza](https://github.com/megagonlabs/ginza)
 [4e traitement du langage naturel utilisant spaCy / GiNZA](https://www.ogis-ri.co.jp/otc/hiroba/technical/similar-document-search/part4.html)


# Préparation

 Commencez par préparer `` GiNZA '' et `` spaCy ''.

```python
!pip install -U ginza
import spacy
from spacy import displacy
nlp = spacy.load('ja_ginza')

Maintenant que le côté spaCy '' a chargé le modèle de GiNZA '', il est prêt pour le traitement.

Si vous utilisez un bloc-notes Jupyter,J'ai entendu dire que tu peux trébucher ici,Dans ce cas[GitHub](https://github.com/megagonlabs/ginza)Prière de se référer à.



# Préparation des données

 Ensuite, préparez les données d'échantillon à analyser.
 Cette fois, nous utiliserons les données d'actualités de Liveoor publiées par Ronwitt.
 Étant donné que les données sont des informations divisées en neuf genres, cette fois, nous allons extraire les textes d'actualité un par un et extraire des expressions uniques pour les neuf textes d'actualité.
 On suppose que cela vous aidera à comprendre les forces et les faiblesses du genre de texte.

 Téléchargez les données d'ici et décompressez-les.
 [corpus d'actualités liveoor](https://www.rondhuit.com/download.html)

```python
!wget https://www.rondhuit.com/download/ldcc-20140209.tar.gz
!tar zxvf ldcc-20140209.tar.gz

Extraction d'expression unique

J'ai écrit le code pour lire le chemin du fichier texte et l'analyser.A titre de test, j'ai analysé un article de communication allemande.

#Lire le texte
filepath = "./text/dokujo-tsushin/dokujo-tsushin-4778030.txt"
with open(filepath) as f:
    s = f.read()

#Divers traitements sont effectués ici
doc = nlp(s) 

#Dessin du résultat de l'extraction d'expressions propres
displacy.render(doc, style="ent", jupyter=True)

Le résultat ressemble à ceci. image.png

Vous pouvez l'extraire joliment! Cependant, bien que ce soit une question d'apparence, c'est un peu difficile à voir car la couleur n'est spécifiée que pour PERSONNE et TEMPS, donc je changerai la couleur en option.

#Spécifiez une couleur pour le type d'entité extrait
colors = {"COUNTRY":"#00cc00", "CITY":"#00cc00", "GPE_OTHER":"#00cc00","OCCASION_OTHER":"#00cc00",
          "LOCATION":"#00cc00", "LOCATION_OTHER":"#00cc00","DOMESTIC_REGION":"#00cc00","PROVINCE":"#00cc00",
          "STATION":"#00cc00", "CONTINENTAL_REGION":"#00cc00","THEATER":"#00cc00",

          "TIME":"#adff2f","DATE":"#adff2f","DAY_OF_WEEK":"#adff2f",
          "PERIOD_YEAR":"#adff2f", "PERIOD_MONTH":"#adff2f", "PERIOD_DAY":"#adff2f",

          "FLORA":"#adff99","FLORA_PART":"#adff99",
          "DISH":"#ffeb99","FOOD_OTHER":"#ffeb99",
          
          "AGE":"#3385ff","N_PERSON":"#3385ff","N_EVENT":"#3385ff","N_LOCATION_OTHER":"#3385ff","RANK":"#3385ff",
          "N_PRODUCT":"#3385ff","":"#3385ff","":"#3385ff","":"#3385ff","MEASUREMENT_OTHER":"#3385ff","PERCENT":"#3385ff",
          "N_ORGANIZATION":"#3385ff", "ORDINAL_NUMBER":"#3385ff", "N_FACILITY":"#3385ff","SPEED":"#3385ff",
          "PHONE_NUMBER":"#3385ff",

          "MONEY":"#ffff00",

          "COMPANY":"#99c2ff", "SCHOOL":"#99c2ff", "INTERNATIONAL_ORGANIZATION":"#99c2ff",
          "GOE_OTHER":"#99c2ff", "SHOW_ORGANIZATION":"#99c2ff","CORPORATION_OTHER":"#99c2ff",

          "CLOTHING":"#ff66a3",
          "PRODUCT_OTHER":"#ff66a3",

          "PERSON":"#c266ff",
          "POSITION_VOCATION":"#ebccff",

          "MUSIC":"#ff7f50", "MOVIE":"#ff7f50", "GAME":"#ff7f50", "SPORT":"#ff7f50", "BOOK":"#ff7f50", 
          "BROADCAST_PROGRAM":"#ff7f50", 
          
          "ANIMAL_DISEASE":"#cd5c5c"
          }

options = {"colors": colors}
displacy.render(doc, style="ent", options=options, jupyter=True)

Les mots de lieu sont verts, les mots d'organisation sont bleus, etc. Il y a encore beaucoup à faire. Comme il ne s'agit que d'une expérience, j'en suis satisfait et je l'ai utilisé pour extraire neuf articles de presse avec des expressions uniques. Les résultats sont les suivants.

Communication allemande

image.png

Piratage de la vie informatique

image.png

Chaîne d'appareils ménagers

image.png

livedoor HOMME

image.png

MOVIE ENTER

image.png

Peachy

image.png

Esmax

im01.png

Sports Watch

image.png

Actualités du sujet

img01.png

Le réglage de la couleur permet de voir plus facilement que la valeur par défaut (j'ai l'impression que mes yeux clignotent un peu ...) Selon le genre de nouvelles, il est évident qu'il y a beaucoup de gens dans le système de divertissement et de nombreux noms de produits et d'entreprises dans le système de gadgets.

La précision est importante, mais selon le genre, il y a quelques mots qui sont préoccupants, mais on peut dire qu'ils sont généralement bien extraits.

Personnellement, je craignais que "Yamori" soit classé comme NOURRITURE dans l'article IT Life Hack.

référence

GitHub:megagonlabs/ginza Object Square: 4e traitement du langage naturel utilisant spaCy / GiNZA Ronwitt Co., Ltd.: corpus d'actualités liveoor spaCy:Visualizing the entity recognizer spaCy:Named Entity Recognition

Recommended Posts

J'ai essayé d'extraire des expressions uniques avec la bibliothèque de traitement du langage naturel GiNZA
J'ai essayé le traitement du langage naturel avec des transformateurs.
Analyse des émotions avec traitement du langage naturel! J'ai essayé de prédire l'évaluation à partir du texte de l'avis
J'ai essayé de classer M. Hanyu et M. Hanyu avec le traitement du langage naturel × classificateur Naive Bayes
[Traitement du langage naturel] J'ai essayé de visualiser les sujets d'actualité cette semaine dans la communauté Slack
[Traitement du langage naturel] J'ai essayé de visualiser les remarques de chaque membre de la communauté Slack
J'ai essayé de résoudre 100 traitements linguistiques Knock version 2020 [Chapitre 3: Expressions régulières 25-29]
J'ai essayé d'extraire automatiquement les mouvements des joueurs Wiire avec un logiciel
J'ai essayé de visualiser le modèle avec la bibliothèque d'apprentissage automatique low-code "PyCaret"
J'ai essayé de sauvegarder les données avec discorde
[Python] J'ai joué avec le traitement du langage naturel ~ transformers ~
J'ai essayé de résoudre la version 2020 de 100 problèmes de traitement du langage [Chapitre 3: Expressions régulières 20 à 24]
J'ai essayé Hello World avec un langage OS + C 64 bits sans utiliser de bibliothèque
J'ai essayé de résoudre la version 2020 de 100 coups de traitement de langue [Chapitre 1: Mouvement préparatoire 00-04]
J'ai essayé de résoudre la version 2020 de 100 traitements linguistiques [Chapitre 1: Mouvement préparatoire 05-09]
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai essayé d'extraire des fonctionnalités avec SIFT d'OpenCV
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé d'identifier la langue en utilisant CNN + Melspectogram
[Pour les débutants] Analyse du langage à l'aide de l'outil de traitement du langage naturel "GiNZA" (de l'analyse morphologique à la vectorisation)
J'ai essayé de vérifier si l'API Natural Language (analyse des émotions) prend en charge l'argot net.
J'ai essayé la bibliothèque changefinder!
J'ai essayé 100 traitements linguistiques Knock 2020
J'ai essayé de comparer la vitesse de traitement avec dplyr de R et pandas de Python
La première intelligence artificielle. Je voulais essayer le traitement du langage naturel, donc je vais essayer l'analyse morphologique en utilisant MeCab avec python3.
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé de notifier les informations de retard de train avec LINE Notify
J'ai essayé d'illustrer le temps et le temps du langage C
J'ai essayé d'écrire dans un modèle de langage profondément appris
Étudiez le traitement du langage naturel avec Kikagaku
[Traitement du langage naturel] Prétraitement avec le japonais
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 3
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 1
Se préparer à démarrer le traitement du langage naturel
J'ai essayé de déplacer le ballon
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 2
J'ai essayé 100 traitements linguistiques Knock 2020: Chapitre 4
J'ai essayé d'estimer la section.
J'ai essayé de décrire le trafic en temps réel avec WebSocket
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de résoudre 100 traitements linguistiques Knock 2020 version [Chapitre 2: Commandes UNIX 10 à 14]
J'ai essayé l'expression des nombres naturels et le traitement arithmétique uniquement avec le traitement de liste
J'ai essayé de traiter l'image en "style croquis" avec OpenCV
J'ai essayé de démarrer avec Bitcoin Systre le week-end
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python
J'ai essayé de traiter l'image dans un "style de dessin au crayon" avec OpenCV
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé de résoudre 100 traitements linguistiques Knock 2020 version [Chapitre 2: Commandes UNIX 15-19]
Résumez comment prétraiter le texte (traitement du langage naturel) avec l'api tf.data.Dataset
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai essayé de créer un traitement par lots sans serveur pour la première fois avec DynamoDB et Step Functions
J'écrirai une explication détaillée à mort en résolvant 100 traitements de langage naturel Knock 2020 avec Python
[Python] J'ai essayé de visualiser la nuit du chemin de fer de la galaxie avec WordCloud!