島村 優太郎
ml****@ryne*****
2006年 10月 19日 (木) 23:55:31 JST
お久しぶりです、島村です。 携帯向けのコンテンツに使用するため、携帯の絵文 字の数字を正規化したり、 http://www.mainichi-msn.co.jp/kurashi/katei/news/ 20061005ddm013100062000c.html こんな感じで小文字にして投稿される文字を勝手に 正規化したりしてます。 携帯系は検索に優しくない投稿だらけで、 しかも新しい言葉がどんどんでてくるのでN-GRAMしか 選択肢がないし、といいことがありません。 ひらがな/カタカナの小文字を大文字にするのもだ いぶ無茶なのですが、 携帯系はこれを行った方が逆に良い感じになってい ます。 そんなわけで./lib/str.cの方をちょこちょこいじっ て、記号の正規化を行っているのですが、 ひとつわからないところがあるのでお力を貸してい ただきたいと思い、投稿させていただきます。。 記号の→①これ系のお話です。 sjisで見ているのですが、 ①(0x8740)〜⑨(0x8748)までは switch (c1 & 0x0f)の case 7 :の部分で (./lib/str.c:748) if (0x40 <= c2 && c2 <= 0x48) { ctype = sen_str_others; *d = c2 - 0x870f; } として、半角数字に正規化しているのですが、 ⑩〜⑳の間の場合、(例として⑰) 1(0x31)と7(0x37)にわけて*dに入れる時、 sen_str_digitのフラグ等も追加して行かなきゃいけな いと思います。 そこら辺がよくわかってないんですが‥ (わかんないならやるな、って感じですが) else if(0x49 <= c2 && c2 <= 0x53) { // ⑩〜⑳の場合 で、 switch(c2){ ‥ case 0x50: ここで1(0x31)と7(0x37)と1文字1文字で認識させたい場 合、 (共にsen_str_digit)どうすればよいのでしょうか? 普通に*d++で入れていくと0x3130という文字になって しまいますし、 ここの部分だけがどうあがいてもうまくいかないで す。 (*d++とlength++やったりとか、めちゃくちゃしてます) C言語の基本かもしれないのですが、よろしくお願 いします。。 /* 余談ですが、 最近は"ごまちゃん"等の"ゃ"をア行にして"ごまちあ ん"としたりするのが多くなってます。 ご丁寧にあをカタカナのアにして"ごまちアん"とす る人もいるので、 いっそのことカタカナとひらがなも正規化したくな ります。 携帯でインターネットが広まるにつれて、日本語が どんどんおかしくなってるような。 */ ------------------☆ 島村 優太郎 ml****@ryne***** ------------------☆