L'autre jour, j'ai créé un programme qui prédit des comptes en utilisant les résultats de l'apprentissage automatique, mais il y avait une opinion que la réponse des résultats de prédiction était anormalement lente et inutilisable, alors j'ai essayé un peu d'ingéniosité.
J'ai décidé d'utiliser HTTP afin de me rendre compte facilement que le résultat d'apprentissage est stocké dans la mémoire et que le compte est renvoyé lorsque la description est envoyée.
J'ai donc créé un serveur HTTP avec Python, lu le résultat de l'apprentissage lorsque le serveur HTTP a été démarré, et lorsque j'ai envoyé le résumé avec GET, j'ai prédit et renvoyé le compte.
J'ai fait référence à l'article suivant.
Créez facilement un serveur HTTP avec Python-Qiita
Je l'utilise tel quel, mais il a été un peu corrigé car la bibliothèque appelée BaseHTTPServer a été modifiée et une erreur s'est produite dans le traitement japonais. Au fait, c'est Python3.
CallbackServer.py
#!/usr/local/bin/python
# coding: utf-8
import requests
import http.server
import socketserver
from http.server import BaseHTTPRequestHandler
from urllib.parse import urlparse, unquote
def start(port, callback):
def handler(*args):
CallbackServer(callback, *args)
server = socketserver.TCPServer(('', int(port)), handler)
server.serve_forever()
class CallbackServer(BaseHTTPRequestHandler):
def __init__(self, callback, *args):
self.callback = callback
BaseHTTPRequestHandler.__init__(self, *args)
def do_GET(self):
parsed_path = urlparse(self.path)
query = unquote(parsed_path.query)
self.send_response(200)
self.end_headers()
result = self.callback(query)
self.wfile.write(result.encode('utf-8'))
return
Il lit le résultat d'apprentissage au démarrage et renvoie le résultat prédit par le rappel GET.
server.py
#!/usr/local/bin/python
# coding: utf-8
import sys
import CallbackServer
import pandas as pd
import numpy as np
homedir = "/home/scripts/"
filename = "data/code.csv"
df = pd.read_csv(homedir + filename, header=None)
df.index = df.pop(0)
df_rs = df.pop(1)
from sklearn.externals import joblib
scaler = joblib.load(homedir + 'data/scaler.pkl')
clf = joblib.load(homedir + 'data/clf.pkl')
vect = joblib.load(homedir + 'data/vect.pkl')
from janome.tokenizer import Tokenizer
t = Tokenizer()
def callback_method(query):
texts = [
query,
]
notes = []
for note in texts:
tokens = t.tokenize(note)
words = ""
for token in tokens:
words += " " + token.surface
notes.append(words)
X = vect.transform(notes)
result = clf.predict(X)
ans = ""
for i in range(len(texts)):
ans = df_rs.ix[result[i]]
return ans
if __name__ == '__main__':
port = sys.argv[1]
CallbackServer.start(port, callback_method)
Commencez par la commande suivante.
python
$ chmod a+x server.py
$ ./server.py 8080 &
Obtenons le résultat de la prédiction en utilisant Ruby.
test.rb
require 'net/http'
require 'uri'
puts Net::HTTP.get_print('localhost', URI.escape('/?Frais d'utilisation de l'autoroute'), 8080)
Je le ferai.
python
$ ruby test.rb
Frais de déplacement transport
C'était fait (^ - ^)
Bon sentiment (^ - ^)
Veuillez vous référer à l'article suivant pour savoir comment créer un bot LINE.
Créer un BOT de réponse automatique avec l'API de messagerie de LINE
Au fait, vous pouvez vous faire des amis avec ce bot LINE avec le code QR suivant.
Que devrais-je faire ensuite?
Recommended Posts