Index > タイトルを50音順にソートする(Senを使用)(sen)
Thu, February 10, 2005

タイトルを50音順にソートする(Senを使用)(sen)

ブログのタイトルを 50音順にソートしたい。

話を簡単にするために、タイトルだけを 抜き出して一行一タイトルにしたテキストファイルを用意し、 それを50音順にソートして標準出力するコードを考えてみる。

50音でソートするために、漢字の読みを調べる必要がある。 そのため、Sen を利用します。

コード

ソートプログラム

sort.py

import sys

import java.lang as lang
import java.io as io
import java.util as util

import sen 


false=0
true=1

ENC="UTF-8"


PATH_TO_SENXML=sys.argv[1]
TITLE_FILE=sys.argv[2]




helper=sen.SenHelper(PATH_TO_SENXML)

list=util.ArrayList()
br=io.BufferedReader(io.InputStreamReader( io.FileInputStream(io.File(TITLE_FILE)),ENC ))
while(true):
    line=br.readLine()
    if line==None:
        break
    list.add( line )

br.close()


indexUtil=sen.IndexUtil()
for line in list:
    #print line
    word=sen.Word()
    word.text=line
    word.reading=helper.getReading(line)

    indexUtil.add(word)


for key in indexUtil.getKeys():
    im=indexUtil.getIndexModel(key)
    if len(im.getWords())>0:
        print im.getKey()
        for word in im.getWords():
            print "\t"+word.text

これを実行するには、以下の準備が必要です。

  1. Sen をインストールしておく
  2. senhelper.jarが必要
  3. テスト用のソート対象となるタイトルを列挙したテキストファイル

タイトルを列挙したテキストファイル

titles.txt

ウィキペディアデータの利用 Javaでデータを取り出す方法
ドラッグ&ドロップの実装(Java)
文字をイメージとして生成したい(phpをコマンドラインで使う)
タイムマシンテレビ...こんなHDDレコーダー内蔵テレビがほしい
実行時のOSを調べる(Java) 
ランタイム時の画面サイズを取得する(Java)
今日の日付でアーカイブを作成したい 
2ページ分のPDFを1ページに割り付ける 
複数のPDFを一つのファイルに結合する ( pdftk を使う ) 
ふたつのファイルの日付を比較して、新しいかどうか調べる

実行

$ export CLASSPATH=senhelper.jar; jython sort.py /path/to/sen.xml titles.txt

結果

キ
    今日の日付でアーカイブを作成したい 
タ
    タイムマシンテレビ...こんなHDDレコーダー内蔵テレビがほしい
ニ
    2ページ分のPDFを1ページに割り付ける 
ノ
    ウィキペディアデータの利用 Javaでデータを取り出す方法
フ
    複数のPDFを一つのファイルに結合する ( pdftk を使う ) 
    ふたつのファイルの日付を比較して、新しいかどうか調べる
モ
    文字をイメージとして生成したい(phpをコマンドラインで使う)
ラ
    ランタイム時の画面サイズを取得する(Java)
ジ
    実行時のOSを調べる(Java) 
ド
    ドラッグ&ドロップの実装(Java)
 Twitter
follow me on Twitter
 Categories