研究で必要な雑多な知識をごった煮で
プロフィール

termoshtt

Author:termoshtt
大学院生
専攻:流体物理学
Editor: vim
Language: C++,python

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/-- --:-- スポンサー広告 TB(-) CM(-)
今度こそpybtexを使ってみる。

pybtexのインストール


easy_installがつかえる:

easy_install pybtex

参考HP:
Pybtex! (公式) 開発版が利用可能
pybtex 0.16 : Python Package Index

bibtexソースの読み込み


pybtexからbibtexパーザを読み込みbibtexファイルを読みこむ

from pybtex.database.input import bibtex
parser = bibtex.Parser()
bib_data = parser.parse_file("some.bib")

bib_dataにパースした内容が含まれる。
bib_dataはentriesというbibtex keyをkeyとした辞書をメンバーにもつ。

entries = []
for key in bib_data.entries:
persons = bib_data.entries[key].persons[u'author']
authors = [unicode(au) for au in persons]

entry = { u"key" : key, u"author" : ",".join(authors)}

fields = bib_data.entries[key].fields
if u'title' in fields:
entry.update({ u"title" : fields[u'title'], })
if u'journal' in fields:
entry.update({ u"journal" : fields[u'journal'], })
if u'year' in fields:
entry.update({ u"year" : fields[u'year'], })
entries.append(entry)

辞書の各要素はさらにfield、personsなるメンバーをもつ。
タイトル、ジャーナル等の情報はfieldに含まれており、
著者の情報はpersons[u'author']に含まれる。
後者は独自のclassになっているが、unicode関数を用いて変換できるようである。
この辺の詳細はipythonを使って、逐次取得した変数を調べることで解析した。
__str__()をちゃんと実装していてくれて助かった。

HTML生成


CGIでよく用いられるtemplateエンジンjinja2を用いて上記entriesをHTMLに変換する。
ここは今回の主題でないので軽く述べる。

<!DOCTYPE html>
<html>
<body>
{% for entry in entries %}
<div>
<h4><a href='./pdf/{{entry["key"]}}.pdf'>{{entry["title"]}}</a></h4>
<ul>
<li>Author : {{entry["author"]}}</li>
<li>Journal: {{entry["journal"]}}</li>
<li>Published Year: {{entry["year"]}}</li>
</ul>
</div>
{% endfor %}
</body>
</html>

jinja2テンプレート内でpythonのfor文が使える。

from jinja2 import Template
template = Template(open(template_file).read())
html = template.render({u'entries':entries})
print html.encode("utf-8")

以上でリンクを含んだHTMLが生成される。
2012/06/03 03:05 TeX TB(0) CM(0)
コメント















 管理者にだけ表示を許可する

トラックバック
http://termoshtt.blog110.fc2.com/tb.php/20-d1ee637f
検索フォーム
ブロとも申請フォーム
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。