docx + jinja2 テンプレートを Python から使用する
概要
この記事では、Python で docx ファイルにおいて jinja2 テンプレートを使用可能にするパッケージ python-docx-template
の使い方を整理します。
インストール
pip install docxtpl
基本の使い方
docx ファイルに jinja2 形式でコマンドを記入します。
よく使うのは以下のコマンドです。
- 変数の表示:
{{ 変数名 }}
- ループ:
{% for element in sequence %} {element.myproperty} {% endfor %}
書けたら以下のスクリプトで処理します。
from docxtpl import DocxTemplate doc = DocxTemplate("template_demo.docx") doc.render( { "xs": [ { "name":" taro", "age": 16 }, { "name": "hanako", "age": 20 }, ], } ) doc.save("out.docx")
通常の jinja2 との違い
- タグは
run
単位でしか書けません。run
は同じ書式の文字列の系列のことです。
所感
仕事でレポート生成に使うので調査しました。
classmethod と staticmethod の使い分け
static method は、self
や cls
にアクセスできないので、同じクラス内の別のメソッドを呼ぶことができません。
class method は、cls
経由で自分のクラス自身にアクセスできるので、これが可能です。
以下に例を示します。
class MyClass1: @staticmethod def static_func(): self.another_static_func() @staticmethod def another_static_func(): print("another") class MyClass2: @classmethod def class_func(cls): cls.another_static_func() @staticmethod def another_static_func(): print("another") # mc = MyClass1() # mc.static_func() # 実行結果 # >>> Traceback (most recent call last): # File "prog.py", line 21, in <module> # mc.static_func() # File "prog.py", line 4, in static_func # self.another_static_func() # NameError: name 'self' is not defined mc = MyClass2() mc.class_func() # 実行結果 # >>> another
オブジェクト指向 UI デザイン

オブジェクト指向UIデザイン──使いやすいソフトウェアの原理 WEB+DB PRESS plus
- 作者:ソシオメディア株式会社,上野 学,藤井 幸多
- 発売日: 2020/06/05
- メディア: Kindle版
ウェブで一部読んで気になっていた本。
以下は自分の解釈です。
- 機能要求から作ると、最短コースをとろうとすると、タスク指向になりがちです。
- 画面部品をオブジェクト指向で使っても、タスク指向 UI になるかオブジェクト指向 UI になるかは関係がないです。
- この本には、ドメイン モデルまで作った後に、実際の画面にする重要なノウハウが記載されています。たとえば
すこし理解が曖昧なので以下はもう一度読んでから整理します。
- メールにおけるフラグはオブジェクトでなくオブジェクトに1つだけつけられる属性。
- 基本は、アクションを実行するためのボタン、もしくはそれに準じたコントロールを、アクションの対象となるオブジェクトの近くに配置すること。
- 新規作成は、コレクションビューに配置している。create アクションのパターンは以下の通り。
- ブランクパターン
- パラメーターパターン
- プレースホルダーパターン
- セーブアズパターン
- テンプレートパターン
- マスターパターン
- ワンタイムモードパターン
- ガッツパターン
- 簡易ツールならタスク指向のほうがいいかもと思いました。工数は増えるんですよね。
以上です。また更新します。
Text Mining: Concepts, Implementation, and Big Data Challenge

Text Mining: Concepts, Implementation, and Big Data Challenge (Studies in Big Data)
- 作者:Jo, Taeho
- 発売日: 2018/06/20
- メディア: ハードカバー
テキスト分類とクラスタリングについて、包括的にまとめた一冊です。
知りたいこと
- Text Indexing とは何か (p.19)
- テキスト分類の全体的な流れはどのようなものか
- Tokenization 時に気をつけることは何か
- Stemming では何をするべきか
- Stop Words には何を指定するのが一般的か
- Additional Further Steps とあるが何をするのか
- 評価の方法は
Text indexing とは何か
Text indexing とは、文や複数の文を単語のリストにすることです。
そういえば、過去に Text indexing を明確に 1 つのプロセスと考えず、 非構造化されたままプログラムを書いたことがあります。見通しが悪くなった記憶があります。
テキスト分類の全体的な流れはどのようなものか
おおよそ以下の流れになるようです。
- Text inexing
- Tokenization
- Stemming
- Stopword Removal
- Additional Steps
- Index Filtering
- Index Expansion
- Index Optimization
- Text Encoding
- Feature Selection
- Feature Value Assignment
- Modeling
- Evaluation
Tokenization 時に気をつけることは何か
私が忘れたことのある処理です。
- 大文字を小文字に変換する
16%
などの数や記号が含まれた語は捨てる
Stemming では何をする
Stemming では Root にします。(例: simplest → simple)
日本語ではどうするのが良いのかは別にまとめます。
Stopword には何を指定する?
英語では on, to, in, but, however などを指定します。 negative な単語は、感情の推定時などには、例外的に残します。
Additional Further Steps とは
Index Fitlering
重みの小さな語を捨てることです。
捨て方には大きく 3 つのアプローチがあります。 1. ランク ベースのアプローチ。決まった個数の上位の単語を残します。 2. スコア ベースのアプローチ。しきい値以上の単語を残します。 3. 混合アプローチ。
単語の位置によって、捨てるか捨てないかを変える方法もあります。 パラグラフの最初と最後には重要な語があります。
事前に文長を検討することは重要で、 文長が短い場合は情報が落ちる可能性が大きくなるので、 Index Filtering を行わないことがあります。
Index Expansion
文に含まれていない関連のある語を追加することです。
External words (virtual words) という、関連のある単語を、検索エンジンを使って取得します。 これにより、単語数が増えます。
ここでは、Collocation を使います。
Index Optimization
単語毎に以下を選ぶ問題として最適化することのようです。
- そのままにする
- index filtering の対象(除去)
- index expansion の対象(拡張)
評価の方法は?
後で書きます。
DEEP LEARNING FOR SYMBOLIC MATHEMATICS
Document Classification Algorithms

Document Classification Algorithms: And Feature Selection Techniques with the Practical Test
- 作者:Hussein, Esraa,Hussein, Ahmed
- 発売日: 2020/04/27
- メディア: ペーパーバック
ちょっと古い文献ですが、文書分類で使う特徴選択法について調べるために読みました。
知りたいこと
- 特徴選択はどれくらいパフォーマンスに影響するのか。
- Text Classification で使われる特徴選択法はどんなものがあるか
特徴選択はどれくらいパフォーマンスに影響するのか
Text Classification で使われる特徴選択法はどんなものがあるか
- Information Gain
- Mutual Information
- Chi-Square
- Recursive Feature Elmination (RFE)
- 時間がかかる。
- 筆者は、高速な方法 (Improved RFE) を提案したようです。
One-class Document Classification
知りたいこと
- 自分の知らない特徴量の作り方は何かあるか。
Hadamard Product
筆者は、アダマール積という特徴量が有効だと言っています。
アダマール積といっても、何のことはなく、Bag of words の重みづけに、 トレーニングデータでの単語の出現回数を使う方法です。
タスクによってはよいのかもしれないです。 (この文献のタスクは One-class のため、有効に効きそうです)
トレーニングデータの文書数が増えると、 重みが Document Frequency に近づくと思いますので、 コーパスによっては、IDF とは逆の傾向が出ると思います。 通常 TF-IDF がうまくいくことを考えると、 One-class でないタスクにはうまくいかなそうな印象を持ちました。