BIOEASY 웹사이트 : https://bioeasy.site 시연 영상 : https://youtu.be/HbJMxyUe-7M
Bio 분야를 연구하려는 모든 연구자들의 선행연구 인사이트 도출을 도와주는 웹 어플리케이션
학부연구인턴을 하며 처음으로 연구를 진행하게 되었는데, 이 과정에서 논문들을 읽는 것은 어찌저찌 할 수 있었지만 해당 논문들에서 인사이트를 도출하는 것이 매우 어려웠습니다. 인사이트 도출은 해당 논문에 대한 깊은 이해와, 그 분야의 전공 지식이 충분히 뒷받침되어야 하며 인사이트 도출에 대한 충분한 경험이 있어야 하기 때문이었습니다. 자신이 연구하려는 주제와 관련된 선행 연구 논문들을 읽고 도출한 인사이트를 통해서 본인의 연구 방향성을 잡고, 연구의 세부 내용 (사용하는 변수, 실험 방식 등)을 결정할 수 있기 때문에 인사이트 도출은 매우 중요한 단계라 할 수 있습니다. 그러나 실제로 저 뿐만이 아니라, 주위 대학원생 지인들 대부분이 연구 수행 직전의 이 인사이트 도출 단계를 어려워하고 있었습니다. 이에 ‘선행 논문들로부터 인사이트 도출을 도와주는 서비스’를 만들어야 겠다! 라는 발상을 시작으로 프로젝트를 시작하게 되었습니다.
우선 이 질문에 대한 답을 하기 전에, 저희 서비스인 BIOEASY는 “바이오”분야에 특화된 서비스라는 사실을 다시 말씀드리고 싶습니다. 저희 팀은 모든 분야에 대해 서비스를 제공하는 것에 대해서 논의해보기도 했지만, BIOEASY 사업화까지 이어나갈 계획이 있는 상황이기 때문에 경영상의 문제점을 고려해보아야 했습니다. 만약, 모든 분야에 대해 서비스를 제공할 경우, 분야 별로 마케팅 방안(신규 고객 유입 방안 등)이나 서비스 운영 상 고려해야 하는 점이 많아진다는 점에서 우선은 분야를 좁혀서 시장진입 하기로 하였습니다. 저희가 물리, 컴퓨터공학, 심리 등등… 그 많은 분야 중에서 바이오분야를 선택한 이유는 3가지 입니다. 코로나로 인해 증가하고 있는 바이오연구에 대한 관심과 실제 연구 수 계속해서 미래 유망산업으로 꼽히고 ‘바이오’ 산업 지도교수님(이화여대 박현석 교수님)의 주요연구분야(bioInformatics)와 밀접한 분야
현재 바이오 분야의 연구 시장에서 가장 규모가 크고 유저 수가 많은 논문 서치 엔진은 1) Google Scholar와 2) Pubmed NCBI 입니다. 하지만 Google Scholar와 Pubmed NCBI에서 논문을 검색하면 논문 저자, 논문 발행 연도, 논문 원문 링크 등의 정보만 제공되고 있어 선행연구로부터의 인사이트 도출을 도와주는 서비스는 부족한 상황입니다. 이에 따라 Bio 분야를 연구하려는 모든 연구자들의 선행연구 인사이트 도출을 도와주는 웹 어플리케이션, BIOEASY를 제언드립니다!
-
회원가입하지 않은 사용자의 경우에도 BIOEASY의 기본적인 논문 검색과 조회 기능, 그리고 지식그래프 조회와 세미나 기능은 사용 가능하도록 했습니다. 하지만 커뮤니티의 질문 작성 기능, 즐겨찾기 저장, 메모 기능 등은 회원에게만 제공되는 기능들입니다.
-
Knowledge Graph(지식 그래프 기능) : 검색한 논문에 대한 전체 지식 그래프를 조회할 수 있도록 해주는 기능입니다. 해당 기능을 통해 사용자의 논문에 대한 이해도롤 높이고 인사이트 도출을 돕고자하였습니다. 문장 분리와 패턴 매칭을 이용해 단어간 relation을 추출해 그래프를 생성해냈습니다.
-
Seminar Feature(세미나 기능) : 외부 개최, 혹은 BIOEASY 측에서 개최하고 진행할 바이오 분야 세미나에 대한 정보를 쉽게 얻을 수 있도록 해주는 기능입니다. 현재는 BIOEASY 자체적으로 진행하는 세미나는 없기 때문에, 외부에서 진행되는 바이오분야 세미나에 대한 정보들만 제공하고 있습니다.
-
Questions (커뮤니티 기능) : 등록된 사용자들이 논문에 대한 의견을 교환할 수 있는 커뮤니티 시스템을 구현했습니다. Computer Science 분야의 Stack overflow와 같은 공간으로, 논문 별로 질문을 작성하고 저장하면 타 사용자들 또한 해당 질문을 조회하고 그에 대한 답변을 작성할 수 있는 구조입니다.
-
Favorite / Bookmark (즐겨찾기 기능) : 등록된 사용자의 경우, 원하는 논문을 즐겨찾기 기능을 통해 따로 목록을 저장해두고 후에 일괄적으로 즐겨찾기에 등록해둔 논문들을 조회할 수 있도록 했습니다.
-
Memo (메모 기능) : 등록된 사용자의 경우 각 논문 별로 간단하게 메모를 작성하여 남겨둘 수 있는 기능을 구현했습니다. 해당 논문을 조회하고 있을 시에 이전에 작성해둔 메모들을 조회할 수 있도록 하였습니다.
개발환경은 다음과 같습니다.
전체 HTML 구성도는 아래와 같습니다.
- home.html 의 search div part 사용자의 텍스트 input을 받아 second.html로 넘겨 주는 부분입니다. views.py의 home() 함수와 연동되어 사용됩니다.
- home.html 의 Seminar div part 현재 외부에서 진행할 예정, 혹은 진행되고 있는 바이오 세미나들의 정보를 제공해줍니다. html 문법을 이용하여 하이퍼링크를 삽입하여, 곧바로 각 세미나들의 홈페이지로 이동할 수 있게 하였습니다.
- second.html의 search div part 재검색을 위해 home.html의 search div part와 유사하게 구현 된 부분입니다. 검색을 위해 이전 페이지로 넘어가야하는 것을 방지하기 위해 작성되었고, 마찬가지로 input을 입력 받아 second.html을 다시 한번 로드하도록 하였습니다.
def third(request):
data = request.GET['theid']
readerLink = 'https://www.ncbi.nlm.nih.gov/pmc/articles/' + str(data) + '/?report=reader'
posts = Post.objects.all().filter(base_id=data)
memos = Memo.objects.all().filter(pmc_id=data)
return render(request, 'third.html', {'link_toReader': readerLink, 'pmcID': data, 'posts': posts, 'memos': memos})
“second.html”에서 논문 제목을 클릭하면, 그 논문의 고유 id를 theid 라는 변수 이름으로 request를 보냅니다. “second.html”과 “third.html”을 이어주는 “third 함수”에서는, epub-reader를 연결해주는 readerLink, 논문 id로 필터링된 post오브젝트들, 논문 id로 필터링된 memo오브젝트들과, 논문 id를 third.html에 렌더링하여 보내줍니다. “third.html”에서는 epub-reader를 통해 논문 본문 내용을 읽을 수 있으며, 이 논문에 달린 포스트들을 other’s questions 탭을 통해 확인할 수 있습니다. 논문 고유의 id로 이미 필터링이 된 오브젝트들이기 때문에 추가 필터링은 필요하지 않습니다. 또한, 이 논문에 사용자가 작성한 메모를 memo탭을 통해 확인할 수 있습니다. 이때, 논문의 고유 id로 필터링이 된 모든 오브젝트들을 받았기 때문에, 사용자 user의 id와 memo의 작성자인 name의 id를 대조하는 추가적인 필터링을 합니다. 현재 로그인한 사용자의 메모 오브젝트들만 나열합니다. 사용법은 다음과 같습니다. third.html의 “Add a question” 버튼을 통해 이 논문에 대한 질문을 포스트할 수 있으며, “See knowledge Graph” 버튼을 통해 이 논문에 대한 지식그래프를 생성하고 볼 수 있습니다. “Add bookmark” 버튼을 통해 이 논문 페이지를 북마크에 추가할 수 있고, Memo 탭 안의 “add memo” 버튼을 통해 이 논문을 읽으며 여러개의 메모를 추가할 수 있습니다.
-
Knowledge Graph (show_graph.html) 사용자가 “See knowledge Graph” 버튼을 클릭하여 해당 논문에 대한 지식그래프를 요청하면, 논문의 전체 내용을 Beautiful Soup 라이브러리를 사용하여 크롤링하고, 크롤링한 문장들을 NLTK패키지의 Sentence segment (문장분리지도 모델 사용) 를 통해 CSV 파일로 만듭니다. CSV파일에서 단어별 빈도수, 한 문장 내 단어간 등장 횟수 등의 데이터를 추출하고 이 데이터를 바탕으로 NLTK의 POS tagging을 이용한 패턴매칭을 수행하여 subject(source), object(target), relation(edge)을 추출함으로써 지식그래프를 생성합니다.
-
Questions, Favorite Bookmark, Memo Questions: 모든 list 조회 (post_list.html) 조회한 논문에 대한 list 조회 (third.html) 조회한 논문에서 질문 추가하기 (add_post.html) Favorite Bookmark: 사용자의 모든 북마크 list 조회 (bookmark_list.html) 조회한 논문에서 사용자가 북마크 추가하기 (bookmark_create.html) Memo: 조회한 논문에서 사용자가 추가한 메모 list 조회 (third.html) 조회한 논문에서 사용자가 메모 추가하기 (add_memo.html)
각 북마크, 메모, 포스트 모델은 참조 베이스가 되는 논문이 존재합니다. 따라서, 논문 고유의 아이디를 attribute로 가질 수 있도록 설계했습니다. 각 모델의 url, pmc_id, base_id, base_title은 논문 고유의 id가 들어있는 attribute입니다. 질문을 포스트할 때 댓글로 달 수 있도록 하는 Comment모델은 Post모델을 외래키로 참조하고 있습니다.
- post_list.html third.html의 add_post.html을 통해 추가된 모든 사용자들의 모든 질문들이 모여있는 커뮤니티 입니다. 특별한 필터링 없이 모든 오브젝트들을 나열합니다.
- bookmark_list.html third.html의 bookmark_create.html을 통해 추가된 현재 사용자의 모든 북마크들이 모여있는 곳입니다. user의 id와 bookmark의 author의 id를 대조하여 필터링하여 오브젝트들을 나열합니다.
(2020.12) 기획했던 모든 기능을 구현 완료하였으며, 웹페이지 디자인을 완성했습니다. BIOEASY는 현재 한국 저작권 위원회에 SW 저작권을 보유한 상태이며, 특허 출원을 완료했습니다. 사업자 등록 역시 완료하여, 본격적으로 사업을 진행할 예정입니다. 인지, 공감 마케팅을 통해 더 많은 신규 회원을 유입할 수 있도록 노력하겠습니다!
구현한 웹사이트 도메인 네임 구입 및 아마존 aws를 통해 배포하기 참고 블로그
부모창과 윈도우 팝업 자식 창 간의 데이터 주고 받는 방법 참고 블로그
https://chohyeonkeun.github.io/2019/05/10/190510-django-Ajax
table 숨기기/표시 기능을 통해 페이지 이동없이 데이터 표시 방법 참고 블로그
웹페이지 디자인 참고용 포트폴리오
본 프로젝트는 한국 저작권 위원회에 등록되어 있으며, 무단 수정이나 배포 시 처벌을 받게 될 수 있음을 미리 알립니다.
고현지 [email protected] (https://blog.naver.com/nd4616/222146917764)
박기은 [email protected] (https://roehd.tistory.com/)
김유진 [email protected] (https://8yujin-kim8.tistory.com/entry/BIOEASY)