単語をPOSTしてシリアライズした分類器で予測した結果を返すことを想定しています。
下記のcurlで単語をPOSTします。
curl http://localhost:8080/test.php -X POST -H "Content-Type: application/json" -d '{"building_name": "ライオンズガーデン明大○○○○"}'
その他にHTTPサーバをbottleで書いています。HTTPサーバ内ではPOSTする単語を前処理してシリアライズした分類器で予測できるように前処理する必要があります。従って、POSTで指定した単語を何らかの形で受け取る必要があります。
bottleで書いたHTTPサーバでは
request_json = json.loads(request.body.getvalue()) building_name = request_json['building_name']
という形でbuilding_nameに格納して使用しています。
しかしターミナルで実行し、指定されたURLに飛ぶと下記のエラーメッセージが出てしまいました。
JSONDecodeError('Expecting value: line 1 column 1 (char 0)',)
おそらくPOSTした単語をJSONで受け取る方法が間違っていると思われるのですが、この場合どのように解決したら良いでしょうか?
building_nameはテキストです。
HTTPサーバ内のコード
from bottle import route, run, request, HTTPResponse # -*- coding: utf-8 -*- import urllib.request import pandas as pd import numpy as np import matplotlib.pyplot as plt import json import csv import codecs from collections import OrderedDict from sklearn.externals import joblib #mecab from natto import MeCab nm = MeCab() print(nm) m = MeCab("-Owakati") MODEL_FILE='bays_model-2.csv' line=pd.read_csv("トレセ単語_new.csv") clf = joblib.load(MODEL_FILE) @route('/housmart', methods=['GET', 'POST']) def clean_name(): request_json = json.loads(request.body.getvalue()) building_name = request_json['building_name'] dek_dic={} dek_dic={v:i for i, v in enumerate(line.drop("Unnamed: 0", axis=1).columns.T)} def func(x): if x == None: return 1 else: return 0 # NaN are=[] for n in nm.parse(building_name, as_nodes=True): if n.surface !="": are.append(n.surface) ree=[] for i, v in dek_dic.items(): for n in are: if i==n: ree.append(v) else: pass were=[] for i,v in dek_dic.items(): if v in ree: were.append(None) else: were.append(i) xx=pd.DataFrame(were).applymap(func).T clf.predict(xx)#予測 if clf.predict(xx)==1: return str(building_name) run(host='localhost', port=8080, debug=True)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/11 14:57
2017/05/11 15:08
2017/05/11 18:33
2017/05/11 22:49
2017/05/11 23:26
2017/05/12 01:28