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

termoshtt

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

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/-- --:-- スポンサー広告 TB(-) CM(-)
以前の記事でpybtexとjinja2を使った論文のリストの生成について書きました。
今回から何回かでそれを発展させて作ったiPadでつかえる論文管理webアプリについて紹介します。

https://github.com/termoshtt/articles

前回同様githubで公開してありますので、使ってもらえるとありがたいです。
つたない英語が読みにくい場合はここで質問してもらえると補足できます。

articles


このアプリはそもそもiPad、特にGoodReaderでの使用を目的として開発されています。
GoodReaderはpdfを読む分には申し分ないのですが、
ファイル名以上の論文の管理ができず、別個でpaper等のアプリを用いる必要がありました。
本アプリはこの点を解決し、GoodReader内部で論文を読む作業を閉じさせるために開発されています。

GoodReaderはHTML,Javascriptを読む事ができ、さらにGoodReader管理下のHTMLからは相対パスで
pdfにリンクすることが可能です。
この機能を利用してこのアプリは論文の情報を一覧したHTMLのリストを作成し、リンクを埋め込みます。
さらにJavascriptを用いて検索を行なうことが可能です。

このようにHTMLで作成することにより、デスクトップ環境でも同じ様に使用する事が可能です。
(寧ろ現状ではデスクトップ環境の方が便利です)

構成


このアプリはHTMLとJavascriptから成るwebアプリとCGI部分から成ります。
上記の機能、即ち論文の一覧と検索機能を使用する場合はwebアプリ部分だけで十分ですので、
CGIを使用する必要はありません。
CGIは後述するタグ付けの機能を使用する際に必要となります。
ちなみにCGIはpythonで書いています。

要件


このアプリを使用するには論文の情報を纏めているbibファイルがあり、
さらにpdfのファイル名がそのbibtexkeyに一致している必要があります。
これはJabRef等で用いられている規則です。
異る命名規則を用いている場合は自力で変換してください。
さらに変換を行うためにpythonが動作するデスクトップが必要です。
現在はLinuxでのみ動作します(Windows上でプログラム書いたことない)。

今回は以上、概略の説明までです。
次回以降でインストールの方法、タグ付けについて紹介します。
2012/12/21 21:53 iPad TB(0) CM(0)
gnuplot v4.6がでて半年くらいたつが、新機能まとめ的な記事を見掛けないので書いてみる。

今回はfor文について。
このブログfor文ばっかだな。

徐に例をあげてみる
do for [j=0:4]{
title sprintf("%dth data",j)
plot for [i=0:5] sprintf("data%d",j) index i title sprintf("%dth",i)
pause -1
}

実際に使っているのを少し改変してみた。
dataファイルdata0,data1,data2,data3,data4があり、
その各々に5ブロック分のデータが書いてある様な状況である。
偏微分方程式の時間発展とか計算する時によくある状況である。

順に説明していこう

sprintf


gnuplot中で数値を文字列に変換したいことはままある。
例えば上記の様にファイル名を生成したい時などである。
sprintfはCの関数と同様であり、char*に書きこむ変わりにその場に展開する。つまり
 plot sprintf("data%d",1) 
 plot "data1" 
と同じ挙動を示す。

plot for


これはv4.4で追加された機能だと思う(未確認、v4.4では動作確認済み)
 plot for [i=0:2] x**i 

のように書くと
 plot x**0 , x**1 , x**2 

と同じ挙動が得られる。

do for


これはv4.6での新機能である。
もう特に説明の必要はないと思うが{}でくくられた命令をループ実行する。
{}を使った同様の構文がif/whileでも使えるらしい。
この辺りは次回に



2012/07/31 05:31 gnuplot TB(0) CM(0)
2月ほど前の記事pybtexでbibtexをHTMLに変換(作成編):で作った
bibtex -> html
のコンバータをgithubに挙げたので宣伝してみる。
https://github.com/termoshtt/bib2paperlist
https://github.com/termoshtt/articles
(12/12/21修正)

pybtex,jinja2のインストールは別途必須。
使用するにはpdfのファイル名がbibtexkeyに一致している必要がある。
JabRef等を使用している場合、一致させて管理していることが多いと思いこの仕様にした。

現状ではjqueryを用いて並べかえはできるが、検索ができない。
近いうちに検索機能は実装予定です。


つかってくださいな。

2012/07/31 05:09 TeX TB(0) CM(0)
今度こそ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)
前回までLuaの記事だったが、今回はpythonである。

pybtex


pybtexはpythonで書かれたbibtexクローンである。
つまり文献情報が書いてある.bibファイルを読みこみ、
TeXの\bibitemをつくる。

ただのクローンならこんな記事は書かない。
このpybtexはなんと、pythonから呼びだして使うことができるのだ!!
つまりpybtexさえあれば、自前でbibtexパーザを書かずとも
自由にpythonからbibtexソースを弄くることができるのだ。

これは文献管理用のスクリプトをpythonで簡単に書けることを意味する。
もうJabRefなんて使う必要はない、emacsからでもvimからでもzshからでも
pythonスクリプトを一つかけば解決である!

GoodReader for iPad


今回はpybtexを用いて、iPadのGoodReaderで論文を読むために、
bibtexから文献リストのHTMLを生成するスクリプトを作成する。

GoodReaderはiPhone/iPad用のドキュメントビューアである。
特にPDFの閲覧に関して秀でており、注釈を付けて保存できる機能がある。
またDropboxと同期して、ローカルにPDFを保存できるためオフラインでも使用可能である。

しかしながら、PDFの情報を一覧するような機能はついておらず、
PDFのタイトルで管理することもできるが、できればbibtexで管理している情報を用いて管理したい。

好都合なことにGoodReaderはHTMLを読むことができ、
さらに相対パスで指定されたPDFのリンクをそのまま開くことができる。
そこで、bibtexの情報を元にリンクを埋め込んだ論文一覧HTMLを作成し、
そのHTML上のjavascriptで検索機能を実装する。

因みに既存のbibtex -> HTMLコンバータも多数存在する。
BibTeX関連ツール - TeX Wiki:
今回はpybtexの練習と、PDFのリンクを付ける方法がわからなったので、一から作成した。

>> 作成編へ
2012/06/03 01:56 TeX TB(0) CM(0)
検索フォーム
ブロとも申請フォーム
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。