- 영문으로 MBTI별 특징이 정리된 데이터를 찾아 한국어로 번역하여 모델을 생성했습니다.
- 이를 문장의 형태소 단위로 잘라 입력받은 문장을 통해 유사도를 도출하는 함수를 생성했습니다.
- 플라스크를 사용하여 API를 구축하고 리액트를 사용하여 API를 연결해 웹으로 서비스를 제공했습니다.
먼저 kaggle.com에서 MBTI별 특징이 정리되어있는 csv를 찾아 해당 데이터를 이용하자고 생각했습니다.
해당 데이터에는 두 가지의 문제점이 있었습니다.
이런 문제점을 데이터 학습을 통해 모델을 구축할 때 다음과 같이 해결하기로 결정했습니다.
for index, mbti in tqdm(mbti_list.iterrows()):
key = mbti['type']
content = mbti['posts']
translated_content = translator.translate(content, src="en", dest="ko")
mbti_dict[key] += translated_content.text
이렇게 되면 밑과 유사한 구조의 학습된 데이터를 얻을 수 있습니다.
{
"ISTJ": "직관 시작 편향 넌센스 시작 요구 직관 스마트 오만한 보험 직관적인 직관적 문제 이해 추상적인",
"ISFJ": "...",
...
}
이 데이터를 기준으로 문장의 형태소를 잘라 비교해주는 함수를 정의했습니다.
def calculate_similarity(sentence, mbti_data):
sentence = sentence.lower()
similarities = {}
for mbti, traits in mbti_data.items():
mbti_traits = traits.lower()
matching_words = sum(word in sentence for word in mbti_traits.split())
similarity_percentage = (matching_words / len(mbti_traits.split())) * 100
similarities[mbti] = similarity_percentage
return similarities
서비스를 웹 어플리케이션으로 제공하기 위해 플라스크를 사용하여 API를 구축했습니다.
app = Flask(__name__)
CORS(app)
run_with_ngrok(app)
@app.route("/mbti", methods=['POST'])
def home():
content = request.json['content']
similarities = calculate_similarity(content, mbti_dict)
response_data = {}
for mbti, percentage in similarities.items():
response_data[mbti] = percentage**3
return jsonify({"mbti": response_data})
app.run()
클라이언트 단에서 리액트와 tailwindcss, Jotai, TypeScript를 사용하여 API를 연결하고 서비스 레이아웃을 구성했습니다.
유튜브에서 확인하실 수 있습니다! 바로가기
학교에서 데이터 분석 수업시간 때 수행평가로 토이 프로젝트를 만들어와야했는데,
아이디어를 구상하는 데에 시간을 다 쓰다보니 급하게 만들었던 서비스입니다.
그런데 선생님께서 매우 긍정적으로 해당 프로젝트를 봐주셔서
별 건 없지만 짧게나마 회고를 해보았습니다.
다음에도 시간이 된다면 데이터 분석을 이용해서 재미있는 사이트를 만들어볼 것 같습니다!
긴 글 읽어주셔서 감사합니다! 항상 화이팅입니다~~
배포해주세요잉