Skip to content

Instantly share code, notes, and snippets.

@shinob
Last active March 10, 2017 22:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shinob/d9294769229679d2ce0da7dca4c789f1 to your computer and use it in GitHub Desktop.
Save shinob/d9294769229679d2ce0da7dca4c789f1 to your computer and use it in GitHub Desktop.
機械学習した結果から予測をHTTPで返す仕組みの一例 ref: http://qiita.com/mix_dvd/items/5d62a7786d823a4ad411
#!/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
$ chmod a+x server.py
$ ./server.py 8080 &
$ ruby test.rb
旅費交通
#!/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)
require 'net/http'
require 'uri'
puts Net::HTTP.get_print('localhost', URI.escape('/?高速道路利用料'), 8080)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment