htmlを多項式にしてみた

動機と注意


もし,htmlが多項式になるなら,実際に作るとどうなるのか?

ということで,やってみた.

注意

今回実験的要素が多く含まれます.
さらに結果もたいしたことないので,見る価値も今一つありません.

プログラムはGitHubにあります.

一部,引用だったりコードブロックだったりしますが,引用部はhtmlがうまくコードブロックで書けなかった部分です.

——–

方針


  1. htmlを多項式にする

+ タグを変数に,文章を定数に置換
+ 1行ずつ処理
+ 同じ行の変数と定数は積として単項式に
+ 単項式の和(つまり多項式)としてhtmlを表現

"""
# 単項式にするイメージ!(Python)
# 変数

-> x1

-> x2
<i><i>  -> x3
</i></i> -> x4

# 定数
こんなhtml -> a1
あんなhtml -> a2
"""

単項式1 = 変換する関数("

こんなhtml

")
print(単項式1)
# 表示結果:x1 * a1 * x2

単項式2 = 変換する関数("<i><i>あんなhtml</i></i>")
print(単項式2)
# 表示結果:x3 * a2 * x4

多項式 = 単項式1 + 単項式2
print(多項式)
# 表示結果:x1*a1*x2 + x3*a2*x4
  1. 多項式を計算させてみる

+ 2つのhtml(多項式)でグレブナ基底を計算

  1. 計算結果をhtmlに戻してみる

——–

結果


htmlを多項式で表現

今回使用したhtmlは

<html>
<body>
<p>ここに文章</p>
<i>たとえばイタリックにしたり?</i>
<p><strong>文章を強調</strong>してみたり!</p>
</body>
</html>

と,

<html>
<body>
<p>ここに文章</p>
<p><strong>文章を強調</strong>してみたり!</p>
</body>
</html>

タグ(変数)と文章(定数)は次.

x1 = “<html>”
x2 = “<body>”
x3 = “<p>”
x4 = “<strong>”
x5 = “</html>”
x6 = “</body>”
x7 = “</p>”
x8 = “</strong>”
a1 = “ここに文章”
a2 = “<i>”
a3 = “たとえばイタリックにしたり?”
a4 = “</i>”
a5 = “文章を強調”
a6 = “してみたり!”

このとき,htmlを変換(タグを記号に置き換えるだけ)すると

x1 + x2 + x3*a1*x7 + a2*a3*a4 + x3*x4*a5*x8*a6*x7 + x6 + x5 ,
x1 + x2 + x3*a1*x7 + x3*x4*a5*x8*a6*x7 + x6 + x5

となる.

この2つの多項式でグレブナ基底を計算すると

a4*a3*a2, x1+x2+(a6*a5*x8*x4+a1)*x7*x3+x6+x5

これをhtmlに戻すと

<!– a4*a3*a2 の結果 –>
</i>たとえばイタリックにしたり?<i>
<!– x1+x2+(a6*a5*x8*x4+a1)*x7*x3+x6+x5 の結果 –>
<html>
<body>
してみたり!文章を強調</strong><strong></p><p>
ここに文章</p><p>
</body>
</html>

となる.

——–

まとめと考察?


もうすこしタグが基底っぽく機能するようなモデルにしたかった.
おそらく,一行が一つの単項式になるのが問題で,
一行が一つの多項式になると,もうすこし基底っぽいのがでてくると思われる.

結果がちゃんとhtmlになってない.
これは,順序を正しく与えてあげればそれっぽいのはできる.
ただし,入れ子構造が崩壊しているのは避けられない.
上記と同じく,一行が一つの単項式なのが原因と考えられる.

 

まとめると,今回作った方針でhtmlを多項式化しても特に意味はなさそう.
だが,説明としては使えなくもない・・・のかなぁという感想.

——–

使用したプログラム


今回は乗せると冗長だと判断したため,GitHubに掲載.

Caffeを(比較的)簡単に扱うGUIツール,作りました.

2017/07/08 追記

こういうツールの需要があるかもしれないですが,もし使うならDIGITSをお勧めします.
NVIDIAが提供するCaffeをラップして使用するGUIで,高機能です.
インストール,使い方は上記リンクGitHub参照です.Caffeがインストールできる程度の知識で十二分に使えるはずです.

学術的だったり,勉強的な意味であればぜひお使いください.参考になれば幸いです.
(追記ここまで)


Screenshot from 2016-03-03 21_45_23.png
Githubにアップロードしてます.どこから見てもベータ版です.

GitHub

推奨はLinux,Ubuntuです.環境はUbuntu14.04です.
言語はpython,GUIはwxPythonです.
動かすには,ターミナルでpython [ファイル名]で直接動かします.

動作としては,caffeインストール時に作成されるツールをそのままコマンドとして実行させています.
なので,コマンドで動かすサンプルと同じ挙動が確認できます.

逆に,python上からcaffeを呼び出して,操作しているわけではないのでそういう類の参考にはならないと思います.実際,多言語のプログラム呼び出しの練習みたいな感じでしたので.
一通り学習まで動く程度にしか作りこまれてないので,作ったといっても多くの人に使ってもらえる代物ではないです.ご了承ください.

UI,パラメータ操作もまだまだ改良する必要がありそうです.
追加機能として,学習精度のグラフとか,ネットワークの構造とか,サンプルで良く見られる内容を実行できるようにしたいです.

wxPythonインストールがそこそこ面倒だった件

Python3系に対応していると聞いて,ちょっと探したところ全くインストールできなかった.
どうしたものかと調べたところ,あっさり通る方法が見つかった.

http://blog.emptypage.jp/archives/298
参考にしました.ありがとうございます.

コマンドプロンプトか,PowerShellに次のコマンドを入力.コピペでも動きます.
管理者権限で実行しています.念のため,管理者で実行したほうが良いと思います.

pip install –user –pre –trusted-host wxpython.org -f http://wxpython.org/Phoenix/snapshot-builds/ wxpython-phoenix

実際に入力した結果が次図.

wxPython_3

とりあえず,importに成功しているので,インストール成功している.
これだけだとちょっと物足りないのでフレーム表示までやってみた.
http://www.python-izm.com/contents/gui/frame.shtml
参考にしました.お世話になります.

表示した結果は次図.
wxPython_3_1.PNG

なぜか応答無しになっているが,動作している.
インタラクティブシェルで動かそうとしたのが失敗だったかも.
一応VisualStudio2015で実行したところ応答無しも出ずに,ちゃんと動きました.

最後に一応動作した環境を載せます.

OS: Windows10 64bit
Python:3.5.1
Anaconda入ってます.verは2.4.0