Skip to content

Commit

Permalink
Merge pull request #8 from ALL-TOPIKMate/testing
Browse files Browse the repository at this point in the history
Testing branch merged
  • Loading branch information
yujin37 authored Oct 31, 2023
2 parents 71664e6 + 9c7f313 commit b365b15
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 35 deletions.
69 changes: 35 additions & 34 deletions Model/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def index():
return render_template('./index.html')

#문장 유사도
vectorizer = TfidfVectorizer(min_df = 1, decode_error = 'ignore')
vectorizer = TfidfVectorizer(min_df = 1, decode_error = 'ignore', analyzer='word', sublinear_tf=True)

def sentence_token(contents):
contents_tokens = list()
Expand Down Expand Up @@ -68,20 +68,19 @@ def dist_raw(v1,v2):
return sp.linalg.norm(delta.toarray())

def check_distance(X, new_post_vec, contents):
best_dist = 65535
best_i = None
result = []
for i, post_vec in enumerate(new_post_vec):
d = dist_raw(X, post_vec)
#print('== Post %i with dist = %.2f : %s' %(i,d, contents[0]))
if d < best_dist:
best_dist = d
best_i = i
result = [contents[0]]
elif d == best_dist:
result.append(contents[0])
best_dist = 65535
best_i = None
result = []
for i, post_vec in enumerate(new_post_vec):
d = dist_raw(X, post_vec)
if d < best_dist:
best_dist = d
best_i = i
result = [contents[i]]
elif d == best_dist:
result.append(contents[i])

return best_i, best_dist, result
return best_i, best_dist, result

def similarity(contents, new_post):

Expand Down Expand Up @@ -193,34 +192,32 @@ def Express(sentence):
return response

#51번, 52번
def ExpressShort(q_num, sentence, answer):
cnt = 0
def ExpressShort(sentence, answer):
cnt_Result = []
#print(sentence[:], answer[:])
if q_num == 51:
for i in range(len(answer)):
cnt = 0
sen = (komoran.get_plain_text(sentence[0]).split(' '))
sen2 = (komoran.get_plain_text(answer[0]).split(' '))

for i in range(len(sen)):
temp = sen[i].split('/')
sen[i] = temp
temp = sen[i].split('/')
sen[i] = temp
for i in range(len(sen2)):
temp = sen2[i].split('/')
sen2[i] = temp
if sen[-1][1] == sen2[-1][1]:
temp = sen2[i].split('/')
sen2[i] = temp
if sen[-1][1] == sen2[-1][1] and sen[-1][0] == sen2[-1][0]: #모든 값이 같은 경우
#print('동일', sen[-1][1], sen2[-1][1])
cnt+=1
cnt=1
elif sen[-1][1] == sen2[-1][1]: #문법 종류는 맞으나 완전히 답안이 같지 않은 경우
cnt = 0.5
else:
#print('비동일', sen[-1][1], sen2[-1][1])
pass
cnt = 0
cnt_Result.append(cnt)

elif q_num == 52:
check = (komoran.get_plain_text(sentence[0][:]).split(' '))
for i in range(len(check)):
temp = check[i].split('/')
check[i] = temp
for i in range(len(check)): #-ㅂ/ 습니다, -아/-어요
if check[i][0].endswith('ㄴ다') or check[i][0].endswith('다') or check[i][0].endswith('는다') :
cnt+=1
result = '문장 끝 표현 ' + str(cnt) + '회 사용'

result = '문장 끝 표현 ' + str(max(cnt_Result)) + '회 사용'

response = {"표현 검사" : result , "점수" : cnt}
return response
Expand All @@ -229,6 +226,8 @@ def ExpressShort(q_num, sentence, answer):
def calculate_score53(sim, sp, le, ex):
#53번 기준 30점
#유사도 20점, 맞춤법 5점, 글자 수 2점, 표현 점수 3점
if sim > 1:
sim = 1
if sp == 0:
sp_score = 5
else:
Expand All @@ -242,6 +241,8 @@ def calculate_score53(sim, sp, le, ex):
result = round(20 - sim*20,2) + sp_score + le + ex_score
return result
def calculate_score(num, sim, sp, ex):
if sim > 1:
sim = 1
#51번
if num == 51:
#print('51번 채점중')
Expand Down Expand Up @@ -289,7 +290,7 @@ def get_score():
len_score = length['점수']#글자수
len_message = length['글자 수 검사']
elif quest_num <= 52:
expressto = ExpressShort(quest_num, contents, answer)
expressto = ExpressShort(contents, answer)
#similar_data = similar.json()
if '에러' in similar:
s_score = 1
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": "문제와 제시문이 주어지면 사용자 답안을 예시 답안과 비교하여 잘한 점과 부족한 점에 대해 채점해주는 한국어 교사. 만점은 45점 기준이다. 글자 지적은 하지 않는다. 답변 형식은 JSON 형식으로 제공한다. Score, Good_Points, Weak_Points로 구성된다."
"content": "너는 TOPIK(외국인 및 재외국민을 대상으로 하는 한국어 능력 시험)을 가르치는 선생님이야. 문제와 제시문, 그리고 예시 답안이 주어질거야. 사용자 답안이 문제와 제시문의 내용에 맞게 잘 작성되었는지 채점해줘. 글자 수에 대한 지적은 하지마. 예시 답안은 문제와 제시문에 대한 답변 예시라고 생각해줘. 답안은 JSON 형태로 구성되어야하고 점수(45점이 최고점), Good Points, Weak Point로 구성되어야 해."
}]
message_info.append({"role":"user","content":user_content})

Expand Down

0 comments on commit b365b15

Please sign in to comment.