GlassCard는 한국어 단어 및 구문을 의미론적 유사도와 품사를 고려해 비교하는 시스템입니다. Supabase와 연동하여 사용하시는 경우를 위한 간소화된 API입니다.
Base URL: http://127.0.0.1:8000/api/v1
현재 버전에서는 인증이 필요하지 않습니다.
POST /compare
의미 단어들과 사용자 입력 단어들을 비교하여 유사도를 분석합니다. 공백이 없는 콤마 구분 입력을 지원합니다 (예: "감자,고구마")
meaning(string, required): 의미 단어들 (쉼표로 구분, 공백 제거됨)user_input(string, required): 사용자 입력 단어들 (쉼표로 구분, 공백 제거됨)
감자,고구마 // 공백 없는 콤마 구분
감자, 고구마 // 공백이 있어도 자동 제거
감자 , 고구마 // 여러 공백도 자동 제거
curl -X POST "http://127.0.0.1:8000/api/v1/compare?meaning=사랑,좋아해,행복&user_input=애정,사랑하다,기쁨"성공 응답
{
"success": true,
"analysis": {
"semantic_similarity": 0.85,
"pos_matching_score": 0.8,
"synonym_score": 0.7,
"keyword_score": 0.6,
"total_score": 0.82,
"meaning_words": ["사랑", "좋아해", "행복"],
"user_words": ["애정", "사랑하다", "기쁨"],
"meaning_pos_info": {},
"user_pos_info": {}
},
"individual_comparisons": [
{
"meaning_word": "사랑",
"user_word": "애정",
"similarity_score": 0.85,
"meaning_index": 0,
"user_index": 0,
"is_exact_match": false,
"is_high_similarity": true,
"is_medium_similarity": false,
"is_low_similarity": false
},
{
"meaning_word": "좋아해",
"user_word": "사랑하다",
"similarity_score": 0.78,
"meaning_index": 1,
"user_index": 1,
"is_exact_match": false,
"is_high_similarity": true,
"is_medium_similarity": false,
"is_low_similarity": false
}
]
}에러 응답
{
"detail": "에러 메시지"
}// 단어 비교
async function compareWords(meaning, userInput) {
const response = await fetch(`http://127.0.0.1:8000/api/v1/compare?meaning=${encodeURIComponent(meaning)}&user_input=${encodeURIComponent(userInput)}`, {
method: 'POST'
});
if (!response.ok) {
throw new Error('API 요청 실패');
}
return await response.json();
}
// 사용 예시
const result = await compareWords("사랑,좋아해,행복", "애정,사랑하다,기쁨");
console.log(result.analysis.total_score); // 0.82import axios from 'axios';
const api = axios.create({
baseURL: 'http://127.0.0.1:8000/api/v1'
});
// 단어 비교
const compareWords = async (meaning, userInput) => {
const response = await api.post('/compare', null, {
params: { meaning, user_input: userInput }
});
return response.data;
};
// 사용 예시
const result = await compareWords("사랑,좋아해,행복", "애정,사랑하다,기쁨");
console.log(result.analysis.total_score); // 0.82import { createClient } from '@supabase/supabase-js';
const supabase = createClient('YOUR_SUPABASE_URL', 'YOUR_SUPABASE_ANON_KEY');
// 1. 사용자 입력을 받아서 API 호출
async function analyzeUserInput(userInput) {
// 의미 단어들을 Supabase에서 가져오기
const { data: meaningWords } = await supabase
.from('meaning_words')
.select('word, meaning');
// 의미 단어들을 쉼표로 구분하여 문자열로 만들기
const meaningString = meaningWords.map(item => item.word).join(',');
// GlassCard API 호출
const result = await compareWords(meaningString, userInput);
// 결과를 Supabase에 저장
const { data, error } = await supabase
.from('analysis_results')
.insert({
user_input: userInput,
meaning_words: meaningString,
total_score: result.analysis.total_score,
best_matches: result.analysis.best_matches
});
return result;
}semantic_similarity: 의미론적 유사도 점수 (0~1)pos_matching_score: 품사 매칭 점수 (0~1)synonym_score: 동의어 확장 점수 (0~1)keyword_score: 키워드 매칭 점수 (0~1)total_score: 종합 점수 (0~1)meaning_words: 의미 단어 배열user_words: 사용자 입력 단어 배열meaning_pos_info: 의미 단어들의 품사 정보user_pos_info: 사용자 입력 단어들의 품사 정보
각 단어 쌍의 개별 비교 결과를 유사도 순으로 정렬하여 제공합니다.
meaning_word: 의미 단어user_word: 사용자 입력 단어similarity_score: 두 단어 간 유사도 점수 (0~1)meaning_index: 의미 단어의 인덱스user_index: 사용자 단어의 인덱스is_exact_match: 정확한 일치 여부is_high_similarity: 높은 유사도 여부 (>0.7)is_medium_similarity: 중간 유사도 여부 (0.4~0.7)is_low_similarity: 낮은 유사도 여부 (<0.4)
- URL 인코딩: 한글 텍스트는 반드시 URL 인코딩을 해야 합니다.
- 쉼표 구분: 여러 단어는 쉼표로 구분하여 전달합니다. 공백은 자동으로 제거됩니다.
- 개별 비교:
individual_comparisons배열에서 각 단어 쌍의 상세한 비교 결과를 확인할 수 있습니다. - 서버 상태: 서버가 시작되지 않은 경우 500 에러가 발생할 수 있습니다.
- 모델 로딩: 첫 요청 시 sentence-transformers 모델 로딩으로 인해 지연이 발생할 수 있습니다.
API 테스트는 FastAPI 자동 생성 문서를 사용할 수 있습니다:
- Swagger UI:
http://127.0.0.1:8000/docs - ReDoc:
http://127.0.0.1:8000/redoc
- 단어장 관리: Supabase 테이블에서 의미 단어들을 관리
- 결과 저장: 분석 결과를 Supabase에 저장하여 히스토리 관리
- 실시간 업데이트: Supabase Realtime을 사용하여 실시간 결과 표시
- 사용자 인증: Supabase Auth를 사용하여 사용자별 분석 결과 관리