Effectuez une recherche Twitter à partir de Python et essayez de générer des phrases avec la chaîne de Markov.

Recevez des tweets avec n'importe quel mot-clé à l'aide de l'API Twitter. Enregistrez les données acquises sous forme de texte et transmettez-les à MeCab. Effectuez une analyse morphologique et essayez de faire une phrase avec une chaîne de Markov.

Cette fois, j'ai gardé le nombre à 140 pour qu'il puisse être utilisé pour les tweets tel quel, Vous pouvez essayer de faire long. La précision est faible. Je viens de réaliser la génialité du journal comprimé.

markov.py



#!/user/bin/env python
# -*- coding: utf-8 -*-
from requests_oauthlib import OAuth1Session
import json
import sys
import MeCab
import random


while True:
	search_words = raw_input(u"Keyword?: ")
	
	C_KEY = "******************************"
	C_SECRET = "******************************"
	A_KEY = "******************************"
	A_SECRET = "******************************"


	def Limit_Status():
		url = "https://api.twitter.com/1.1/application/rate_limit_status.json"
		params = {}
		tw = OAuth1Session(C_KEY,C_SECRET,A_KEY,A_SECRET)
		req = tw.get(url, params = params)
		if req.status_code == 200:
			limit = req.headers["x-rate-limit-remaining"]
			print ("API remain: " + limit)
		return Limit_Status
	
	def Search_words():
		url = "https://api.twitter.com/1.1/search/tweets.json?"
		params = {
				"q": unicode(search_words, "utf-8"),
				"lang": "ja",
				"result_type": "recent",
				"count": "100"
				}
		tw = OAuth1Session(C_KEY,C_SECRET,A_KEY,A_SECRET)
		req = tw.get(url, params = params)
		tweets = json.loads(req.text)
		for tweet in tweets["statuses"]:
			f = open("test.txt" , "aw")
			lists = (tweet["text"].encode("utf-8"))
			if "http" in lists:
				lists = lists.split("http", 1)[0]
				lists = lists.split("@")[0]
				lists = lists.split("RT")[0]

				f.write(lists)
				f.flush()
				f.close()

		
	def Mecab_file():	
		f = open("test.txt","rb")
		data = f.read()
		f.close()

		mt = MeCab.Tagger("-Owakati")
		wordlist = mt.parse(data)
 
		markov = {}
		w1 = ""
		w2 = ""
		w3 = ""
		w4 = ""
		w5 = ""
		w6 = ""
		w7 = ""
		w8 = ""
		for word in wordlist:
			if w1 and w2 and w3 and w4 and w5 and w6 and w7 and w8:
				if (w1,w2,w3,w4,w5,w6,w7,w8) not in markov:
					markov[(w1,w2,w3,w4,w5,w6,w7,w8)] = []
				markov[(w1,w2,w3,w4,w5,w6,w7,w8)].append(word)
			w1,w2,w3,w4,w5,w6,w7,w8 = w2,w3,w4,w5,w6,w7,w8,word
		count = 0
		sentence = ""
		w1,w2,w3,w4,w5,w6,w7,w8 = random.choice(markov.keys())
    
		while count < 140:
			if markov.has_key((w1,w2,w3,w4,w5,w6,w7,w8)) == True:
				tmp = random.choice(markov[(w1,w2,w3,w4,w5,w6,w7,w8)])
				sentence += tmp
				w1,w2,w3,w4,w5,w6,w7,w8 = w2,w3,w4,w5,w6,w7,w8,tmp
				count +=1
			if " " in sentence:
				sentence = sentence.split(" ", 1)[0]
				
		print sentence
	
	if search_words:
		Search_words()
		Mecab_file()
		Limit_Status()
	else:
		break

J'ai essayé de fonctionner avec 8 chaînes. Cela s'est avéré inintéressant à moins que je ne m'arrête à environ 4 chaînes.

À l'origine, je voulais supprimer toutes les données inutiles des données Json, mais mes connaissances pour le moment sont limitées. Pour le moment, lorsque http est inclus dans le texte, j'ai essayé de le supprimer avec split.

Comme d'habitude, si test.txt n'existe pas dans le même répertoire, il sera généré. S'il y en a, écrasez-le.

La boucle dans While s'arrête lorsqu'elle est exécutée sans entrer un mot de recherche. Il peut être bon de stocker les différents mots de recherche séparément.

J'ai essayé de le modifier. Affinez les parties qui ne sont pas nécessaires avec les expressions régulières, Des choix aléatoires tels que "desu" et "masu" pour que la fin de la phrase ne devienne pas étrange.

J'ai senti que celui-ci était plus pratique.

	def Mecab_file():	
		f = open("tweet.txt","rb")
		data = f.read()
		f.close()

		mt = MeCab.Tagger("-Owakati")

		wordlist = mt.parse(data)
		wordlist = wordlist.rstrip(" \n").split(" ")
 
		markov = {}
		w = ""
	
		for x in wordlist:
			if w:
				if markov.has_key(w):
					new_list = markov[w]
				else:
					new_list =[]
			
				new_list.append(x)
				markov[w] = new_list
			w = x
		
		choice_words = wordlist[0]
		sentence = ""
		count = 0
	
		while count < 90:
			sentence += choice_words
			choice_words = random.choice(markov[choice_words])
			count += 1

			sentence = sentence.split(" ", 1)[0]
			p = re.compile("[!-/:-@[-`{-~]")
			sus = p.sub("", sentence)
		
			random_words_list = [u"。", u"est.", u"Il est."]
			last_word = random.choice(random_words_list)
	
		print re.sub(re.compile("[!-~]"),"",sus), last_word

Recommended Posts

Effectuez une recherche Twitter à partir de Python et essayez de générer des phrases avec la chaîne de Markov.
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
Essayez d'extraire une chaîne de caractères d'une image avec Python3
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
Essayez de dessiner une courbe de vie avec python
Comment générer un objet Python à partir de JSON
Essayez de créer un code de "décryptage" en Python
Essayez de générer automatiquement des documents Python avec Sphinx
Étapes pour créer un bot Twitter avec Python
Essayez de créer un groupe de dièdre avec Python
Essayez d'embellir avec Talking Head Anime à partir d'une seule image [préparation python]
Faisons un outil de veille de commande avec python
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
De l'achat d'un ordinateur à l'exécution d'un programme sur python
Obtenez une grande quantité de données Twitter de Starba avec python et essayez l'analyse de données Partie 1
Rechercher des tweets Twitter avec Python
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
Hash avec python et échapper à l'égosa d'un certain ministre
Collecte d'informations sur Twitter avec Python (intégration de MySQL et Python)
Essayez simplement de recevoir un webhook avec ngrok et Python
Feuille de route d'apprentissage qui vous permet de développer et de publier des services à partir de zéro avec Python
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
Essayez l'analyse morphologique et la chaîne de Markov avec Django (Ari avec beaucoup de marge d'amélioration)
Répétez avec While. Script pour tweeter ou rechercher depuis le terminal
Essayez d'exploiter Facebook avec Python
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Essayez de créer un environnement python avec Visual Studio Code et WSL
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
Exploration avec Python et Twitter API 2-Implémentation de la fonction de recherche d'utilisateurs
Obtenez des données de VPS MySQL avec Python 3 et SQL Alchemy
Je souhaite rechercher le texte intégral avec elasticsearch + python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
Essayez d'afficher la carte google et la carte géographique avec python
[Python] Générer un mot de passe avec Slackbot
Publiez facilement sur Twitter avec Python 3
Passer la liste de Python vers C ++ par référence dans pybind11
Essayez d'ajouter un mur à votre fichier IFC avec IfcOpenShell python
[Python] Une infrastructure de données permettant d'acquérir et de publier des tweets de l'API Twitter vers BigQuery a été conçue sur GCP (avec un score négatif / positif)
[AWS lambda] Déployer, y compris diverses bibliothèques avec lambda (générer un zip avec un mot de passe et le télécharger vers s3) @ Python
Introduction et utilisation de la bouteille Python ・ Essayez de configurer un serveur Web simple avec une fonction de connexion
Les informations sont accumulées par la recherche Twitter, une analyse morphologique est effectuée, des phrases sont générées par chaîne de Markov et des tweets sont créés.
2.Faites un arbre de décision à partir de 0 avec Python et comprenez-le (2. Bases du programme Python)
Mettez Cabocha 0.68 dans Windows et essayez d'analyser la dépendance avec Python
[Python] J'ai créé un bot Twitter qui génère des tweets semblables à des amis avec des règles de chaîne de Markov.
Essayez de convertir les coordonnées de latitude / longitude et du monde entre elles avec python
Essayez de créer un logiciel de capture aussi précis que possible avec python (2)
Créez un outil qui secoue automatiquement furigana avec html en utilisant Mecab de Python3
Résolution avec Ruby, Perl, Java et Python AtCoder AGC 033 A Recherche de priorité de largeur
Essayez de créer foldl et foldr avec Python: lambda. Aussi mesure du temps
Essayez de tweeter le flux RSS d'arXiv sur Twitter avec python de Raspeye
Migration de Python2 vers Python3 (Python2 est reconstruit comme un environnement virtuel et coexiste)
Recherchez des mots-clés Twitter avec tweepy et écrivez les résultats dans Excel
Connectez-vous à postgreSQL depuis Python et utilisez des procédures stockées dans une boucle.
PPLM: Une technique simple de Deep Learning pour générer des phrases avec des attributs spécifiés
Essayez d'écrire du code python pour générer du code go - Essayez de porter JSON-to-Go et ainsi de suite