Colorful Wires

エンジニアリングの勉強の記録

指定した仮想環境で Python スクリプトを起動するショートカットの作り方 (Windows)

概要

 この記事では、Python で実装した Windows 用のスクリプトを、利用する仮想環境を指定して実行するためのショートカットの作成方法を説明します。

事前に確認しておくこと

  1. CUIGUI どちらで実行したいか (コマンドプロンプトを画面に表示するかしないか)
  2. 使用したい仮想環境の pythonw.exe (または python.exe) のパス
  3. venv を使う場合は、仮想環境フォルダの中の Scripts\pythonw.exe です。
  4. 実行したい Python スクリプトが格納されたフォルダのパス
  5. 実行したい Python スクリプトのファイル名

手順

f:id:moge560:20210304104015p:plain
Python 実行用ショートカットの作成画面

  1. エクスプローラ上でショートカットを作成します。
  2. リンク先欄に、使用したい仮想環境の pythonw.exe (CUI の場合) または python.exe (GUI の場合) のパスと、実行したい Python スクリプトのファイル名を、スペースで結合したものを入力します。
  3. 作業フォルダー欄に、実行したい Python スクリプトが格納されたフォルダのパスを入力します。

docx + jinja2 テンプレートを Python から使用する

概要

f:id:moge560:20200726123332p:plain

この記事では、Python で docx ファイルにおいて jinja2 テンプレートを使用可能にするパッケージ python-docx-template の使い方を整理します。

インストール

pip install docxtpl

基本の使い方

docx ファイルに jinja2 形式でコマンドを記入します。

f:id:moge560:20200726174346p:plain
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 は、selfcls にアクセスできないので、同じクラス内の別のメソッドを呼ぶことができません。 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 になるかオブジェクト指向 UI になるかは関係がないです。
  • この本には、ドメイン モデルまで作った後に、実際の画面にする重要なノウハウが記載されています。たとえば
    • シングル ビューとコレクション ビューの視点でのドメイン モデルの整理の方法 (ここが一番なるほどと感じた)
    • オブジェクト間の関係の種類に応じた画面パターン
    • CRUD の種類に応じた画面パターン

すこし理解が曖昧なので以下はもう一度読んでから整理します。

  • メールにおけるフラグはオブジェクトでなくオブジェクトに1つだけつけられる属性。
  • 基本は、アクションを実行するためのボタン、もしくはそれに準じたコントロールを、アクションの対象となるオブジェクトの近くに配置すること。
  • 新規作成は、コレクションビューに配置している。create アクションのパターンは以下の通り。
    • ブランクパターン
    • パラメーターパターン
    • プレースホルダーパターン
    • セーブアズパターン
    • テンプレートパターン
    • マスターパターン
    • ワンタイムモードパターン
    • ガッツパターン
  • 簡易ツールならタスク指向のほうがいいかもと思いました。工数は増えるんですよね。

以上です。また更新します。

Text Mining: Concepts, Implementation, and Big Data Challenge

テキスト分類とクラスタリングについて、包括的にまとめた一冊です。

知りたいこと

  • 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 を使います。


\displaystyle
\mathrm{collocation}(\mathrm{term}_i, \mathrm{term}_j) = \frac{2 D F_{ij} }{ DF_i + DF_j }

Index Optimization

単語毎に以下を選ぶ問題として最適化することのようです。

  • そのままにする
  • index filtering の対象(除去)
  • index expansion の対象(拡張)

評価の方法は?

後で書きます。

DEEP LEARNING FOR SYMBOLIC MATHEMATICS

arxiv.org

これは積分と ODE を Seq2seq で解くという論文です。

知りたいこと

  • 入力は木?それはどのように入力する?
  • データセットはどのように生成する?微分は簡単だから微分を使う?

モデルへの入力

  • ツリーを入力とするモデル (例:Tree-LSTM, Recurrent Neural Netowrk Grammars など) は学習に時間がかかるため、シークエンスとにした。
  • ツリーをポーランド記法で表現した。

データセットの生成方法

  • 微分を使う方法 (BWD)
  • 解ける問題について CAS で積分する方法 (FWD)
  • Backword generation with integration by parts

BWD では微分積分より長くなるという問題があり、これがかなり影響するようだ。

Document Classification Algorithms

ちょっと古い文献ですが、文書分類で使う特徴選択法について調べるために読みました。

知りたいこと

  • 特徴選択はどれくらいパフォーマンスに影響するのか。
  • Text Classification で使われる特徴選択法はどんなものがあるか

特徴選択はどれくらいパフォーマンスに影響するのか

  • 判別器やデータセットにかなり依存する。
  • 文献ではなんと特徴選択しない SVM が最も良い精度というオチだった。
  • まず手法自体は色々試したほうがいいよね、ということが学べました。

Text Classification で使われる特徴選択法はどんなものがあるか

  • Information Gain
  • Mutual Information
  • Chi-Square
  • Recursive Feature Elmination (RFE)
    • 時間がかかる。
    • 筆者は、高速な方法 (Improved RFE) を提案したようです。