.md 파일을 Scrapbox 형식으로 변환하는 스크립트를 파이썬으로 만들었습니다.

소개


  • Qiita에 투고할 때는 자주 마크다운으로 로컬에 초안하고 있습니다.
  • 논문 요약을 마크 다운으로 기록하는 용도를 가정합니다.


  • Scrapbox 가시적이고 메모하기 쉽고 링크하기 쉽기 때문에 메모 대신 자주 사용하지만 마크 다운 형식은 지원하지 않으므로 마크 다운 파일을 scrapbox에서보기 쉬운 형식으로 변환하는 스크립트를 썼습니다.
  • python3

  • 변환할 대상



    글머리 기호



    입력.md
    * イメージキャプショニングはビジュアルシーンに対して自然言語の説明をつけるタスク
        * この分野ではここ5年でニューラルencoder-decoderが人気
            * sotaはCNNのエンコーダ,LSTM(やTransformer)のデコーダ,とattention機構で構成されている
    

    마크다운에서는 *- 로 씁니다.
    scrapbox에서는 스페이스 1문자로 들여쓰기+바렛트(검은 원 ●일) 1개분이 되므로, 스페이스에 옮겨놓을 수 있습니다.

    출력.txt
     イメージキャプショニングはビジュアルシーンに対して自然言語の説明をつけるタスク
      この分野ではここ5年でニューラルencoder-decoderが人気
       sotaはCNNのエンコーダ,LSTM(やTransformer)のデコーダ,とattention機構で構成されている
    


    scrapbox에서 이렇게 보입니다.

    대괄호[]



    입력.md
    [27]はCNN encoder, LSTM decoderからなるモデルを提案
    

    논문을 인용하는 데 사용되는 대괄호 []를 괄호 ()로 변환합니다.
    이 이유는 scrapbox에서 대괄호 []는 기사 간의 링크를 의미하기 때문입니다.

    출력.txt
    (27)はCNN encoder, LSTM decoderからなるモデルを提案
    
    

    제목



    입력.md
    ## 2. 関連研究
    
    ### 2.1. Image Captioning
    

    마크다운에서는 표제로서 h1 ~ h6까지를 # 를 복수 계속하는 것으로 표현합니다.
    scrapbox에는 제목이 없으므로 대신 굵은 글씨를 사용합니다. 굵게는 대괄호 []로 이중으로 묶습니다. [[強調したい文字列]]
    출력.txt
    [[ 2. 関連研究]]
    
    [[ 2.1. Image Captioning]]
    


    scrapbox에서 이렇게 보입니다.

    수식



    입력.md
    $f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$
    

    마크다운에서는 $数式$ 로 1행내의 수식을 표현할 수 있습니다.
    scrapbox에서는 [$ 数式]와 같은 것을 할 수 있습니다.

    출력.txt
    [$ f_t = \sigma(W_f \cdot (h_{t-1}, x_t) + b_f)]
    


    scrapbox에서 이렇게 보입니다.

    덧붙여서 scrapbox에서는 \tag{1} 등의 수식 번호를 넣으면 1행에 멈추지 않고, 2행이 되어 버립니다. 이번에는 이것에 대응할 수 없습니다.

    굵게



    입력.md
    **強調のテスト**
    

    마크다운에서는 **強調したい文字** 등의 방법으로 굵게 표현할 수 있습니다.
    scrapbox에서는 앞에서 언급했듯이 [[強調したい文字列]]입니다.

    출력.txt
    [[強調のテスト]]
    

    소스 코드



    어리석게 restr.replace()로 문자열을 바꿉니다.
    이상한 곳이 있으면 가르쳐 주시면 도움이됩니다.

    이스케이프 \ 의 영향으로 신택스 하이라이트의 색이 사라져 버렸다・・・

    md2scrapbox.py
    
    import os
    import argparse
    import re
    
    parser = argparse.ArgumentParser()
    parser.add_argument("in_file")
    args = parser.parse_args()
    
    sentence = "" # output
    tab = "    " 
    space = " "
    bullet = "* "
    strong = r"\*\*.*\*\*.?"
    title = r"#*"
    math = r"\$[^\$]*\$"
    
    with open(args.in_file, "r") as f:
        lines = f.readlines()
    for line in lines:
    
        # blaket    
        line = line.replace("[", "(")
        line = line.replace("]", ")")
    
    
        # indentation
        for m in re.finditer(tab, line):
            line = re.sub(tab, space, line)
        line = line.replace(bullet, space, 1)
    
    
        # title
        m = re.search(title, line)
        if len(m.group()) > 0:
            line = "[[" + line[m.end():].replace("\n", "") + "]]\n"
    
    
        # math
        m = re.findall(math, line)
        if m:
            for matched in m:
                m2 = re.sub(r"^\$", "[$ ", matched)
                m2 = re.sub(r"\$$", "]", m2)
                line = line.replace(matched, m2)
            sentence += line
            continue
        else:
            # enphasis
            m = re.findall(strong, line)
            if m:
                for matched in m:
                    m2 = re.sub(r"^\*\*", "[[", matched)
                    m2 = re.sub(r"\*\*$", "]]", m2)
                    line = line.replace(matched, m2)
            sentence += line
    
    print("==========")
    print(sentence)
    
    dirname = os.path.dirname(args.in_file)
    name = os.path.basename(args.in_file)
    name, ext = os.path.splitext(name)
    name = name + "_scrapbox.txt"
    name = os.path.join(dirname, name)
    print(name)
    
    with open(name, "w") as f:
        f.write(sentence)
    
    

    사용법


    python md2scrapbox.py path/to/some_file.md
    

    변환 결과는 입력과 동일한 위치로 이름을 바꾸어 저장됩니다.
    위의 예라면 path/to/some_file_scrapbox.txt 가 됩니다.

    나머지는 완성된 문자열을 scrapbox에 붙이기만 하면 됩니다.

    좋은 웹페이지 즐겨찾기