2013年2月17日日曜日

ローマ字を日本語の五十音順にソート

日本語でソートするのは面倒(?)でローマ字でソートしたいけど標準のsortだとアルファベティカルに並べてしまう.ということで,ローマ字をスコア化するスクリプトを書いた.既に誰かやってるのかな?てきとーに探しても見つからなかったので作った.

特徴

  • 短い?
  • 遅い
  • 改良しやすい
  • ローマ字にしか使えない
ということで,誰かもっと良いのがあったら教えてください.もしくは,改良しましたとかあったら報告ください.

コード

スコア算出用のテーブルの用意

母音をあ~おで1~5,子音をあ行から順に+5ずつ増加.これで1~50までのスコアを作る.

ローマ字による文字列をスコア化

正規表現でマッチさせます.つまり,遅い.解説も何もないので,下記コードを見てください.
CalculateScoreは1音節分のスコアの計算,ConvertNameToDigitsは1音節ずつマッチさせた結果を連結します.ConvertNameToDigitsで得た結果をリストに格納してsortに渡せば,ローマ字でソートしてくれます.ConvertNameToDigitsの結果をキーにした連想配列を作って,keysでkeyだけ取ってきてソートした順に連想配列のvalueを取るのが普通の使い方かな?
正規表現で音節を取ってくるところが気に入ってる.

使い方

  • ConvertNameToDigits("sato"); みたいに使います.結果は,文字列で1120 (=(10+1)+(15+5))です.

0 件のコメント:

コメントを投稿