Category Archives: 実用 R アナグラミング

Gunma.web #7 で喋ってきました『エダカリン!』

 先日のGunma.web #7で発表してきました。
 今回はLTでなく10分程度の発表です。LTじゃないのは初めて。

 テーマはツリーデータの枝刈りで、かなり昔に作成したWebアプリ 実用 R アナグラミング を題材にしてローマ字アナグラミングのデータ構造をいじくりまわすという趣旨です。

 実用 R アナグラミング は、ANIを(アニ|アンイ)の複数読みができないというバグを抱えたまま数年放置していたアプリなのですが、今回Gunma.webの発表機会もあって取り組んでみました。
 今回作成したライブラリは、まだアプリに取り込んでないのでバグは抱えたままです(というか元の作りが悪くて単純なI/Fの差し替えで対応できない)。そのうち差し替えます。

 今回のソースコードはgithubに置いてあります。disってください。

romaji-anagram
https://github.com/ivoryworks/romaji-anagram

 発表後、具体的な処理について質問がいくつかあって、お茶を濁すような形で説明してしまったのですが、詳しくははコード見てください。ごめんなさい。

 それと、これは個人的なポリシーなのですが、今回のスライドにソースコード載せてません。今後も私のスライドにソースコードが載ることはありませんし、(たぶん)これまでも無かったと思います。
 理由はいくつかありますが、一番大きいのはGunma.webが言語に特化した勉強会でないからです。
 今回の題材はPHPで書いていますが、PHPerのプログラマーの方にも非PHPerのプログラマーの方にも非プログラマーの方にも同じくらいのInputになるように心がけています。
 LTだったら1枚のスライドに長くて十数秒しか割けないとか、スライドなのであまり小さな文字は書けないとか、そもそもコードがダメとか小さな理由はいくつもあるのですが、まあそういった事なので今後ともよろしく。

スタパクラウドとアナグラミングが早くなったはず

 先日からちょっとずつコンテンツを新しいサーバに移行しています。

スタパクラウド

実用 R アナグラミング

以前から、早く動くようにスクリプト組みなおしたいなと考えていたけど、ハードで早くなりました。

 

『実用 R アナグラミング』を刷新中

 『実用 R アナグラミング』を書き直している。
 目的は、アナグラミングのスピードアップと、対応文字列長リミット(現在11文字)を伸ばす事、そして、「安易な兄」問題の対応。
 処理のタイムリミット(30秒)がなければ、理論的にいくらでも長い文字列を処理できるので、スピードアップは文字列長リミットに直接関わっている(今回の刷新では考えてないけど、更なるスピードアップを狙うなら、処理(作業)の一部をCで書くつもり)。
 あと、今回はローマ字文字列をマトリクスで読ませようとしている(既存では、かなり格好の悪いプログラムになっているので)。
実用 R アナグラミング
http://www.ivoryworks.com/anagram/
* 『実用 R アナグラミング』はローマ字のアナグラムを生成するWebサービスです。

安易な兄

実用 R アナグラミング

 現状、『 ani 』と入力すると、aで始まる語が『 ain (アイン)』と『 ani (アニ)』しか出てきません。
 『 ani 』は「アンイ」 とも読めなくてはならないのですが・・・、これはマズいね。

 でも忙しくて今は直している時間がない。

 またあとで。

 『実用 R アナグラミング』は、ローマ字アナグラムを作成するWebサービスです。

アナグラムのヘボン式特殊ルール対応

実用 R アナグラミング

 促音の対応漏れがあったので処理追加。
 チ(CHI)/チャ(CHA)/チュ(CHU)/チョ(CHO)音に限り、その前にTを加えるというルールです。字面を見ると確かに見た事ありますね。

 それと、ヘボン式で「M」を「ン」と読ませるケース。
 これも確かにある。samma(サンマ)とかね。

 あと、文字列に大文字が含まれる際にうまく動かなかった不具合を修正。大文字→小文字変換は入れてたハズなんですが、作成過程で失われてました。

アナグラムの促音対応

実用 R アナグラミング

 促音に対応するよう修正しました。
 促音とは「ppa(ッパ)」や「kka(ッカ)」のような、つまる音の事です。

 現在の最大文字列長11文字、長くしたいね・・・。

アナグラム作成ツールを公開:『実用 R アナグラミング』

 作成していたアナグラム作成ツールを公開します。

実用 R アナグラミング

 結局こんな名前になりました。Rはローマ字のR。
 どこかで聞いた事があるような名前ですね。でも一々説明するのは野暮なのでやめときます。

 今のところ11文字がリミッターです。もう少し長く出来るよう頑張ります。

 現在、生成されるローマ字綴りは、ヘボン式と訓令式が混在したものとなります。これについては、ユーザ設定によりカスタマイズできるよう機能追加する予定です。
 また、例外的にヘボン式と訓令式どちらにも含まれないような綴りを許容しています(例えば「LI」を「リ」と読ませたり)。これについても許容可否を設定できるようにします。

 とりあえず試してみてやってください。

Simon Singh/青木 薫
新潮社 (2001/07/31)

ローマ字アナグラム作る名も無いツール

 引き続き、ローマ字のアナグラムを作るプログラムを組んでます。

 やっぱり、元の文字列が長いと処理に時間がかかる。
 今、せいぜい10文字が限界。
 これ工夫しないと実用的じゃないですね。

 アナグラム化する元の文字列の文字列長、およびその文字構成によって何千というアナグラムが生まれる事があります。
 最初、1ページ30件くらいのリストを表示して「次のページ」とか「前のページ」とかいうリンクでリスト遷移させれば良いと思ってたけど、それだとどうにも使い勝手悪いので、リストを先頭の文字(音)で切り分けてインデックス振って、そのインデックスで切り分けられたリスト内を「次」「前」で移動させれば幾分か良さそう。

 プログラミング中、このアプリの名前を考えてます。
 難航。
 最初、ANAGRAMのアナグラムにしようかと思ったけど、ローマ字のアナグラム作るサービスなのに英語かよ、というので却下。
 なんたらメーカーとか、なんたらシステムとかそういうのは付けたくない。
 きっと何か日本語のアナグラムになると思うけど、あまりに突飛すぎるとシステムの機能を連想できないというジレンマが付きまとう。
 アナグラム前、アナグラム後、双方の言葉がこのシステムに関連するようなものだとベストなんだけどね。

ローマ字のアナグラムを作る仕組みを作っています。

 アナグラムを作るWebアプリを作ってます。

 アナグラムとは、ある言葉の文字を入れ替える事で、別の意味の言葉に変える言葉遊びの一種です。
(詳しくは、アナグラム – Wikipedia 参照)

 アナグラムを作ってくれるサービスは、例えば海外だと Internet Anagram Server という優秀なサイトあるので、じゃあローマ字版を作ってみようかな、と。
 ローマ字綴りの言葉を渡すとローマ字綴りのアナグラム返してくれるようなシステム。

 で、軽く作ってみたのが手元にあるんですけども、これ、課題多そうです。
 ローマ字、単純に子音に母音を付けるだけじゃ足りなくて、キャ、キュ、キョなどの拗音や、KITTE(切手)などのようにTが連続する促音とかの扱いをどうするかとか。
 でも一番の課題は、レスポンスの問題かもしれません。種として渡す文字列が長いとブラウザがタイムアウトしてしまう。かといって、種があまりに短いとつまらない。
 処理の見直しと、見せ方を工夫しないと。