4주차 활동 보고서
import 'dart:convert';
import 'package:http/http.dart' as http;
class ApiService {
static const String _url = '<http://localhost:5000/summarize>';
static Future<Map<String, String>> analyzeText(String text) async {
final response = await http.post(
Uri.parse(_url),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({'text': text}),
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
return {
'summary': data['summary'] ?? '',
'emotion': data['emotion'] ?? 'Unknown',
};
} else {
throw Exception('서버 통신 실패');
}
}
}
// emotion_mapper.dart
String mapEmotionToEmoji(String emotion) {
switch (emotion.toLowerCase()) {
case 'happy':
return '😊';
case 'sad':
return '😢';
case 'angry':
return '😡';
case 'neutral':
return '😐';
default:
return '❓';
}
}//api_service.dart
from flask import Flask, request, jsonify
from flask_cors import CORS
from transformers import pipeline
app = Flask(__name__)
CORS(app) # 모든 도메인에서 접근 가능하게 함
summarizer = pipeline("summarization", model="t5-small", tokenizer="t5-small")
classifier = pipeline("text-classification", model="nateraw/bert-base-uncased-emotion")
@app.route("/summarize", methods=["POST"])
def summarize():
data = request.get_json()
text = data.get("text", "")
if not text:
return jsonify({"error": "텍스트 없음"}), 400
# 요약 처리
summary = summarizer(text, max_length=45, min_length=5, do_sample=False)[0]["summary_text"]
# 감정 분석
emotion = classifier(text)[0]["label"]
return jsonify({
"summary": summary,
"emotion": emotion
})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
#app.py