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.
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
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.
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.
livedoor HOMME
MOVIE ENTER
Peachy
Sports Watch
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.
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