pythonでmarkdownをplain textに変換し、ginzaで文章を文ごとにリスト化する

にあえん

July 19, 2023

markdownをplain textにしたうえで、その文章をginzaでリスト化しました。

必要なライブラリをインストールします。

pip install Markdown beautifulsoup4 ginza ja-ginza

以下のような実装を行いました。

from bs4 import BeautifulSoup
from markdown import markdown
import re
import spacy

def markdown_to_text(markdown_string):
    """マークダウンを平文に変換します"""

    # md -> html -> text since BeautifulSoup can extract text cleanly
    html = markdown(markdown_string)

    # remove code snippets
    html = re.sub(r'<pre>(.*?)</pre>', ' ', html)
    html = re.sub(r'<code>(.*?)</code >', ' ', html)

    # extract text
    soup = BeautifulSoup(html, "html.parser")
    text = ''.join(soup.find_all(string=True)).replace("\n", " ")

    return text

def split_sentences(text):
    nlp = spacy.load('ja_ginza')
    doc = nlp(text)
    sentences = [sent.text for sent in doc.sents]
    
    return sentences

if __name__ == "__main__":
    markdown_string = """# タイトル

## サブタイトル

これは段落です。

これは別の段落です。
    """
    text = markdown_to_text(markdown_string)
    print(text)
    sentences = split_sentences(text)
    print(sentences)

出力は以下のとおりです。

タイトル サブタイトル これは段落です。 これは別の段落です。
['タイトル サブタイトル', 'これは段落です。', 'これは別の段落です。']

タイトルのあたりがちょっと不満なので、改良の余地ありかもです。

(改良ポイントなどコメントあればぜひ!)

感想

ginzaすごい。。

参考

以下のコードを参考にしました。

python で MarkDownファイルをPlain Text に変換する | Monotalk