[PYTHON] Tweet deine eigenen Sätze mit der Markov-Kette

Motivation

Ich mag Twitter, also dachte ich, wenn das Programm meine Tweets automatisch generiert, würde es das für mich tun, selbst wenn ich beschäftigt war.

[Evangelion] Versuchen Sie, mit Deep Learning automatisch Asuka-ähnliche Linien zu generieren Wenn ich lese, scheint es, dass die Markov-Kette Sätze generiert, die eher so sind als Deep Learning, also habe ich ein Programm erstellt, das auf dieser Richtlinie basiert. ... oder besser gesagt, es ist das Gleiche wie es komplett zu machen ...

Shumai-kun (@shuumai) und komprimierte Zeitung (@asshuku) scheinen ebenfalls Markov-Ketten zu sein, daher sollte diese Richtlinie möglicherweise in Ordnung sein. ..

Vorverarbeitung

Alle Ihre früheren Tweets können von der offiziellen Website als Zip-Datei mit json und csv heruntergeladen werden. Laden Sie Ihren gesamten Tweet-Verlauf herunter

Dieses Mal werden wir die daraus erhaltene tweets.csv verwenden. Da einige Tweets Antworten und URLs enthalten, müssen diese ausgeschlossen werden, damit Sie nicht unbeabsichtigt Antworten überspringen oder nicht vorhandene URLs twittern. Es ist interessant, dass unbeabsichtigte Antworten gesendet werden, aber vorerst.

Da Pandas zum Lesen von CSV-Dateien schnell zu sein scheinen, verwenden Sie "read_csv" von Pandas. Passen Sie die Antwort und die Zeichenfolge der URL ungefähr an und schließen Sie sie aus.

preprocessing.py


import pandas as pd
import re

df = pd.read_csv('tweets.csv')

tweets = df['text']

replypattern = '@[\w]+'
urlpattern = 'https?://[\w/:%#\$&\?\(\)~\.=\+\-]+'

processedtweets = []

for tweet in tweets:
    i = re.sub(replypattern, '', tweet)
    i = re.sub(urlpattern, '', i)
    if isinstance(i, str) and not i.split():
        pass
    else:
        processedtweets.append(i)

processedtweetsDataFrame = pd.Series(processedtweets)
newDF = pd.DataFrame({'text': processedtweetsDataFrame})

newDF.to_csv('processedtweets.csv')

Ich wollte auch Tweets von einer bestimmten Anwendung (z. B. einem Diagnosehersteller) ausschließen, daher habe ich das passende "df [" source "]" separat gelöscht.

Erstellen einer Markov-Kettendatenbank

Ich hatte bereits ein Paket für Python zur Satzgenerierung durch Markov-Kette, also habe ich es verwendet. https://github.com/o-tomox/TextGenerator

Da das obige Paket jedoch in der Python 2-Serie geschrieben ist, habe ich es entsprechend in die 3-Serie geändert.

Das Folgende ist der Code zum Speichern der Triplettdaten aus der CSV-Datei des durch die Vorverarbeitung erzeugten Tweets in der Datenbank.

storeTweetstoDB.py


from PrepareChain import *
import pandas as pd
from tqdm import tqdm

def storeTweetstoDB():
    
    if len(sys.argv) > 2:
        df = pd.read_csv(sys.argv[1])
    else:
        csvfilepath = input('tweets.csv filepath : ')
        df = pd.read_csv(csvfilepath)


    tweets = df['text']

    print(len(tweets))

    chain = PrepareChain(tweets[0])
    triplet_freqs = chain.make_triplet_freqs()
    chain.save(triplet_freqs, True)

    for i in tqdm(tweets[1:]):
        chain = PrepareChain(i)
        triplet_freqs = chain.make_triplet_freqs()
        chain.save(triplet_freqs, False)



if __name__ == '__main__':
    storeTweetstoDB()

Jetzt können Sie automatisch Ihre eigenen Tweets generieren. Lass es uns laufen.

Generiere einen Tweet

Lassen Sie uns mithilfe der vollständigen Datenbank und der Twitter-API twittern.

markovbot.py


import json
from requests_oauthlib import OAuth1Session
from GenerateText import GenerateText

def markovbot():
    keysfile = open('keys.json')
    keys = json.load(keysfile)
    oath = create_oath_session(keys)

    generator = GenerateText(1)

    tweetmarkovstring(oath, generator)

def create_oath_session(oath_key_dict):
    oath = OAuth1Session(
    oath_key_dict['consumer_key'],
    oath_key_dict['consumer_secret'],
    oath_key_dict['access_token'],
    oath_key_dict['access_token_secret']
    )
    return oath

def tweetmarkovstring(oath, generator):
    url = 'https://api.twitter.com/1.1/statuses/update.json'
    markovstring = generator.generate()
    params = {'status': markovstring+'[Ist eine Fälschung]'}
    req = oath.post(url, params)

    if req.status_code == 200:
        print('tweet succeed!')
    else:
        print('tweet failed')


if __name__ == '__main__':
    markovbot()

Dieses Mal wurden Tweets automatisch basierend auf meinem Konto generiert (@ Hitsumabushi845). Unten sind die Ergebnisse. スクリーンショット 2017-08-21 12.31.31.png

Es scheint ein ziemlicher Satz zu sein ... Oder besser gesagt, es war ein Satz, der gefährlich war, ohne eine Kennung hinzuzufügen. Im obigen Programm wird am Ende "[fake]" hinzugefügt.

Wenn Sie dies danach regelmäßig mit einem Server oder Cron ausführen, können Sie Twitter für immer erstellen.

References

Recommended Posts

Tweet deine eigenen Sätze mit der Markov-Kette
[Python] Implementieren Sie Ihre eigene listenähnliche Klasse mit collection.UserList
Rufen Sie mit Go mit cgo Ihre eigene C-Sprachbibliothek auf
Erstellen Sie Ihre eigene Ausnahme