3. Traitement du langage naturel par Python 1-1. Word N-gram

⑴ Lire des données textuelles

from google.colab import files
uploaded = files.upload()

image.png

image.png

with open('Neko.txt', mode='rt', encoding='utf-8') as f:
    read_text = f.read()
nekotxt = read_text

print(nekotxt)

image.png

⑵ Analyse morphologique par MeCab

!apt install aptitude
!aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file -y
!pip install mecab-python3==0.7
import MeCab
tagger = MeCab.Tagger("-Owakati")
nekotxt = tagger.parse(nekotxt)

print(nekotxt)

image.png

nekotxt = nekotxt.split()
print(nekotxt)

image.png

⑶ Génération de dictionnaire N-gramme

from collections import Counter
import numpy as np
from numpy.random import *
string = nekotxt

#Caractères à exclure
delimiter = ['「', '」', '…', ' ']

#Liste de 2 mots
double = list(zip(string[:-1], string[1:]))
double = filter((lambda x: not((x[0] in delimiter) or (x[1] in delimiter))), double)

#Liste de 3 mots
triple = list(zip(string[:-2], string[1:-1], string[2:]))
triple = filter((lambda x: not((x[0] in delimiter) or (x[1] in delimiter) or (x[2] in delimiter))), triple)

#Compter le nombre d'éléments et générer un dictionnaire
dic2 = Counter(double)
dic3 = Counter(triple)
for u,v in dic2.items():
    print(u, v)

image.png

for u,v in dic3.items():
    print(u, v)

image.png

⑷ Définition de la méthode de génération de phrases

def nextword(words, dic):
    ##➀ Obtenez le nombre d'éléments grammes des premiers mots
    grams = len(words)

    ## ➁N-Extraire les éléments correspondants du dictionnaire gramme dic
    #Pour 2 mots
    if grams == 2:
        matcheditems = np.array(list(filter(
            (lambda x: x[0][0] == words[1]), #1ers matchs
            dic.items())))
    #Pour 3 mots
    else:
        matcheditems = np.array(list(filter(
            (lambda x: x[0][0] == words[1]) and (lambda x: x[0][1] == words[2]), #1er et 2ème match
            dic.items())))

    ##➂ Message d'erreur lorsqu'il n'y a pas de mot correspondant
    if(len(matcheditems) == 0):
        print("No matched generator for", words[1])
        return ''

    ##➃ Liste de fréquence d'apparition pondérée
    #Obtenir la fréquence d'occurrence des éléments correspondants
    probs = [row[1] for row in matcheditems]
    #Génère un nombre pseudo aléatoire de 0 à 1 et multiplie-le par la fréquence d'apparition
    weightlist = rand(len(matcheditems)) * probs

    ##➄ Obtenez l'élément avec la fréquence d'apparition pondérée la plus élevée à partir des éléments correspondants
    if grams == 2:
        u = matcheditems[np.argmax(weightlist)][0][1]
    else:
        u = matcheditems[np.argmax(weightlist)][0][2]
    return u

⑸ Exécution du programme de génération de phrases

#Entrez les premiers mots du mot
words = ['', 'je'] # 2-gram
#words = ['', 'je', 'Est'] # 3-gram

#Incorporer les mots au début de la sortie de sortie
output = words[1:]

#Obtenez "prochain mot"
for i in range(100):
    #Pour 2 mots
    if len(words) == 2:
        newword = nextword(words, dic2)
    #Pour 3 mots
    else:
        newword = nextword(words, dic3)

    #Ajoutez les mots suivants à la sortie de sortie
    output.append(newword)
    #Fin si le caractère suivant est une fin
    if newword in ['', '。', '?', '!']:
        break
    #Préparer le prochain mot
    words = output[-len(words):]
    print(words)

#Affichage de la sortie de sortie
for u in output:
    print(u, end='')

image.png

image.png

Recommended Posts

3. Traitement du langage naturel par Python 1-1. Word N-gram
Python: traitement du langage naturel
3. Traitement du langage naturel par Python 2-1. Réseau de co-occurrence
3. Traitement du langage naturel par Python 2-2. Réseau de co-occurrence [mecab-ipadic-NEologd]
[Python] J'ai joué avec le traitement du langage naturel ~ transformers ~
Traitement du langage naturel 3 Continuité des mots
Traitement du langage naturel 2 similitude de mots
Créer un environnement pour le traitement du langage naturel avec Python
Étudiez le traitement du langage naturel avec Kikagaku
100 traitements de langage avec Python
[Traitement du langage naturel] Prétraitement avec le japonais
100 traitements de langage avec Python (chapitre 3)
3. Traitement du langage naturel par Python 3-1. Important outil d'extraction de mots Analyse TF-IDF [définition originale]
100 traitements de langage avec Python (chapitre 2, partie 2)
100 traitements de langage avec Python (chapitre 2, partie 1)
J'ai essayé le traitement du langage naturel avec des transformateurs.
Dockerfile avec les bibliothèques nécessaires pour le traitement du langage naturel avec python
Étude de cas sur le traitement du langage naturel: Fréquence des mots dans'Anne avec un E '
RNN_LSTM2 Traitement du langage naturel
Traitement d'image avec Python
Démarrer avec Python avec 100 coups sur le traitement du langage
Python: apprentissage profond du traitement du langage naturel: principes de base
Profitons du traitement du langage naturel à l'aide de l'API COTOHA
3. Traitement du langage naturel avec Python 1-2. Comment créer un corpus: Aozora Bunko
Traitement d'image avec Python (partie 2)
100 traitement du langage Knock-51: découpage de mots
"Traitement Apple" avec OpenCV3 + Python3
Traitement du signal acoustique avec Python (2)
Traitement du signal acoustique avec Python
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
100 Language Processing Knock Chapitre 1 (Python)
100 Language Processing Knock Chapitre 2 (Python)
Traitement d'image avec Python (partie 1)
Traitement du langage naturel 1 Analyse morphologique
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
Traitement d'image avec Python (3)
Traitement du langage 100 Knock-87: similitude des mots
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
Python: représentation vectorielle en langage naturel
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
[Python] Traitement d'image avec scicit-image
[Pratique] Créez une application Watson avec Python! # 3 [Classification du langage naturel]
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel
[Python] Traitement parallèle facile avec Joblib
100 traitements du langage naturel frappent le chapitre 4 Commentaire
100 Language Processing Knock Chapitre 1 en Python
Traitement du langage naturel pour les personnes occupées
100 Language Processing Knock-82 (mot de contexte): Extraction de contexte
Traitement d'image avec la binarisation Python 100 knocks # 3
Logivan du langage artificiel et traitement du langage naturel (traitement du langage artificiel)
Traitement du langage 100 knock-86: affichage vectoriel Word
[Traitement du langage 100 coups 2020] Chapitre 7: Vecteur Word
10 fonctions du "langage avec batterie" python
100 Traitement du langage Knock 2020 Chapitre 7: Vecteur de mots
Le débutant en Python a essayé 100 traitements de langage Knock 2015 (05 ~ 09)