読者です 読者をやめる 読者になる 読者になる

右上➚

プログラミングに関するメモをのこしていきます

日本語の改行を適当にいい感じにするツールを作りました

必要に迫られて、HTML ページ内の改行位置をいい感じにするツールを作ってみました。

github.com

HTMLに長文を書くと、親 DOM のサイズの制約上、適宜改行がぶちこまれます。 しかし、改行位置は文節を考慮などせずにごりっと挿入されるので、多くの問題が生じることが報告されています。 最も有名な問題として、今すぐダウンロー
ド問題が挙げられます。

japawrap を使うと、それっぽく日本語を解釈して <span> でくくるみたいなことができます。inline-block を適用すれば改行がそれっぽく入るようにできます。

Install

go get github.com/agatan/japawrap/...

japawrap コマンドが使えるようになります。

Usage

CLI

ファイル名を指定するか標準入力から流し込みます。

$ echo "今日も元気です" | japawrap
<span class="wordwrap">今日も</span><span class="wordwrap">元気です</span>

このように適宜いい感じに wrap してくれます。

オプションとして -open string-close string をサポートしているので、

$ echo "今日も元気です" | japawrap -open '<span style="display: inline-block;">' -close "</span>" 
<span style="display: inline-block;">今日も</span><span style="display: inline-block;">元気です</span>

みたいなことができます。

Library

一応 japawrap はライブラリとしても使用できるようになっています。

w := japawrap.New(open, close)
s := "今日も元気です"
fmt.Println("%s => %s", s, w.Do(s))

これだけです。

Example

では実際に使った結果を下に記したいと思います。 文章は、上の方に自分で書いた文章をそのまま使います。


before

HTMLに長文を書くと、親DOM のサイズの制約上、適宜改行がぶちこまれます。 しかし、改行位置は文節を考慮などせずにごりっと挿入されるので、多くの問題が生じることが報告されています。 最も有名な問題として、今すぐダウンロード問題が挙げられます。

after

HTMLに長文を書くと、DOM のサイズの制約上、適宜改行がぶちこまれます。 しかし、改行位置は文節を考慮などせずにごりっと挿入されるので、多くの問題が生じることが報告されています。 最も有名な問題として、今すぐダウンロード問題が挙げられます。


こんな感じになります。猛烈に効果がわかりにくくて驚いていますが、一応効果はちゃんと出ているのではないでしょうか? HTMLを直接見ていただければどうなっているかはわかると思います。

次に青空文庫から夏目漱石「こころ」の序文を抜粋してみたのが下の画像たちです。

f:id:agtn:20161029131814p:plainf:id:agtn:20161029131817p:plainf:id:agtn:20161029131820p:plain

レスポンシブ!それなりになっている気がします。

あとがき

この問題へのアプローチとして、https://github.com/google/budou が有名だと思います。

budou は Cloud Natural Language API を内部で使っていて、しっかり日本語の文章を構文解析しているようです。 なので非常に精度は高いと思うのですが、今僕の GCP アカウントがごにょごにょしていてぱぱっと試せる状況ではなかったので自作しました。

budou と違ってしっかり構文解析などはしていなくて、形態素解析した後、それっぽく分割しているだけです。なので精度は落ちると思います。 一方、budouGCP の credentails が必要だったりと準備が必要になるので、お手軽に試せるというのは悪くないかなと思っています。