티스토리 뷰

반응형

2018/01/29 - [프로젝트] - [Python] 법률 용어 학습 어플리케이션 Part. 1


제작 과정 



  • 법전 구한 뒤, 법률 용어 사전을 만들고 DB 구축해서 어플리케이션을 만드는 아주 간단한 구조 입니다.


Step. 01 법전 구하기 



  • 법전을 먼저 구해야 합니다. 변호사 시험이 헌법, 형법, 민법, 상법, 형소, 민소 로 6개로 이루어져 있기 때문에 이 6가지 법전을 한자버전으로 구합니다.

  • 국가 법령 정보센터 사이트에 접속하면 어렵지 않게 hwp 파일들을 구할 수 있습니다.



Step. 02-1 한자사전 만들기 


  • 일단 한자사전을 만드는 과정이 있어야합니다. 한자사전은 naver 한자사전에서 크롤링 하여 각 단어들의 뜻을 찾는 방법으로 만들어볼 예정입니다.

  • 과정은 다음과 같습니다. 가장 먼저 한자로 구성된 법문 중 한자만 저장합니다. 동시에 몇번 나왔는지도 같이 저장합니다.

  • 이후 이를 가지고 네어버 사전에서 음과 훈을 찾아 딕셔너리형에 저장해줍니다.

  • dic3 까지 만들어 줬다면 dic의 출현 빈도와 합쳐 txt 파일(한자사전) 을 만들어 줍니다.

Step. 02-2 한자사전 만들기

  • Step. 02-1 에서 글자별 한자사전을 만들었다면 이제 정말 필요한 단어별, 법전별 한자사전을 만들어 줍니다.

  • 법전을 한자를 제외한 나머지 문자들을 빈칸으로 변경한 뒤 빈칸을 기준으로 Split 하여 리스트를 만들어 줍니다.

  • 만든 리스트를 기반으로 글자별 한자사전에서 찾아 한글단어로 변환합니다. 이때 한 글자에 여러개의 음이 있는 한자의 경우를 고려해주어야 합니다. 일단 맨 앞에 있는 음으로 치환해줍니다.

  • Step 2 까지 거치고나면 한자사전 txt 를 포함하여 단어별, 법별 문서 6개가 만들어져 있을 것입니다. 문서들은 chi, kor, cnt 3개의 열로 이루어져 있습니다.



Step. 03 - DB 연동하기 

  • DB 를 연동해야 하는 이유는 어플리케이션의 모의고사와 오답노트 기능 때문 입니다. 물론 sql 이 아닌 txt 파일 형태로 저장하여 매번 불러오는 것도 가능할 수 있지만 효율이 떨어지는 것이 사실이며 외부 접근이 쉽다는 점 또한 단점으로 작용합니다.



  • SQL DB 에는 law_word_all 이라는 사전 table 과 userdb 라는 시험 결과 저장 table 두가지를 정의해줍니다.

  • step 03 에서는 step 02 에서 만든 한자사전을 db 로 옮기는 과정입니다.

  • sqlite3 을 이용했고 law_word_all 테이블은 kor, chi, cnt, lawtype 총 4개의 열로 구성하였습니다.



Step. 04 - Python 어플리케이션 만들기 



  • 어플리케이션에 필요한 메뉴는 크게 3가지로 구분할 수 있습니다. 단어별, 법전별 학습 기능, 모의 테스트 기능, 오답노트 기능 입니다.



  • 이를 위한 주요 변수와 메소드는 다음과 같습니다. 각 기능에 따라 메소드를 달리 구성하였다는 것을 알 수 있습니다.

  • 메뉴는 도식과 같이 구성하였고 저 흐름대로 프로그램을 작성하였습니다.

  • 첫 메소드인 메뉴 선택은 가장 많이 사용되는 메소드 입니다. 어떤 기능을 선택할지, 각 메뉴에서는 어떤 기능을 실행시킬지 정하는 메소드 이기 때문에 메뉴 항목을 변수로 설정하고 그것을 출력하는 함수 입니다. 

  • 이 과정에서 정해진 범위의 숫자가 아닌 것을 입력 받았을 경우에는 오류를 출력해주는 에러 처리를 해주었습니다.

  • 두 번째 메소드는 sql 쿼리를 만들어주는 메소드 입니다. 모든 메뉴가 sql 과 연동되어 있기 때문에 sql 쿼리를 만들어 주는 기능 또한 모든 메뉴에서 사용됩니다. table_name과 메뉴를 파라메터로 설정하여 각 메뉴 마다 다른 쿼리를 반환할 수 있게 해줍니다.

  • 하지만 이 메소드는 단순히 sql 쿼리 문장만을 반환해줄 뿐 쿼리 실행 결과를 반환하지 않는 점을 알아 두어야 합니다.



  • sql 쿼리의 결과를 반환하는 메소드 입니다. make_sql 메소드에서 sql 문장을 받은 뒤 그것을 실행하고 결과를 반환하는 방식입니다.



  • learning 메소드는 학습하기로 하였을 때 실행하는 메소드 입니다. sql 을 통해 학습할 데이터를 가져온 뒤 learing detail 메소드를 실행시켜주는 함수 입니다. 


  • learning_detail 은 학습 메소드와 오답노트 메소드에서 실행할 수 있는 메소드 입니다. 학습과 오답노트 학습 과정이 동일하기 때문에 detail 이라는 추가 메소드로 모듈화 해주었습니다.

  • detail 메소드는 학습인지 오답노트인지 판단한 뒤 학습할 데이터를 출력해주는 기능을 수행합니다.


  • test 모의고사 메소드는 데이터를 가져오고 시험보는 기능을 수행하는 메소드 입니다.

  • 이 메소드에서 매번 보는 시험을 userdb 에 입력해주는 기능이 핵심입니다.



  • 오답노트는 userdb 에서 틀린것만 가져와 출력해주는 메소드 입니다.



Step. 05 - 배포 


  • 배포 할 경우 py 파일과 db 파일 두가지 파일만 다운 받으신다면 Python 이 설치되어 있는 어느 컴퓨터든 바로 실행이 가능합니다.



Step. 06 - 실행 영상 




보완 필요한 부분 

  • 문제 출제 부분이나 학습과정에서 보다 학습에 효율적인 알고리즘으로 구성하면 더 적은 양의 공부를 통해 최고의 학습성과를 달성하는 것이 가능하지 않을까하는 고민이 있다.

  • 학습과정의 경우 지금은 출제 빈도순으로 출력하고 있지만 모의고사 결과와 비교하여 잘 알지 못하는 것들을 알아내 우선으로 출력해주는 것이 가능하다면 더 좋을 것 같다.

  • 문제 출제의 경우 지금은 랜덤하게 출제하고 있으나 베이지안 분류기나 Knowledge Tracing 기술을 접목하여 더 효과적인 출제를 가능하게 하면 좋을 것 같다. 하지만 딥러닝 기술을 접목하기에는 데이터가 전혀 없다는 점이 문제이고 일반 머신러닝 분류기를 사용할 경우 크게 몇개의 클래스로 분류한 뒤 분류하는 것이 효과적인데 한자 학습의 경우 그 초기 분류를 어떻게 해야할지 알지 못하는 상태다.








부족한 블로그에 방문해 주셔서 감사합니다.

잘못된 부분이나 질문이 있으시면 

댓글로 말씀해주세요.


금방 확인하고 피드백 드리겠습니다.


좋은 하루 되세요. ^^


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함