æ¬è¨äºã¯
ããã°æ¸ãåãã¦ã£ã¼ã¯
5æ¥ç®ã®è¨äºã§ãã
ð
4æ¥ç®
â¶â¶ æ¬è¨äº â¶â¶
6æ¥ç®
ð

- ã¯ããã«
- ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ã¨ã¯ï¼
- ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ã®ã¡ãªãã
- å®è£ ããã¢ããªã±ã¼ã·ã§ã³ã®æ§æ
- ç°¡æã¢ããªã±ã¼ã·ã§ã³ã®æ¦è¦
- Java ã® å®è£
- Python ã®å®è£
- Thymeleaf ï¼ç»é¢ã®å®è£ ï¼
- ã¢ããªã±ã¼ã·ã§ã³ã®å®è¡
- ãããã«
ã¯ããã«
ããã«ã¡ã¯ãæ°å
¥ç¤¾å¡ã®å¤§æ¾¤ã§ãã
é¨ç½²ã«é
å±ããã¦åå¹´è¿ããçµéãã¾ããããç¾å¨ã¯ Javaï¼Spring Bootï¼ã使ç¨ããã·ã¹ãã ã®éçºãæ
å½ãã¦ãã¾ãã
ç§ãæ
å½ãã¦ããã·ã¹ãã ã§ã¯ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ã¨ããæ§æãæ¡ç¨ãã¦ãã¾ãã
ããã¾ã§ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ã«ã¤ãã¦ç¥ããªãã£ãã®ã§ãããæ¥åã§æ±ã£ã¦å¦ãã§ããä¸ã§é常ã«é¢ç½ãæ§æã ã¨æããã®ã§ãå®éã«ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ãæ¡ç¨ããç°¡æçãªã¢ããªã±ã¼ã·ã§ã³ã使ãã¦æ§æã«ã¤ãã¦çè§£ãæ·±ãã¦ãããã¨æãã¾ãã
ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ã¨ã¯ï¼
ãã¤ã¯ããµã¼ãã¹ã¨ã¯è¤æ°ã®åå²ãããã·ã¹ãã ã§æ§æãããã¢ã¼ããã¯ãã£ã®ãã¨ã§ãã
対ã«ãªãç¨èªã¨ãã¦ã¢ããªã·ãã¯ã¢ã¼ããã¯ãã£ãããã¾ããããã®æ§æã§ã¯å¤§ããª1ã¤ã®ã·ã¹ãã ã®ä¸ã«è¤æ°ã®æ©è½ã»ãµã¼ãã¹ãåå¨ãã¦ãã¾ãã
ã·ã¹ãã ãæ©è½ã»ãµã¼ãã¹ãã¨ã«åå²ãã¦ç¬ç«ããã¢ã¸ã¥ã¼ã«ãæ§ç¯ããã¢ã¸ã¥ã¼ã«éã®ããåãã«ãã£ã¦æ©è½ãããæ§æããã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ã§ãã

ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ã®ã¡ãªãã
ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ãæ¡ç¨ããã¡ãªããã¯ããã¤ãããã¾ãã
æè¡é¸å®ãæè»ã«ã§ãã
æ©è½ã»ãµã¼ãã¹ãããããç¬ç«ãã¦ãããããç°å¢ãç°ãªãã·ã¹ãã å士ã®é£æºãå¯è½ã§ãã
ãã®ããããµã¼ãã¹ãã¨ã«é©ããæè¡ãæ¡ç¨ãããã¨ãã§ãã¾ããã¹ãã¼ãã£ãªéçº
åãµã¼ãã¹ãç¬ç«ãã¦ãããããæ å½ãµã¼ãã¹ãã¨ã®éçºãã¼ã ã§ç¬ç«ããéçºãå¯è½ã§ãã ãã®ãããéçºå¹çãä¸ãããã¨ãã§ãã¾ããèé害æ§
ã¢ããªã·ãã¯ã¢ã¼ããã¯ãã£ã®å ´åã¯ä¸ã¤ã®ã·ã¹ãã ã§æ§æããã¦ããããé害ãçºçãã¦ãã¾ãã¨å ¨ä½ã«å½±é¿ãã¦ãã¾ããã¨ãããã¾ãã
ããããåãµã¼ãã¹ãç¬ç«ãã¦ããããããä¸ã¤ã®ãµã¼ãã¹ã«é害ãçºçãã¦ããã®å½±é¿ç¯å²ãæå°éã«æãããã¨ãã§ãã¾ãã
ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ã«ã¤ãã¦ã®ã¡ãªãããè¿°ã¹ã¾ããããå®ç¾ãããã·ã¹ãã ã«ãã£ã¦é©ãã¦ããã¢ã¼ããã¯ãã£ã¯ç°ãªãã®ã§ãä»ã®ã¢ã¼ããã¯ãã£ã®ã¡ãªãããèæ ®ããªããæ¡ç¨ããã¢ã¼ããã¯ãã£ã決ãã¦ãããã¨ãéè¦ã§ãã
å®è£ ããã¢ããªã±ã¼ã·ã§ã³ã®æ§æ
ä»åã¯ç°¡æçãªãã®ã§ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ãæ§ç¯ãã¦ããã¾ãã
ç°¡æçãªãã®ãªã®ã§æ§æã¯ã³ã³ããã¼ã©ã¼ã¢ã¸ã¥ã¼ã«ã¨1ã¤ã®ãµã¼ãã¹ã¢ã¸ã¥ã¼ã«ã«ããã¢ã¸ã¥ã¼ã«å士ã®ããã¨ã㯠API ã§å®ç¾ãã¾ãã
å®éã«ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ãæ§ç¯ããéã¯ãµã¼ãã¹ã¢ã¸ã¥ã¼ã«ãå¢ããããµã¼ãã¹ãã¨ã«DBãæã¤ãã¨ã§1ã¤ã®ãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ãæ§æã§ãã¾ãã
ããã¾ã§ãã·ã¹ãã ãæ©è½ãã¨ã«ã³ã³ããã¼ã©ã¨ãµã¼ãã¹ã«åãé¢ããã¨ãã§ããåãé¢ããã¢ã¸ã¥ã¼ã«éã®éä¿¡ãç°¡åã«å®ç¾å¯è½ãã¨ãããã¨ã宿ã§ãããã¨æãã¾ãã
ç°¡æã¢ããªã±ã¼ã·ã§ã³ã®æ¦è¦
ä»åã¯ç¬ç«ããã¢ã¸ã¥ã¼ã«ã¨ãããã¨ãããããããããããã«æè¡ï¼è¨èªï¼ãç°ãªããã®å士ã§ããåããè¡ãã¾ãã
è¨èªã¯ ã³ã³ããã¼ã©ã¼ã« Javaï¼Sprng Bootï¼ããµã¼ãã¹ã« Pythonï¼Flaskï¼ãæ¡ç¨ãã REST API ã使ç¨ãã¦ã¢ã¸ã¥ã¼ã«éã®éä¿¡ãå®ç¾ãã¾ãã
ç»é¢é¨å㯠Spring Boot ã¨ã®çµã¿åããã§ããæ¡ç¨ããã Thymeleaf ãå©ç¨ãã¾ãã
ã¾ããã¢ã¸ã¥ã¼ã«ãåããã¡ãªãããããæããããã« Python ã徿ãªå¦çã ãã Python ã«ä»»ãããã¨æãã¾ãã
Python ã¯èªç¶è¨èªå¦çã«ããã使ç¨ãããè¨èªãªã®ã§ãèªç¶è¨èªå¦çã®ä¸ã¤ã§ããææ
åæãããã¦ã¿ã¾ãããã
æ§ç¯ããã¢ããªã±ã¼ã·ã§ã³ã®å
·ä½çãªæ©è½ã®æµãã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
- ã¦ã¼ã¶ããã©ã¦ã¶ã§ã¢ããªã±ã¼ã·ã§ã³ã«ã¢ã¯ã»ã¹ããææ åæããããæç« ãå ¥å
- å ¥åãããæç« ã Java ãåãåã£ã¦ Python å´ã® API ã«ãªã¯ã¨ã¹ããéä¿¡
- Python 㯠API ã§æ¸¡ãããæç« ãææ åæãã çµæã JSON å½¢å¼ã§ ã¬ã¹ãã³ã¹ã¨ã㦠Java ã«è¿ã
- Java ã¯ã¬ã¹ãã³ã¹ããªãã¸ã§ã¯ãã¨ãã¦åãåããçµæãå¦çãã
- Java ãå¦ççµæããã³ãã¬ã¼ãï¼Thymeleafï¼ã«æ¸¡ããå¦ççµæã®ç»é¢ãåçã«çæããã
- ã¦ã¼ã¶ã®ãã©ã¦ã¶ä¸ã«å¦ççµæã®ç»é¢ã表示ããã
ããè©³ç´°ã«æ©è½ã®æµãã表ãããã®ã以ä¸ã®å³ã§ãã

Java ã® å®è£
ããããå®éã«å®è£
ãã¦ããã¾ãã
ãã¼ã¸ã§ã³ã¯ Java 23.0.1ãSpring Boot 3.4.0 ã使ç¨ãã¾ãã
Spring Boot å´ã® src 以ä¸ã®ãã©ã«ãæ§æã¯ä»¥ä¸ã®ããã«ãªã£ã¦ãã¾ãã
.
âââ src/
âââ main/
âââ java/
â âââ com.example.apiApp/
â âââ api/
â â âââ ApiClient.java
â âââ controller/
â â âââ AppController.java
â âââ form/
â â âââ TextForm.java
â âââ model/
â â âââ ApiResponse.java
â â âââ Sentiment.java
â âââ servise/
â â âââ SentimentService.java
â âââ Application.java
âââ resources/
âââ static/
â âââ style.css
âââ templates/
â âââ index.html
âââ application.properties
Controller ã®ä½æ
使ãã Controller ã®ã³ã¼ãã¯ä»¥ä¸ã«ãªãã¾ãã
AppController.java
package com.example.app.controller; import com.example.app.api.ApiClient; import com.example.app.form.TextForm; import com.example.app.model.ApiResponse; import com.example.app.service.SentimentService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.servlet.ModelAndView; @Controller @RequiredArgsConstructor public class AppController { final ApiClient client; @GetMapping("/") public ModelAndView index(ModelAndView mav) { // TextForm ããã³ãã¬ã¼ãã«æ¸¡ãã¦ã¦ã¼ã¶ãå ¥åããå¤ãæ ¼ç´ããã mav.addObject("textForm", new TextForm()); //表示ãã HTML ãã¡ã¤ã«ã®ååãã»ãã mav.setViewName("index"); return mav; } @GetMapping("/sentiment") public ModelAndView createResult(@ModelAttribute("textForm") @Validated TextForm textForm, // BindingResult result, // ModelAndView mav // ) { // å ¥åãããå¤ã空ã®å ´å if (result.hasErrors()) { mav.addObject("textForm", textForm); //表示ãã HTML ãã¡ã¤ã«ã®ååãã»ãã mav.setViewName("index"); return mav; } // ææ åæããæç« ã Python ã«æ¸¡ãã¦çµæãåå¾ ApiResponse response = client.getSentiment(textForm.getInputText()); // åå¾ããåæçµæããææ ãæ±ºå®ãã¦æ ¼ç´ String resultType = SentimentService.createResult(response); // "result" ã¨ããååãã³ãã¬ã¼ãå´ã«æ¸¡ã mav.addObject("result", resultType); //表示ãã HTML ãã¡ã¤ã«ã®ååãã»ãã mav.setViewName("index"); return mav; } }
åæã¨ãã¦ããã® Spring Boot ã¢ããªã±ã¼ã·ã§ã³ã¯ ãã¼ãçªå· 8080 ã§ãã¼ã«ã«ã§èµ·åãã¾ãã
ãã®å¾ã®å¦çã®æµãã¯ä»¥ä¸ã®ããã«ãªãã¾ãã
ã» localhost:8080/ ã«ã¢ã¯ã»ã¹ãã㨠index.html ã表示ãããã
㻠表示ãããç»é¢ã§ããã¹ããå
¥åããéä¿¡ãã¿ã³ãæ¼ã㨠localhost:8080/sentiment ã«ã¢ã¯ã»ã¹ããã
ã» localhost:8080/sentiment ã«ã¢ã¯ã»ã¹ããã¨ã ApiClient ã® getSentiment() ã Python ã«API ãªã¯ã¨ã¹ããéãã
API ã¯ã©ã¤ã¢ã³ãã®ä½æ
Python å´ã®ãµã¼ãã¹ ã« API ãéä¿¡ããã¯ã©ã¤ã¢ã³ãã¨ãªãã¯ã©ã¹ã§ãã
API ã¯ã©ã¤ã¢ã³ãã®ã³ã¼ãã¯ä»¥ä¸ã«ãªãã¾ãã
ApiClient.java
package com.example.app.api; import com.example.app.model.ApiResponse; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; @FeignClient(name = "apiApp", url = "localhost:5000/") public interface ApiClient { // localhost:5000/sentiment ã«å¼æ°ã®å¤ããã©ã¡ã¼ã¿ã¨ãã GET ãªã¯ã¨ã¹ããéä¿¡ããã // ã¬ã¹ãã³ã¹ã RestApiResponse åã®ãªãã¸ã§ã¯ãã«æ ¼ç´ // @FeignClient ãä»ä¸ãããã¨ã§ã¡ã½ãããå®ç¾©ããã ãã§ API ã¯ã©ã¤ã¢ã³ãã宿 @GetMapping("/sentiment") ApiResponse getSentiment(@RequestParam("text") String text); }
ãã® ApiClient 㯠getSentiment() ãå¼ã°ãã㨠localhost:5000/sentiment ã«ãªã¯ã¨ã¹ããéä¿¡ãã¾ãã localhost:5000/sentiment ã¯å¾è¿°ã® Python ã®ã¢ããªã±ã¼ã·ã§ã³ããã¼ã«ã«ã§å®è¡ããå ´åã® URL ã§ãã getSentiment() ã¯ã¡ã½ããã®å¼æ°ã«æå®ãããå¤ããã©ã¡ã¼ã¿ã¨ã㦠GET ãªã¯ã¨ã¹ããéä¿¡ãã¾ãã
ãã®ä»ã®ã¯ã©ã¹
ã¢ããªã±ã¼ã·ã§ã³ã®å®è£ ã§ä½æãããã®ä»ã®ã³ã¼ãã¯ä»¥ä¸ã«ãªãã¾ãã
Form (ã¦ã¼ã¶ãå ¥åããå 容ãä¿æããã¯ã©ã¹)
ããã§ä½æãã Model ã JSON ã¨ãããã³ã°ããã¾ãã
TextForm.java
package com.example.app.form; import jakarta.validation.constraints.NotBlank; import lombok.Data; @Data public class TextForm { // ã¦ã¼ã¶ãå ¥åããå¤ã¯ããã«æ ¼ç´ @NotBlank(message = "æç« ãå ¥åãã¦ãã ãã") String inputText; }
ã¦ã¼ã¶ãå
¥åããæç« ã inputText ã¨ãããã£ã¼ã«ãã§ä¿æãã¾ãã
ã¦ã¼ã¶ãä½ãå
¥åããã«éä¿¡ãã¿ã³ãæ¼ä¸ããå ´åã®è¦åæã message ã§å®ç¾©ãã¦ãã¾ãã
Model ï¼Python ããã® JSON å½¢å¼ã®ã¬ã¹ãã³ã¹ããªãã¸ã§ã¯ãã¨ãã¦åãåãï¼
ApiResponse.java
package com.example.app.model; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.List; @Data public class ApiResponse { // Python ã®ã¬ã¹ãã³ã¹ããªã¹ããªã®ã§ Sentiment åãªãã¸ã§ã¯ãããªã¹ãã§ä¿æ @JsonProperty("sentiment_list") List<Sentiment> sentiments; }
Sentiment.java
package com.example.app.model; import lombok.Data; @Data public class Sentiment { // Python ãè¿ã JSON ã®å½¢å¼ã«åããã // ã¬ã¹ãã³ã¹ã®ä¾ï¼{'positive': 1, 'negative': 0} int positive; int negative; }
Service ï¼Python ããåãåã£ããã¼ã¿ã®å¦çï¼
Service ã§ã¯ Pytnon ããåãåã£ããã¼ã¿ã®å¦çããã¾ãã
æç« å
¨ä½ã®ãã¬ãã¸ã®å¤æã¯ããã§æ±ºå®ãã¾ãã
SentimentService.java
package com.example.app.service; import com.example.app.model.ApiResponse; import com.example.app.model.Sentiment; public class SentimentService { public static String createResult(ApiResponse response) { int score = calcSentiment(response); if (score == 0) { return "neutral"; } return score > 0 ? "positive" : "negative"; } private static int calcSentiment(ApiResponse response) { // response ã® sentiments ã«æ ¼ç´ããã¦ãããã¸ãã£ãããã¬ãã£ãã®å¤ãããããåç® int positiveScore = response.getSentiments().stream().mapToInt(Sentiment::getPositive).sum(); int negativeScore = response.getSentiments().stream().mapToInt(Sentiment::getNegative).sum(); final int total = positiveScore + negativeScore; // åè¨ã 0 ã®å ´åã¯å¼ãæãç«ããªãã®ã§ 0 ãè¿ãã0ã§ãªããã°çµæãè¨ç®ãã¦è¿ã return total == 0 ? 0 : (positiveScore - negativeScore) / total; } }
å®è¡ç¨ã®ã¯ã©ã¹
Spring Boot ã®ã¢ããªã±ã¼ã·ã§ã³ãå®è¡ããããã®ã¯ã©ã¹ã§ãã
Application.java
package com.example.app; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableFeignClients // @FeignClient ã使ç¨ããããã«å¿ è¦ public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
Python ã®å®è£
ç¶ãã¦ãApiClient ããã®ãªã¯ã¨ã¹ããåãåã Flaskï¼Pythonï¼ å´ã®å®è£
ã§ãã
ãã¼ã¸ã§ã³ã¯ Python 3.10.4ãFlask 3.1.0 ã使ç¨ãã¾ãã
app.py
from flask import Flask, request, jsonify import oseti app = Flask(__name__) @app.route('/sentiment') # localhost:5000/ ã«ã¢ã¯ã»ã¹ã§å®è¡ def microAppFunc(): # ãªã¯ã¨ã¹ããã©ã¡ã¼ã¿ text ã®å¤ãåå¾ text = request.args.get('text') # ãã¬ãã¸åæãããªã¹ãå½¢å¼ã§çµæãè¿ã # ä¾ï¼[{'positive': 1, 'negative': 0}, {'positive': 0, 'negative': 0}] result = oseti.Analyzer().count_polarity(text.rstrip()) # ãªã¹ãã JSON ã«æ´å½¢ return jsonify({'sentiment_list' : result}) if __name__ == '__main__': app.run(host='localhost', port=5000) #ãã¼ã5000ã§ãµã¼ãã¼ãèµ·åãã
ä»åã¯ææ
åæã«ã¯ oseti ã¨ããã©ã¤ãã©ãªã使ç¨ãã¦ãã¾ãã
åèã«ãããµã¤ãã以ä¸ã«è¨è¼ãã¾ãã®ã§ãã²åèã«ãã¦ã¿ã¦ãã ããã
Thymeleaf ï¼ç»é¢ã®å®è£ ï¼
ä»å㯠Bootstrap ã¨ãããã¬ã¼ã ã¯ã¼ã¯ã使ç¨ãã¦ç»é¢ã使ãã¦ãã¾ãã
å®éã«ã¦ã¼ã¶ãå
¥åããç»é¢ã®å®è£
ã¯ä»¥ä¸ã«ãªãã¾ãã
index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ææ å¤å®ãã¼ã«</title> <link crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" rel="stylesheet"> <link rel="stylesheet" th:href="@{/style.css}"> </head> <body> <div class="container"> <h2 class="text-center mb-4">ææ å¤å®ãã¼ã«</h2> <form action="/sentiment" method="get" th:object="${textForm}"> <div class="mb-3"> <label class="form-label">åæãããæç« ãå ¥åãã¦ãã ãã</label> <textarea class="form-control" placeholder="ããã«æç« ãå ¥åãã¦ãã ãã..." rows="5" th:field="*{inputText}"></textarea> <div style="color: red;" th:errors="*{inputText}" th:if="${#fields.hasErrors('inputText')}"></div> </div> <button class="btn btn-primary" type="submit">å¤å®ãã</button> </form> </div> <!-- çµæã®è¡¨ç¤º --> <div class="container" th:if="${result}"> <div> <div class="result-icon"> <span th:if="${result} == 'positive'"> ãã¸ãã£ããªæç« ã§ãð</span> <span th:if="${result} == 'negative'"> ãã¬ãã£ããªæç« ã§ãð¢</span> <span th:if="${result} == 'neutral'">ãã¥ã¼ãã©ã«ãªæç« ã§ã</span> </div> </div> </div> </body> </html>
style.css
body { background-color: lightgray; font-family: "Arial"; } .container { margin-top: 50px; max-width: 600px; background: #ffffff; border-radius: 8px; box-shadow:0 4px 6px rgba(0, 0, 0, 0.1); padding: 20px; } .btn { width: 100%; }
ãã®ã³ã¼ãã§ä½æããç»é¢ã«å®éã«ã¢ã¯ã»ã¹ã¨ä»¥ä¸ã®ç»åã®ãããªè¡¨ç¤ºã«ãªãã¾ãã

ã¢ããªã±ã¼ã·ã§ã³ã®å®è¡
å®éã«ã¢ããªã±ã¼ã·ã§ã³ãå®è¡ãã¦ã¿ã¾ãã
Spring Boot ã®ã¢ããªã±ã¼ã·ã§ã³ã¨ Flask ã® app.py ãå®è¡ãããã¨ã§ã¢ããªã±ã¼ã·ã§ã³ãå®è¡ã§ãã¾ãã
å®è¡ã㦠localhost:8080/ ã«ã¢ã¯ã»ã¹ããå®éã«æç« ãå
¥åãã¦ã¿ã¾ãããï¼
ãã®å ´åã¯ããã天æ°ãã¨å
¥åããã®ã§çµæã¯ãã¸ãã£ãã«ãªãã¯ãã§ãã
å
¥åå¾ã«ãå¤å®ããããã¿ã³ãæ¼ä¸ããã¨çµæã表示ããã¾ãã
å¤å®ããã¾ããï¼
ã¡ããã¨ãã¸ãã£ããªæç« ã¨å¤å®ããã¾ããï¼
ç¶ãã¦ãã¬ãã£ããªæç« ãå
¥åãã¦ã¿ããã¨æãã¾ãã
ãã£ããå¤å®ãã¦ããã¾ãããã
ãä»äºç²ãããã¯ãããã«ãã¬ãã£ãã§ãããï¼ç¬ï¼
æ³å®ã©ããã®çµæã§å®å¿ãã¾ããã
ã§ã¯æå¾ã«æå³ã®ãªãæç« ãå
¥åãããã©ããªãã§ããããã
ææ
ãèªã¿åããªã㨠Flask ãã positive = 0 , negative = 0 ãè¿ã£ã¦ããã®ã§ãã¥ã¼ãã©ã«ã«ãªãã¯ãã§ãã
ã»ãã»ããµããµãã¨å
¥åãã¦å¤å®ãã¿ã³ãæ¼ãã¦ã¿ã¾ãã
ãã¯ãææ
ãèªã¿åãããã¥ã¼ãã©ã«ãªæç« ã¨å¤å®ããã¾ããã
ãã®ããã« Spring Boot ã§æ§ç¯ãããµã¼ãã¹ã®å¦çã®ä¸é¨ã API çµç±ã§ Python ã§æ§ç¯ãããµã¼ãã¹ã«æ¸¡ããã¨ã§ Spring Boot ã§èªç¶è¨èªå¦çã®ã¢ããªã±ã¼ã·ã§ã³ãæ§ç¯ãããã¨ãå¯è½ã«ãªãã¾ãã
ãããã«
ä»å㯠Javaï¼Spring Bootï¼ã¨ Pythonï¼Flaskï¼ãçµã¿åããã¦ç°¡æçãªãã¤ã¯ããµã¼ãã¹ã¢ã¼ããã¯ãã£ãæ§ç¯ãã¦ã¿ã¾ããã
ã³ã³ããã¼ã©å´ã«ã«ã¼ãã£ã³ã°ãè¡ãã¡ã½ããã追å ããã³ã³ããã¼ã©ããã®ãªã¯ã¨ã¹ããåãåããµã¼ãã¹ã¢ã¸ã¥ã¼ã«ãæ°ãã«è¿½å ãããã¨ã§ç°¡åã«æ©è½ã®è¿½å ãå¯è½ã§ãã
å®éã«å®è£
ãã¦ã¿ã¦ãã¦ã¼ã¶ããã®ãªã¯ã¨ã¹ãã®å¦ç㯠Java ã§è¡ããä»ã®è¨èªï¼ãµã¼ãã¹ï¼ã®æ¹ã徿ãªå¦çã¯ãã¡ãã«ä»»ããã¨ãã£ãæ§æãåããã®ã§æè»ãªæè¡é¸å®ã®ãããããæãã¾ããã
ã¾ããªã«ãèå³ãæ¹§ããæè¡ãããã°ããã°ã«æ¸ããããªã¨æãã¾ãã