** mecab-ipadic-NEologd ** est un dictionnaire personnalisé qui complète le dictionnaire standard MeCab.
Des mots ont été ajoutés à partir de nombreuses ressources linguistiques sur le Web, et ** prend en charge les nouveaux mots, les mots composés, les expressions idiomatiques, etc. **.
Comme mentionné ci-dessus, le standard MeCab le divise en «individuel» et «principe», mais mecab-ipadic-NEologd le traite comme un mot «individualisme».
** Utilisez mecab-ipadic-NEologd ** pour effectuer une série de tâches telles que ** supprimer les mots vides ** et ** exprimer dans un réseau cooccurrence **.
from google.colab import files
uploaded = files.upload()
with open('20200926_suga_un.txt', mode='rt', encoding='utf-8') as f:
read_text = f.read()
sugatxt = read_text
#Supprimer les caractères / symboles inutiles
def clean(text):
text = text.replace("\n", "")
text = text.replace("\u3000", "")
text = text.replace("「", "")
text = text.replace("」", "")
text = text.replace("(", "")
text = text.replace(")", "")
text = text.replace("、", "")
return text
text = clean(sugatxt)
#Fractionner ligne par ligne
lines = text.split("。")
# MeCab
!apt-get -q -y install sudo file mecab libmecab-dev mecab-ipadic-utf8 git curl python-mecab > /dev/null
!pip install mecab-python3 > /dev/null
# mecab-ipadic-NEologd
!git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git > /dev/null
!echo yes | mecab-ipadic-neologd/bin/install-mecab-ipadic-neologd -n > /dev/null 2>&1
#Éviter les erreurs avec les liens symboliques
!ln -s /etc/mecabrc /usr/local/etc/mecabrc
#Vérifiez le chemin du dictionnaire
!echo `mecab-config --dicdir`"/mecab-ipadic-neologd"
m_neo
avec le mode de sortie comme path
(= mecab-ipadic-NEologd).import MeCab
path = "-d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd"
m_neo = MeCab.Tagger(path)
stopwords = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
"1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
"un", "deux", "Trois", "quatre", "Cinq", "Six", "Sept", "Huit", "Neuf", "〇",
"Année", "Mois", "journée", "Suivant", "Remise", "Fois", "Cible", "Maladie", "c'est tout", "Moins que", "周Année", "Cas", "À chaque fois",
"de", "もde", "chose", "Yo", "Sama", "Pour", "Avoir tendance à", "cette", "Il", "cette", "Qui",
"*", ",", ","]
noun_list
.lignes
divisées en unités de ligne, répétez le processus suivant ligne par ligne et ajoutez-le à nom_liste
.v1
, et que ce soit une liste divisée en unités de mots par splitlines () ʻas
v2`.split (" \ t ")
c'est-à-dire un blanc, et divisez-le en deux parties, le "mot original" et la "partie contenu de l'analyse" pour créer v3
., sauf pour "EOS" et "", la partie contenu de l'analyse
v3 [1]est divisée par
split (','), c'est-à-dire
split (','). Disons v4
.result
à noun_list
et passez au traitement de la phrase suivante.noun_list = []
for line in lines:
result = []
v1 = m_neo.parse(line)
v2 = v1.splitlines()
for v in v2:
v3 = v.split("\t")
if len(v3) == 2:
v4 = v3[1].split(',')
if (v4[0] == "nom") and (v4[6] not in stopwords):
result.append(v4[6])
noun_list.append(result)
noun_list
, générez une paire (combinaison de deux mots) avec ʻitertools.combinations () pour ceux avec deux mots ou plus avec ʻif len (noun_list)> = 2
. , Listez-le avec list ()
et stockez-le dans pair_list
.pair_list
basée sur des instructions pour la rendre ʻall_pairs`, puis comptez le nombre d'occurrences de la paire.import itertools #Un module qui rassemble les fonctions d'itérateur
from collections import Counter #Une classe qui compte le nombre d'occurrences du type dictionnaire
#Générer une liste de paires de nomenclatures basée sur des phrases
pair_list = []
for n in noun_list:
if len(noun_list) >= 2:
lt = list(itertools.combinations(n, 2))
pair_list.append(lt)
#Aplatir la liste des paires de nez
all_pairs = []
for p in pair_list:
all_pairs.extend(p)
#Comptez la fréquence des paires de noms
cnt_pairs = Counter(all_pairs)
sorted () [: 30]
pour trier et récupérer 30 paires, mais l'élément de cnt_pairs
est key = lambda x: x [1]
et le nombre d'occurrences est ciblé et reverse = True
Trié par ordre décroissant.import pandas as pd
import numpy as np
#Générez les 30 meilleures paires de dictionnaires
dict = sorted(cnt_pairs.items(), key=lambda x:x[1], reverse=True)[:30]
#Convertir le type de dict en tableau 2D
result = []
for key, value in dict:
temp = []
for k in key:
temp.append(k)
temp.append(value)
result.append(temp)
data = np.array(result)
import matplotlib.pyplot as plt
import networkx as nx
%matplotlib inline
#Un module qui rend matplotlib compatible avec l'affichage japonais
!pip install japanize-matplotlib
import japanize_matplotlib
font_family =" IPAexGothic
.#Générer un objet graphique
G = nx.Graph()
#Lire les données
G.add_weighted_edges_from(data)
#Dessiner un graphique
plt.figure(figsize=(10,10))
nx.draw_networkx(G,
node_shape = "s",
node_color = "chartreuse",
node_size = 800,
edge_color = "gray",
font_family = "IPAexGothic") #Spécification de la police japonaise
plt.show()
mecab-ipadic-NEologd | Norme MeCab |
---|---|
"Infection" | "infection", "Maladie" |
"Pays en voie de développement" | "En chemin", "Pays" |
"Union de l'Asie du Sud-Est" | "Asie du sud est", "Des pays", "syndicat" |
"Sécurité humaine" | "Humain", "de", "sécurité", "Sécurité" |
Recommended Posts