2012-06-17

ばたばたして一週間空いてしまった。今週も時間がなくてあんまり進められなかったよ。とはいえ進んだとこまで: unicodeseg.py 0.5.2

2012-06-02

今週はずっと体調が悪かった。さて、

The pytextseg package provides functions to wrap plain texts: fill and wrap are Unicode-aware alternatives for those of textwrap standard module; fold and unfold are functions mainly focus on plain text messages such as e-mail.

It also provides lower level interfaces for text segmentation: LineBreak class for line breaking; GCStr class for grapheme cluster segmentation.

ということで、今やっていることそのもののモジュールがやはりすでに存在していた。もともと C の行分割ライブラリ(これ自体は数年前からある)を作られていて、その Python バインディングみたい。折り返し用の wrap 関数を同梱するとこまで被ってる(汗)。まあいずれ必要な人は必要になるよね……。Python のモジュールとして見れば API の設計とかで考えの違うところはあるけど。

そんなわけで、textseg という名前は PyPI にすでに登録されていた。ので、unicodeseg という名前にした。0.5.1 です。API も整理してだいぶ変わってきてるけど、そろそろ落ちついてきた。wxPython を使った、GUI のデモも付けたよ。まだ遅いけど、速くするのはまだ我慢している。

それでこのドキュメントを書きながら思ったのは、大事なのは、API リファレンスより Unicode のテキスト境界処理の基本的な概念だよなーということだった。これをリファレンスに入れると量が増えすぎてしまうし、このモジュールの説明だけに限った話でもないので、いまその部分だけ独立させて覚え書きにしようとしているところです。それがここ(「Unicode テキスト境界処理覚え書き」)にあります。まだ書きかけだけど、読んで何かコメントありましたらくださいな。

2012-05-27

今週知ったこと。走ってる Python インタプリタの unicode 内部実装が narrow (16bit UCS-2) か wide (32bit UCS-4) かを知る方法: sys.maxunicode を見る。

ucd.py 0.5.0 を公開。今週できたとこまでの中間報告という感じ。来週もやるよー。

こまごまと進めていったら、sentence break とか分割をカスタマイズ可能にするとか、面倒だと思ってたところができてしまったのでちょっと嬉しい。

そろそろモジュールの名前を変えたい。ucd というのは、Line_Break 属性を返す関数などがあるので最初は unicodedata モジュールに近いものかと思って “Unicode Character Database” からとっていたもの。しかしだんだん方向性が見えてきて、違う名前のほうが相応しいような気がしてきた。いま思ってるのは、これは文字列をいろいろな境界で分割する機能(segmentation)を提供しているものと言えるので、textseguniseg なんてどうかな、と。UAX #29 も “Unicode Text Segmentation” だしね(UAX #14: Unicode Line Breaking Algorithm とかも扱ってるけど)。あと ucd.codepoint とかのサブモジュールは廃止予定。廃止というか、ルート・パッケージでぜんぶ import してしまう。関数名が長くなって取っつきにくい。