Skip to content

Commit

Permalink
Merge pull request #9 from ALL-TOPIKMate/testing
Browse files Browse the repository at this point in the history
Testing branch Merge End
  • Loading branch information
yujin37 authored Nov 9, 2023
2 parents b365b15 + 1985006 commit df758c0
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 16 deletions.
40 changes: 25 additions & 15 deletions Model/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import json
import re
from gpt_response import gpt_response
from lsa_Similar import lsa_Similar
from flask_cors import CORS
app = Flask(__name__) #상태 알아보기2
cors = CORS(app, resources={r"*": {"origins": "https://port-0-docker-essay-score-jvvy2blm7ipnj3.sel5.cloudtype.app"}})
Expand Down Expand Up @@ -76,9 +77,9 @@ def check_distance(X, new_post_vec, contents):
if d < best_dist:
best_dist = d
best_i = i
result = [contents[i]]
result = [contents[0]]
elif d == best_dist:
result.append(contents[i])
result.append(contents[0])

return best_i, best_dist, result

Expand Down Expand Up @@ -159,16 +160,23 @@ def countCheck(quest_num, answer):
if len(answer) > int(max_length):
#print('글자 수가 초과되었습니다.')
result = str(len(answer))+ '자. 글자 수가 초과되었습니다.'
score = 1
if quest_num == 53:
score = 1
else:
score = 2.5
elif len(answer) < int(min_length):
#print('글자 수가 부족합니다.')
result = str(len(answer))+ '자. 글자 수가 부족합니다.'
score = 0
else:
#print('글자 수가 적당합니다')
result = str(len(answer))+ '자. 글자 수가 적당합니다'
score = 2
if quest_num == 53:
score = 2
else:
score = 5
response = {'글자 수 검사' : result, '점수' : score}
print('확인', score)
return response

#53번 표현 가점, 감점
Expand All @@ -187,7 +195,9 @@ def Express(sentence):
pattern = re.compile(r'지만|는데 반해|와 달리|과 달리')
matches = re.findall(pattern, sentence[0])
result = '문장 끝 표현 ' + str(cnt) + '회, 대조표현 사용 ' + str(len(matches)) + '회 사용함.'
result_cnt = cnt*0.5 + len(matches)
result_cnt = -1 * cnt + len(matches)
if result_cnt < 0:
result_cnt = 0
response = {"표현 검사" : result , "점수" : result_cnt}
return response

Expand Down Expand Up @@ -225,20 +235,19 @@ def ExpressShort(sentence, answer):
#점수 계산 함수
def calculate_score53(sim, sp, le, ex):
#53번 기준 30점
#유사도 20점, 맞춤법 5점, 글자 수 2점, 표현 점수 3점
#유사도 22점, 맞춤법 5점, 글자 수 2점, 표현 점수 1점
if sim > 1:
sim = 1
if sp == 0:
sp_score = 5
else:
sp_score = round(5/sp,2)
sp_score = 5 - (0.2 * sp)
if sp_score < 0:
sp_score = 0
if ex >= 3:
ex_score = 3
elif ex> 0:
ex_score = 1
elif ex> 0:
ex_score = 0.5
else:
ex_score = 0
result = round(20 - sim*20,2) + sp_score + le + ex_score
result = round(22*(1-sim),2) + sp_score + le + ex_score
return result
def calculate_score(num, sim, sp, ex):
if sim > 1:
Expand Down Expand Up @@ -277,19 +286,19 @@ def get_score():
response = {'result_score': 0, 's_message': '빈 문자열이라 유사도 검사가 되지 않았습니다.', 'sp_message': '빈 문자열이라 맞춤법 검사가 되지 않았습니다.', 'len_message': '빈 문자열이라 글자 수 검사가 되지 않았습니다.', 'ex_message': '빈 문자열이라 표현 검사가 되지 않았습니다.'}
return jsonify(response)
else:
#사용자 답안과 , 실제 답안 content, answer
similar = similarity(contents, answer)
#사용자 답안 content
spell = pusan_univ_spell(contents)

if quest_num == 53:
#문제와 사용자 답안 question
similar = lsa_Similar(contents, answer)
length = countCheck(quest_num, contents)
#사용자 답안 content
expressto = Express(contents)
len_score = length['점수']#글자수
len_message = length['글자 수 검사']
elif quest_num <= 52:
similar = similarity(contents, answer)
expressto = ExpressShort(contents, answer)
#similar_data = similar.json()
if '에러' in similar:
Expand Down Expand Up @@ -336,6 +345,7 @@ def get_score():
#print(question, quest_con, contents)
length = countCheck(quest_num, contents)
gpt_result = gpt_response(question[0], quest_con[0], contents[0], answer[0], length['글자 수 검사'])
gpt_result['score'] += length['점수']
response = gpt_result
return jsonify(response)

Expand Down
2 changes: 1 addition & 1 deletion Model/gpt_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def gpt_response(question, quest_content, user_answer, answer, length):
user_content = "문제: " + updated_question +"\n" + '제시문: ' + quest_content + "\n\n" + '사용자 답안: ' + user_answer +"\n"+ '예시 답안' + answer
message_info = [{
"role": "system",
"content": "너는 TOPIK(외국인 및 재외국민을 대상으로 하는 한국어 능력 시험)을 가르치는 선생님이야. 문제와 제시문, 그리고 예시 답안이 주어질거야. 사용자 답안이 문제와 제시문의 내용에 맞게 잘 작성되었는지 채점해줘. 글자 수에 대한 지적은 하지마. 예시 답안은 문제와 제시문에 대한 답변 예시라고 생각해줘. 답안은 JSON 형태로 구성되어야하고 점수(45점이 최고점), Good Points, Weak Point로 구성되어야 해."
"content": "너는 TOPIK(외국인 및 재외국민을 대상으로 하는 한국어 능력 시험)을 가르치는 선생님이야. 문제와 제시문, 그리고 예시 답안이 주어질거야. 사용자 답안이 문제와 제시문의 내용에 맞게 잘 작성되었는지 채점해줘. 글자 수에 대한 지적은 하지마. 예시 답안은 문제와 제시문에 대한 답변 예시라고 생각해줘. 답안은 JSON 형태로 구성되어야하고 45점이 최고점인 score, Good Points, Weak Point로 구성되어야 해."
}]
message_info.append({"role":"user","content":user_content})

Expand Down
32 changes: 32 additions & 0 deletions Model/lsa_Similar.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import TruncatedSVD
from sklearn.metrics.pairwise import cosine_similarity
from PyKomoran import * #형태소 분석기 변경

tfidf_vectorizer = TfidfVectorizer()
komoran = Komoran('STABLE')

def preprocess_text(text):
tokens = (komoran.get_plain_text(text)).split(' ')
words = [token.split('/')[0] for token in tokens]
return ' '.join(words)

def lsa_Similar(contents, answer):
contents_preprocessed = preprocess_text(contents[0])
answer_preprocessed = preprocess_text(answer[0])

tfidf_matrix = tfidf_vectorizer.fit_transform([contents_preprocessed, answer_preprocessed])

lsa = TruncatedSVD(n_components=2)
lsa_matrix = lsa.fit_transform(tfidf_matrix)

similarity_matrix = cosine_similarity(lsa_matrix)

response = {
'best_i': 0,
'best_dist': 1 - similarity_matrix[1][0],
'result': contents
}

return response

0 comments on commit df758c0

Please sign in to comment.