[Koala] 성능 평가용 데이터셋 크롤링

O(logn)·2023년 12월 4일

KOALA 프로젝트

목록 보기
6/9

목차

  • 시나리오
  • 구현

시나리오

수집 방법
DB에 있는 논문(이하 우리 논문)이 인용된 논문을 찾는다.
우리 논문을 인용한 부분이 어딘지 찾는다.
그 부분(이하 쿼리 문장)을 가져온다.

사용 방법
1. 쿼리 문장에서 키워드를 추출한다.
2. 추출한 키워드 유사어 5개를 찾는다.
3. 유사어 5개와 키워드를 포함한 데이터 DB에서 찾는다.
4. 임베딩 유사도 계산을 통해 상위 5개만 가져온다.
5. 정답이 있으면 성공!

구현 계획

수동
1. arXive에 article_id를 검색한다.
2. 최상단에 뜨는 논문 클릭한다.
3. citation 항목을 본다.

자동
4. 우리 논문을 cite한 부분을 찾는다.
5. DB에 추가한다.

아쉽게도 ref, cits는 크롤링을 허락하지 않기 때문에 수동으로😂ㅋㅋㅋㅋㅋㅋㅋㅋ가져올 수 밖에 없다.arxive의 크롤링 정책은 여기서 확인할 수 있다.

일단은 제대로 pdf에서 인용구문을 찾는지, 인용구문을 쿼리에 넣어 검색하는 과정은 문제 없는지 확인해볼 생각이다. 벌써 내 손으로 100개의 쿼리소스를 모았다.👏 (라벨은 두 개 뿐이지만..)

이처럼 두 개의 타겟 논문을 폴더로 만들고 그 안에는 인용 논문의 pdf 파일이 들어있다.

pdf에서는 다음의 과정을 통해 원하는 정보를 긁어올 수 있다.

  1. 레퍼런스 파트에서 우리 논문을 찾는다.
  2. 인용 번호를 확인한다.
  3. 인용 번호를 본문에서 찾는다.
  4. 해당 문장을 가져온다.

pdf에서 텍스트를 가져오는 파이썬 라이브러리가 있다. pypdf이다. aspose라는 것도 있다.

저자, 저널, 발표일자 등 추가적인 정보를 크롤링할 수 있는 방법도 찾았다.

수행 과정

현재 2개의 타겟논문에 대해 인용구절을 찾는 작업을 반자동화했다. 프로세스는 다음과 같다.
1. pdf의 text 추출
2. text내에서 타겟논문 검색(인용형식에 따라 제 1저자명을 기준으로 검색),(line 단위로 검색, 해당 단어가 포함된 줄 전체를 출력하도록)
3. 위에서 찾은 인용번호([]안에 들어가있는 번호)로 재검색
4. 3에서 나온 문장(문단이 좀 더 정확함)을 추출하여 df로 저장

수행 결과

  1. pdf에서 text를 성공적으로 추출했다. 수식은 @math형식으로 출력이되고 보통 수식에서의 스페이스바 하나가 엔터키 하나로 인식되는 현상이 있음.

  2. text내에서 타겟 논문을 성공적으로 찾은 횟수는 2회/27(총)이다. 수동으로 찾아보니 2/3에서 타겟 논문이 인용된 부분을 찾을 수 있었다.(좀 더 찾아봐야겠다..ㅎ)

  3. 2에서 찾은 2회 마저도 인용번호로 재검색은 모두 실패했다.

  4. ..

실패 원인

  1. (가설) 텍스트 인코딩 문제-> 복잡한 인코딩 가능한 Pdfminer.six라이브러리 활용
  2. (가설) 보안 설정이 적용-> 해제 권한 필요..
  3. (가설) 스캔된 PDF-> OCR기반 Pytesseract라이브러리 활용

앞으로 남은 할일

  • pdf에서 쿼리 추출(테스트용 데이터 확보하기) 틈틈이 짬짬이 해야지..🥲
  • 평가지표 구현
  • 보고서/포스터 작성
profile
聞一知十

0개의 댓글