« カラー絵文字 | メイン | 吉里吉里2/Zに脆弱性があると言う話 »

2015年10月06日

ツール開発メモ:: タイトルでシリーズ名や巻数を推定する

    

角川半額タイトルをまとめて表示するためにタイトルからシリーズと巻数を得て並べた。
ある程度予想していたけど、いろいろと細かい処理が必要。

角川全般がそうなのか、今回の半額タイトルに限ったことかはわからないが、シリーズ名は<>で囲われるルールがあるようで、シリーズ名を得るのは楽だった。
他の出版社のタイトルなど見ると、タイトル+巻数のみだったりもするので、そういうものからもシリーズ名を得られるようにするにはもう一工夫必要。

シリーズ名以外にもレーベル名が末尾に()としてつくようだ。
つまり、タイトル名 巻数 <シリーズ名> (レーベル名)と言うのが今回に限っての基本ルールの様子。
シリーズ名とレーベル名で分類すれば、シリーズでまとめて表示することが出来るので、ここまでは簡単。
一部表記ゆれの問題でうまく行っていないものもあったが、ごく少数だったので今回は無視した。
具体的には「目玉焼きの黄身 いつつぶす?」の2巻だけ、? が全角の?になっていてまとめられていない。
表記ゆれの問題はまた今度対策を試みてみたいところ。

巻数を得るのが意外と厄介。
シリーズ名とレーベル名を除いた残りから数字を取り出してくる方法である程度もってこれるが、これだとタイトル中の数値なども拾ってしまう。
また、数値ではなくサブタイトルで分かれているケースもある。
比較的うまく取れるのは、同シリーズ内のタイトルで差分を取って、残りを巻数とする方法。
これでほぼ取れる。
巻数で並べるのは、タイトルでのソートでは不十分。
よくある 1、10、2、3 的な並びになる。
数値は数値として認識して並べる必要がある。
これはアラビア数字以外に漢数字、ローマ数字から数値を得るようにすれば、ほぼ問題なくできた。
ただし、1巻は数値が付かないケースがある。
○○、○○2、○○3 と言うようにタイトル付けされている本が多い。
これは、差分を取った時にブランクとなった場合は1巻とみなし、他の巻で使われている数値種(アラビア数字、ローマ数字等)の1を割り当てることでうまくいく。

ローマ数字は差分の時うまくいかないケースが残っている。
I II III で差分取ると、最初の I が共通なので消えてしまう。
で、消えても I は上述の処理で 1 が入るけど、他は個1ずれる。
ローマ数字の場合は特殊処理が必要そう。

サブタイトルで分かれている場合はうまくいかない。
最初の方にある「ALL AROUND TYPE-MOON ~アーネンエルベ - Bすけ、 TYPE-MOON | ( の日常 ) | ( 狂詩曲 )」がそう。アーネンエルベの日常 と アーネンエルベ狂詩曲 で単純比較だから後半部分だけとれておかしなことになっている。
この辺りは形態素解析か、単純に文字種(記号、アルファベット、漢字平仮名等)から区切りを見つけて、その位置で分離するなどしないとうまくいかなさそう。
ただ、今回は入っていないがぼくらのシリーズのようにぼくらの○○と言うような強敵も存在する。
サブタイトルの場合は、単純ソートだが発行日に差があるのなら、それを利用してソートした方がより精度が上がりそうだ。
一気に電子化されてその日付が入っている場合もあるので、その時はお手上げだが。
後、2巻(1)、2巻(2)などと言うナンバリングされているものもあって、二段階のナンバリングも考慮しないと難しいようだ。
後半の()内の数値が10に届かないなら文字ソートでもうまく並ぶが。

表示するタイトル名はシリーズ名とすると不都合がある場合もあるようなので、シリーズ名をそのまま使うのは好ましくなさそうだった。
【「○○」シリーズ】といったシリーズ名がつけられていたりするから。
そのため、複数巻で前から比較して相違がある場所までをタイトルとすればおおむねうまく行く。
ただ、○○(1)、○○(2) などで差分を取ると ○○( が残るので、末尾の ( などは取り除く。
空になったりした場合はシリーズ名や1巻のタイトルをそのまま使う。

このような処理をしてまとめてみたが、そこそこうまくまとめて表示できた。
対処療法的に処理を追加していき、綺麗に分類されると楽しいので、時間ある時にまた遊んでみたいところ。
抜けるケースを潰すではなく、スマートに処理できる方法があるといいんだろうけど、泥臭い方法も悪くない。


投稿者 Takenori : 2015年10月06日 17:49




comments powered by Disqus
Total : Today : Yesterday : なかのひと