[PYTHON] Générez des phrases aléatoires à partir de vos tweets avec trigramme

C'est un record. L'explication n'est écrite que légèrement.

manière

Préparation

Téléchargez l'historique de vos tweets. Sur la page Twitter, faites une demande en sélectionnant «Paramètres et confidentialité» → «Compte» → «Données Twitter» → «Télécharger les données Twitter», et après un certain temps, un lien de téléchargement sera envoyé à votre adresse e-mail, donc téléchargez à partir de là. Depuis l'été 2019, les spécifications des données de téléchargement ont changé et tweets.csv est devenutweets.js, donc c'est gênant, alors utilisez l'outil écrit par une autre personne surtweets.csv Faites un. (Https://17number.github.io/tweet-js-loader/)

Créez un dossier de texte dans le même répertoire que votre lieu de travail et lancez-y tweets.csv et vous êtes prêt à partir.

Ensuite, à propos du contenu de tweet.py. Commencez par créer tweets.txt dans la partie suivante. Le corps du tweet est extrait de tweets.csv et transformé en fichier txt.

tweet.py


import csv
import re

rawfile = "text/tweets.csv"
infile = "text/tweets.txt"
outfile = "text/tweets_wakati.txt"


with open(rawfile,'r') as f:
    reader = csv.reader(f)
    
    with open(infile,'w') as f:
        for d in reader:
            if len(d) > 2:
                f.write(d[2])
            f.write('\n')

Ensuite, utilisez janome pour briser les mots et laissez le modèle apprendre. Si vous n'avez pas janome, veuillez d'abord faire pip install janome. En passant, j'essaie de faire des phrases qui ont un sens en japonais autant que possible en éliminant les alphabets, les symboles spécifiques, les boîtes de questions, etc.

tweet.py


from janome.tokenizer import Tokenizer
t = Tokenizer()


with open(infile,'r') as f:
    data = f.readlines()

p = re.compile('[a-z]+')
p2 = re.compile('[:/.@#Question ●]+')

with open(outfile,'w') as f:
    for i in range(len(data)):
        line = data[i]
        if p2.search(line):
            pass
        else:
            for token in t.tokenize(line):
                if p.search(str(token.surface)):
                    pass
                else:
                    f.write(str(token.surface))
                    f.write(' ')
            f.write('\n')
        


words = []
for l in open(outfile, 'r', encoding='utf-8').readlines():
    if len(l) > 1:
        words.append(('<BOP> <BOP> ' + l + ' <EOP>').split())


from nltk.lm import Vocabulary
from nltk.lm.models import MLE
from nltk.util import ngrams

vocab = Vocabulary([item for sublist in words for item in sublist])

print('Vocabulary size: ' + str(len(vocab)))

text_trigrams = [ngrams(word, 3) for word in words]

n = 3
lm = MLE(order = n, vocabulary = vocab)
lm.fit(text_trigrams)


Enfin, la génération de phrases aléatoires.

tweets.py


for j in range(10):
    # context = ['<BOP>']
    context = ['<BOP>','<BOP>']
    sentence = ''
    for i in range(0, 100):
        #Sélectionnez au hasard un mot différent de zéro parmi les deux derniers mots du contexte
        w = lm.generate(text_seed=context)

        if '<EOP>' == w or '\n' == w:
            break

        context.append(w)
        sentence += w

        
    
    print(sentence+'\n')

10 phrases sont sorties au hasard. Lors de la copie, veuillez combiner le code écrit ci-dessus en un seul fichier, ou le diviser en cellules avec jupyter notebook et l'exécuter. Cette dernière méthode est recommandée car elle peut prendre un certain temps pour entraîner le modèle.

résultat

 2019-12-13 19.00.15.png

Vous devriez voir 10 phrases comme celle ci-dessus. C'est assez intéressant pour que vous puissiez l'essayer à l'infini. Veuillez l'essayer.

Recommended Posts

Générez des phrases aléatoires à partir de vos tweets avec trigramme
Créez wordcloud à partir de votre tweet avec python3
Créez un programme qui peut générer votre image préférée avec Selenium
Générer une distribution normale avec SciPy
Générer une URL pré-signée avec golang
[Python] Générer un mot de passe avec Slackbot
python + faker Générer aléatoirement un point avec un rayon de 100m à partir d'un certain point
Tweet la météo avec bot
Générer tous les fichiers avec une extension spécifique
Tweet de python avec Twitter Developer + Tweepy
Générer une classe à partir d'une chaîne en Python
Tweet les prévisions météo avec le bot Partie 2
Créez une interface utilisateur de jeu à partir de zéro avec pygame2!
Créer un fichier PDF avec une taille de page aléatoire
Comment générer un objet Python à partir de JSON
Générer un dictionnaire MeCab à partir des données de l'Encyclopédie Nico Nico
Générez une instruction d'insertion à partir de CSV avec Python.
Créer un arbre de décision à partir de 0 avec Python (1. Présentation)
J'ai essayé de générer une chaîne de caractères aléatoire
Lire ligne par ligne à partir d'un fichier avec Python
J'ai fait un graphique de nombres aléatoires avec Numpy
Extraire des données d'une page Web avec Python
Effectuez une recherche Twitter à partir de Python et essayez de générer des phrases avec la chaîne de Markov.