J'aime Twitter, alors j'ai pensé que si le programme générait automatiquement mes tweets, il le ferait pour moi même lorsque j'étais occupé.
[Evangelion] Essayez de générer automatiquement des lignes de type Asuka avec Deep Learning Quand je lis, il semble que la chaîne de Markov génère des phrases qui ressemblent plus à cela que le Deep Learning, alors j'ai créé un programme basé sur cette politique. ... ou plutôt, c'est la même chose que de le faire complètement ...
Shumai-kun (@shuumai) et le journal compressé (@asshuku) semblent également être des chaînes de Markov, alors peut-être que cette politique devrait convenir. ..
Tous vos tweets précédents peuvent être téléchargés depuis le site officiel sous forme de fichier zip contenant json et csv. Téléchargez tout l'historique de vos tweets
Cette fois, nous utiliserons le tweets.csv
obtenu à partir de cela.
Étant donné que certains tweets incluent des réponses et des URL, il est nécessaire de les exclure afin de ne pas sauter involontairement des réponses ou de tweeter des URL inexistantes. Il est intéressant que des réponses involontaires soient envoyées, mais pour le moment.
Il semble que les pandas soient plus rapides pour lire les fichiers CSV, alors utilisez read_csv
de pandas.
Faites correspondre approximativement la réponse et la chaîne de caractères de l'URL et excluez-la.
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')
Je voulais aussi exclure les tweets d'une application particulière (comme un outil de diagnostic), j'ai donc supprimé le `df ['source'] correspondant séparément.
J'avais déjà un package pour Python pour la génération de phrases par chaîne Markov, donc je l'ai utilisé. https://github.com/o-tomox/TextGenerator
Cependant, comme le package ci-dessus est écrit en série Python 2, je l'ai modifié en série 3 selon le cas.
Voici le code pour stocker les données du triplet du fichier CSV du tweet généré par le prétraitement dans la base de données.
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()
Vous êtes maintenant prêt à générer automatiquement vos propres tweets. Lançons-le.
Tweettons en utilisant la base de données complète et l'API Twitter.
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+'[Est un faux]'}
req = oath.post(url, params)
if req.status_code == 200:
print('tweet succeed!')
else:
print('tweet failed')
if __name__ == '__main__':
markovbot()
Cette fois, des tweets ont été générés automatiquement en fonction de mon compte (@ hitsumabushi845). Voici les résultats.
Cela semble être toute une phrase ... Ou plutôt, c'était une phrase qui était dangereuse sans ajouter une sorte d'identifiant, donc dans le programme ci-dessus, «[faux]» est ajouté à la fin.
Après cela, si vous l'exécutez régulièrement avec un serveur ou un cron, vous pourrez créer Twitter pour toujours.
References