- - PR -
StringTokenizerを使って日本語切り分け
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-03-31 14:35
ども、お世話になっております。
今回、長い文字列を画面に表示する際に折り返して表示したく下記のようなメソッドを作ってみました。
上記のメソッドで英語の文字列の場合は問題なく単語単位で折り返し表示できました。 しかし日本語ではあたりまえなんですが文字列がスペースで区切られていない為に文字列全部が一つのTokenとされてしまいます。 StringTokenizerを使って日本語切り分けするにはどのようにすればできるのでしょうか? | ||||
|
投稿日時: 2005-03-31 14:47
うーん、StringTokenizerは特定の文字によって文字列を区切る、ってことしかやってくれないので、日本語の単語境界を検出するのはちょっと無理ですね。
何を使えばいいか?ちょっと思いつかないですが・・・ java.util.regexを見てみると、正規表現の中に単語境界をマッチするエスケープシーケンスがあるようです。もしかしたらある程度まではこれでできるかも?、でも使ってみたことないので確証はないです。 自力でやるとしたら・・・一文字ずつ走査して、同一の文字種(漢字とかひらがなとか)の連続をひとつの単語としてみなす・・・っていう、テキストエディタの単語選択なんかがよくこういう動きをしますが、それで折り返しに不自然のないくらいにはなんとかなるかもしれませんね。 何かいい解決策知ってる方がいたら僕も知りたいです。 [ メッセージ編集済み 編集者: jack_pma 編集日時 2005-03-31 14:54 ] | ||||
|
投稿日時: 2005-03-31 15:03
単純に文字数制限じゃダメなのでしょうか?
メールとかみたいに。 それ以外だと思いつきません。 | ||||
|
投稿日時: 2005-03-31 15:28
http://ultimania.org/sen/
形態素解析エンジンのsenというのがあります。 jakarta luceneとsenを組み合わせて 日本語による全文検索に使われたりしていますね。 | ||||
|
投稿日時: 2005-03-31 15:30
あ、確かに、目的が折り返しなだけなら、単純に一定の文字数で改行、でもいい気がしますね。それで済むならそのほうがずっと簡単ですしね。
| ||||
|
投稿日時: 2005-03-31 15:33
禁則処理クラス
http://www.kanazawa-net.ne.jp/~pmansato/kinsoku.htm 参考に。 検索用語としては 段落整形 とかはエディターに多いです。整形マクロも多数ある。 UNIX の古代のコマンドも発掘はできると思いますが。 あるいは 表示部品を使い、文字列をそこに投げ込む、最近のブラウザは禁則してます。 印刷なら XSL-FO(アンテナハウス) や http://CSSJ.JP/ など。 | ||||
|
投稿日時: 2005-03-31 16:48
jack_pmaさん、(株)ぽちさん、かつのりさん、MMXさん、ご意見ありがとうございました。
やっぱ、簡単にはいきませんね・・・ 「単純に一定の文字数で改行」といかせてもらいます。
禁則処理クラス、形態素解析エンジンのsenも今からじっくり参考にします。 | ||||
|
投稿日時: 2005-03-31 23:21
日本語の切り出しを標準ライブラリで扱っているのは java.text.BreakIterator
くらいな物でしょうかね。。 これを使うと単純な分解程度であるなら可能かもしれません。 もう少し高度な処理をしたい場合は、IBMのICU4JのRuleBasedBreakIteratorなんか 利用すれば突っ込んだ処理も可能かもしれませんね。 実際に試したうえで報告したいのですが、、最近、疲労で、、疲労で、、w |
1