프로젝트 정보

4주차 활동 보고서

액션 아이템

API 연동 및 통신

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