-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.py
More file actions
61 lines (48 loc) · 1.91 KB
/
Copy pathapp.py
File metadata and controls
61 lines (48 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from flask import Flask, render_template, request, jsonify
from gensim.models import Word2Vec
import os
app = Flask(__name__)
# モデルのパスを設定(webフォルダ直下)
MODEL_PATH = os.path.join(os.path.dirname(__file__), 'jawiki_word2vec_2.1.model')
model = None
def load_model():
global model
if model is None:
model = Word2Vec.load(MODEL_PATH)
return model
@app.route('/')
def index():
return render_template('index.html')
@app.route('/calculate', methods=['POST'])
def calculate():
try:
data = request.json
positive = [word.strip() for word in data.get('positive', '').split(',') if word.strip()]
negative = [word.strip() for word in data.get('negative', '').split(',') if word.strip()]
print(positive, negative)
topn = 10 # 固定
if not positive and not negative:
return jsonify({'error': '少なくとも1つの単語を入力してください'}), 400
model = load_model()
# most_similarを実行
kwargs = {'topn': topn}
if positive:
kwargs['positive'] = positive
if negative:
kwargs['negative'] = negative
results = model.wv.most_similar(**kwargs)
# 結果を整形
formatted_results = [
{'word': word, 'similarity': float(similarity)}
for word, similarity in results
]
return jsonify({'results': formatted_results})
except KeyError as e:
return jsonify({'error': f'単語が見つかりません: {str(e)}'}), 400
except Exception as e:
return jsonify({'error': f'エラーが発生しました: {str(e)}'}), 500
if __name__ == '__main__':
print('モデルを読み込んでいます...')
load_model()
print('モデルの読み込みが完了しました')
app.run(debug=True, host='0.0.0.0', port=5000)