300x250

석사 생활을 시작하고 논문을 하나 둘 읽어보다 보니,(사실 읽은 것보다 읽어 볼 것만 산더미처럼 쌓였지만..) 학회 별로, 중요도 별로, 주제 별로 따로따로 나누어 정리해서 관리해보고 싶다는 생각이 들었다. 단순히 폴더를 만드는 것만으로는 한계가 있어서, 다른 방법을 찾아보았다.

그러던 중, 우연히 논문의 reference를 관리하여 논문을 쓰는 단계에서 유용하게 사용하는 jabref라는 프로그램을 알게 되었다. BibTeX 포맷을 사용해서 reference를 관리하는데, 한 번 사용해보니 BibTex를 그대로 복붙하면 표 형식으로 논문 관련 정보를 정리해 주고, 논문 파일을 첨부할 수도 있어서 아주 편했다.

여기서 조금 더 나아가서, 평소 공부, 연구할 때 유용하게 사용하던 notion에 이런 기능을 붙이면 너무 좋겠다고 생각했다.

만약 JabRef에서처럼 BibTex를 입력해줬을 때 notion의 database에 바로바로 추가만 된다면, 추가 property를 사용하여 학회 별로, 주제 별로, 읽었는지 안읽었는지 등을 구분지어 깔끔하게 정리할 수 있을 것 같았기 때문이다. 평소에 논문 내용을 정리하거나 파일을 첨부해주어서 관리하기도 했으므로 노션 하나에서 논문 관리의 모든 기능을 해줄 수 있을 것이라 생각했다.

 

 

 

목차

     

     

     

     

     

     

    Python으로 노션 데이터베이스 다루기

     

    구글링해본 결과, 어떤 고마운 분께서 python과 notion을 이용하여 reference management solution인 'notion-scholar'를 제공해주고 계셨다.

    https://github.com/thomashirtz/notion-scholar

     

    GitHub - thomashirtz/notion-scholar: Reference management solution using Python and Notion.

    Reference management solution using Python and Notion. - GitHub - thomashirtz/notion-scholar: Reference management solution using Python and Notion.

    github.com

     

    여기서 제공하는 설치 방법과 사용 방법을 익혀보고, 나에게 맞게 수정하는 과정까지 담아보려 한다. (글에 포함되지 않은 자세한 내용은 위 링크를 참조하자.)

     

     

     

     

    Installation

     

    먼저, 로컬 환경의 터미널에서 pip로 application을 설치한다.

    pip install git+https://github.com/thomashirtz/notion-scholar#egg=notion-scholar

     

    간단하게 사용하기 위해서 가상환경 없이 base에 바로 다운받았다.

     

    이제 'notion-scholar' 혹은 'ns'로 application을 호출하여 사용할 수 있다.

     

     

     

     

    Notion Setting

     

    이제 노션에서 새로운 데이터베이스를 생성한다. 개발자분이 notion page도 공유해주셔서, 이 페이지를 duplicate하여 사용하는 게 가장 편하다.

    나는 연습해볼 겸 test라는 database를 생성하여 property는 다음과 같이 구성했다. (코드에서 대소문자를 구분하여 각 property에 값을 할당해주므로, 대소문자까지 똑같지 않으면 추가되지 않으니까 아래 속성들은 꼭 똑같이 작성해주자!)

    • Title (Title)
    • Authors (Text)
    • Year (Number)
    • Journal (Text)
    • Filename (Text)
    • URL (URL)
    • Abstract (Text)
    • DOI (Text)
    • Type (Select)
    • Bibtex (Text)
    • Inbox (Checkbox)

     

    본인이 원하는 속성을 추가하여 커스터마이징할 수 있다. (굳이 볼 필요 없는 부분은 hide 처리해주면 된다.)

     

    다음으로, notion developers 링크에서 database에 대한 integration을 생성해준다. (Read content, Update Content, Insert Content에 체크해주어야 한다.)

     

    Create Integration

     

    만든 후에는 상단에 Internal Integration Token이 생성된다. 그 후에 database를 integration과 연결해준다.

    Database에서 오른쪽 상단의 '\(\cdots\) → Add connections'를 클릭하고, 방금 만든 integration을 고른다.

     

     

    다음으로, token과 database_id를 세팅한다.

    처음에 사용할 때에는 아래와 같이 터미널에 입력하여 configuration file을 생성해준다.

     

    ns set-config -t [token] -db [database_id]

     

    [token]부분에는 아까 생성한 Internal Integration Token을 복붙해준다.

    [database_id]에는 database의 우측 상단의 'share'에서 share to web을 활성화한 후, copy web link를 클릭하여 붙여넣어 보면, 다음과 같은 형식일 것이다.

    https://www.notion.so/[workspace_name]/[database_id]?v=[view_id]

    여기서, database_id 부분을 넣어주자.

     

    이제 터미널에서 python을 통해 database를 관리할 수 있게 되었다!

     

     

     

     

    사용 방법

     

    사용 방법은 두가지이다. 터미널에서 명령어만 입력해주면 된다. 논문을 검색했을 때, BibTex를 제공하는 방식은 .bib 파일을 제공하거나, text 형태로 제공한다.

    먼저, '.bib'라는 파일(BibTeX 포맷의 파일)의 경로를 입력하여 database에 추가해주는 방법은 아래와 같다.

    ns run -f [bib_file_path]

     

    그리고, BibTeX의 text를 복붙하여 추가해주는 방법은 아래와 같다.

    ns run -s """[bib-string]"""

     

    3D scene graph관련 논문의 bibtex로 database에 한 번 등록해보자.

     

     

    string 형식으로 주어지므로, 전체를 복사하여 아래와 같이 입력해준다.

    ns run -s """@InProceedings{Armeni_2019_ICCV,
    author = {Armeni, Iro and He, Zhi-Yang and Gwak, JunYoung and Zamir, Amir R. and Fischer, Martin and Malik, Jitendra and Savarese, Silvio},
    title = {3D Scene Graph: A Structure for Unified Semantics, 3D Space, and Camera},
    booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
    month = {October},
    year = {2019}
    }"""

     

    결과는 다음과 같다. 굳이 볼 필요 없는 Filename, Bibtex, DOI 등은 숨겼다.

     

    Result

     

     

     

     

     

     

     

    Customizing

     

    이제 내가 보고싶은 대로 논문 리스트를 변환하는 과정을 알아보자.

    위에서 언급했듯, 개발자분께서 쓰는 페이지를 사용하면 편하게 정리해볼 수 있다.

    https://thomashirtz.notion.site/Bibliography-68cfc13ff00f423787470214fd1d688f

     

    Bibliography

    Inbox

    thomashirtz.notion.site

     

    duplicate하여 본인 notion에 받은 후, 위와 같은 setting을 진행해주면 금방 적용할 수 있을 것이다.

     

     

    좀 더 추가하자면, 본인만의 기준, 예를 들면 'Conference'별로 나누어서 보고싶다면, 다음과 같이 진행한다.

    먼저 'Databases'의 'Category DB'를 복제하여, 'Conference/Journal DB'로 변경한다.

    그 후, 아래와 같이 'relation' 속성을 해당 DB로 추가한다.

     

    그리고 Conference/Journal DB에서 원하는 학회나 저널을 추가해준다.

     

     

    이제 Conference 기준으로 보려면, 'By category' 부분 전체를 duplicate한 다음, table의 ...을 클릭하여 Group → Grpy by를 'Conference/Journal'으로 선택한다.

     

     

     

    이후 sort 방식 등은 각자 입맛대로 설정하자.

     

     

     

     

    Example

     

    내가 사용중인 'Papers'라는 노션 페이지 예시는 다음과 같다. (아래 링크에서 duplicate하여 본인 notion에서 사용 가능하다.)

    https://raypark.notion.site/Papers-Template-498d1b8e20414e17a03db7bce5a56095

     

    Example

     

    Inbox는 BibTeX로(또는 직접 입력해서) 새로운 논문 목록을 추가하는 곳이며, Publication DB에 포함된 논문들을 조건에 따라 다음과 같이 분류하여 관리할 수 있다.

    • By status : 읽는 중인 논문 / 읽을 논문 / 읽은 논문 / 훑어보기만 한 논문
    • By category : 논문 주제별로 정리
    • By conference : 학회/저널별로 정리

     

    'Databases'에서 새로운 DB를 추가하여 자신만의 조건을 만들어줄 수도 있다.

     

    예시로 논문 하나를 추가해보자.

    먼저 google scholar에서 논문을 찾는다.

     

    Finding Paper

     

    학회/저널마다 BibTeX를 찾는 방법이 다른데, 대부분 어렵지 않게 찾아볼 수 있을 것이다. 위 논문은 ACM 학회에 제출된 논문으로, 다음과 같이 BibTeX를 찾아볼 수 있다.

     

    Finding BibTeX

     

    아래와 같은 BibTeX 구문을 복사하여 터미널에 입력한다. (보통 bib파일을 다운받는 것보다 복붙이 편하다.)

    가끔 abstract가 너무 길어서 BibTeX 입력이 안되는 경우가 있는데, 그땐 abstract 부분을 지우고 추가한 후에 notion database에서 따로 abstract만 추가해주면 된다.

     

    Copying BibTeX and paste it to the terminal

    ns run -s """@article{10.1145/3503250,
    author = {Mildenhall, Ben and Srinivasan, Pratul P. and Tancik, Matthew and Barron, Jonathan T. and Ramamoorthi, Ravi and Ng, Ren},
    title = {NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis},
    year = {2021},
    issue_date = {January 2022},
    publisher = {Association for Computing Machinery},
    address = {New York, NY, USA},
    volume = {65},
    number = {1},
    issn = {0001-0782},
    url = {https://doi.org/10.1145/3503250},
    doi = {10.1145/3503250},
    abstract = {We present a method that achieves state-of-the-art results for synthesizing novel views of complex scenes by optimizing an underlying continuous volumetric scene function using a sparse set of input views. Our algorithm represents a scene using a fully connected (nonconvolutional) deep network, whose input is a single continuous 5D coordinate (spatial location (x, y, z) and viewing direction (θ, ϕ)) and whose output is the volume density and view-dependent emitted radiance at that spatial location. We synthesize views by querying 5D coordinates along camera rays and use classic volume rendering techniques to project the output colors and densities into an image. Because volume rendering is naturally differentiable, the only input required to optimize our representation is a set of images with known camera poses. We describe how to effectively optimize neural radiance fields to render photorealistic novel views of scenes with complicated geometry and appearance, and demonstrate results that outperform prior work on neural rendering and view synthesis.},
    journal = {Commun. ACM},
    month = {dec},
    pages = {99–106},
    numpages = {8}
    }"""

     

    Result

     

    위와 같은 결과가 뜨면 노션에 다음과 같이 자동으로 추가된다. (숨겨놓았지만, BibTeX, Abstract 등의 정보가 다 입력되어 있다.)

     

    Result on Notion

     

    이제 개인 기준에 맞춰 category, conference, pdf파일 첨부 등을 해준다.

     

    Result on Notion (2)

     

    마지막으로 status를 'to read'로 바꾸면 Inbox에서 사라지고, 원하는 분류에서 볼 수 있게 된다. (읽을 논문 하나 추가요 ...)

     

     

    728x90
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기