昔から、Iとlと1とか、Oと0とかを見分けやすいフォントは普及していますが、日本語で似たような文字を容易に判別できるフォントはあまり見ない気がします。
#住所の変換処理 address=address.gsub('一丁目','1丁目') .gsub('ニ丁目','2丁目') .gsub('三丁目','3丁目') .gsub('四丁目','4丁目') .gsub('五丁目','5丁目') #(実際にはもっと続くし、もう少し複雑な処理をしていますが省略)
使い方ヒント: 「これは臭う」という行を見付けたら、各行のをクリックしてマーキングしておきましょう(要Twitter OAuth認証)
文字列検索・置換が数珠つなぎになってる点はツッコまなくていいものなん?
うん・・・コード表記なんて曖昧なこと言ってごめんなさい。普通にUnicodeエスケープシーケンスの事と分かってくれると思ってしまった。"\u93f1丁目"とかと書いても可読性が向上しないと。
ユーザーが「に」からの変換でやらかす場合があるからカタカナニと数字二の両方の処理をつくっておくほうがいいに違いない。 数珠つなぎはjquery普及しすぎてみんな感覚麻痺してないかな。jqueryキモイ...
もちろん数珠つなぎ自体が悪いわけじゃなく、使い方と程度次第だぁね。
このコードだと、「一丁目」がヒットした場合、二丁目以降は事実上ヒットしないわけで、空振りの検索置換が延々と続く構図になる。
無駄にCPUパワーを浪費する悪の枢軸です。
最初のヒットで抜けることが出来るなんて条件は一つも書かれていない。 "一丁目10番,五丁目3番"とかという可能性も考慮しようよ。
ええと、
> "一丁目10番,五丁目3番"
という文字が入力なら、この実装は妥当、というご意見ですかね。ホントにほんとかなぁ。。
自分ならまずこんな実装はしないし、臭いが変わるだけでいずれにせよウンコに見えてしまう。。
「実際にはもっと続く」らしいし、十一以降も延々とgsubでないの。
.gsub('十一丁目','11丁目)
だと期待通りに動かないから
.gsub('十1丁目','11丁目')
ってことでしょうか.....どっちにしてもちょっと...
ああ、確かに
slimymarsさんの主旨に気づけなかったorz
んー、うんこって簡単に言ってる人、代案あって言ってるんだよね?
Rubyの場合、ブロックを使って、「マッチした内容を元に演算した値で置換」ってことができますから
address=address.gsub(/([[:漢数字:]]+)丁目/) { "#{Kansuuji2Int($1)}丁目" }
ってやり方があります。[:漢数字:]文字クラスとかKansuuji2Intメソッドとかは疑似コードですけど。
> keiichirohさん
簡易な住所パーサー書くかな。自分に限らず、わりとよく使われる手じゃなかろうか。
もちろん自分の方法がベストと言うつもりは更々ないんで、その辺は誤解なきよう。他にも代案なんて考えたらコロコロ出てきそうなものだし。
ちなみに、keiichirohさんは数珠つなぎがベストという見解?
その後、ちゃんと十の位と一の位を分けて扱って、九十九丁目まで対応しました。
Chietherさん>日本国内で平然と「四十丁目」なんてものが現れる地域は北海道くらいですね。
うん!だって「二丁目」はkuma056さんの方式でいいけど、そもそもの問題である「ニ丁目」はその方式じゃ処理できないから。という理由で、結局はイレギュラーな例に関しては数珠つなぎするしか無いと思うんだ。それならば正規表現混ぜるよりもいっそ全部・・・というのは個人的な嗜好かな。正規表現で大枠押さえて数珠つなぎでフォローというのがベストなのかな。
よく考えると、「ニ丁目」という入力間違いの対処が入っていたけど、その代わりに(元々入っていた?)漢数字の「二丁目」の変換コードを削ってしまったっていうデグレードじゃないかと思ったわけなんだけど、元データにはそういう入力間違いはありえないという要件だったりする?こういう変換をするってことは、手入力データかなと思った。カタカナの「ニ丁目」とかは「にちょうめ」って打って変換すると起こったりする入力間違いだから。あり得ないなら正規表現だけでOKのはず。
> 結局はイレギュラーな例に関しては数珠つなぎするしか無いと思うんだ
はて、それはいったい何故だろう。
昔(バイトでプログラマーしてた頃だから、十数年前かな)、漢数字⇒int変換用の簡易なパーサー&変換器を書いたことがあるんだ。
その時は、実用性半分、遊び心半分で、「拾⇒10」、「四拾⇒40」、「一〇⇒10」、「二十一⇒21」、「二一⇒21」、「七拾五萬百二⇒750102」、「I⇒1」「O(オー)⇒0」等々、考えうる様々な表記の揺らぎや誤記に対応しまくったんだけど、大した苦労もなく、割と簡単に書けた記憶がある。後から誤記の対応表を増やすのも至極簡単だった。
そこまでやる必要はないと思うけど、ある程度「まとも」な漢数字解析を計算コスト考慮で作るなら、正規表現や、増してや数珠つなぎなんかでは相当難しいと思うけど。
コメント投稿には、twitter認証が必要です。
Twitter認証
ニと二は・・・どうしようもないねぇ。コード表記したとしても可読性は向上しないし。 明朝でセリフつけるくらい?