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


Blog の 関連記事表示を実装したいなと思い始めて、
手始めに、markdown 形式の、ファイルからテキスト部のみ抽出する方法を調べていたのですが、
waylan/Python-Markdown: A Python implementation of John Gruber’s Markdown.
などの、markdown ライブラリは、直接テキストを抽出するメソッド等はないみたいで、
BeautifulSoup を使って、HTMLを一旦経由して変換する記事を見つけました。
parsing - Python : How to convert markdown formatted text to text - Stack Overflow

実際実装してみたのですが、
使っている python2.7Python 3.5.1 で微妙に書き方や、
ライブラリが違ったので、記載しておきます。

  • python2.7 BeautifulSoupmarkdowncodecsHTMLParser
    を使って以下のように実装できました。
    HTMLParserは、markdownのテキスト内に、HTMLが含まれると、
    エスケープされてしまってたので、その戻しに使用しています。
from BeautifulSoup import BeautifulSoup
from markdown import markdown
import codecs
import HTMLParser 

f = codecs.open('your.md,'r','utf-8')
source = f.read()
html = markdown(source)
text = ''.join(BeautifulSoup(html).findAll(text=True))
htmlParser = HTMLParser.HTMLParser()
unescaped_text = htmlParser.unescape(text)
print unescaped_text
  • python3 bs4markdowncodecs、 を使って以下のように実装できました。
    理由は定かではないですが、bs4だと、markdownテキスト内のHTMLは、
    エスケープされなかったので、unescape は、実施しませんでした。
from bs4 import BeautifulSoup
from markdown import markdown
import codecs

f = codecs.open('your.md','r','utf-8')
source = f.read()
html = markdown(source)
text = ''.join(BeautifulSoup(html, 'html.parser').findAll(text=True))
print(text)

関連記事表示の第一段階目の実装はできそうです。
解析の前提のとこですかね。
以上です。

コメント