- - PR -
Javaでのテキスト処理について
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-06-13 21:33
こんにちは。
今大量のテキストデータを、別のリストと比較してマッチしたのものを抽出するという処理を行うことになりました。 私はまだJavaしか使うことができず、Javaでプログラムを作ろうと思っているのですが、大量のデータを扱うので処理速度を上げたく、Perlを覚えようかなとも考えています。 ただ、Javaにも正規表現ライブラリ(Jakarta ORO)があるのを知り、それを使おうとも考えており、悩んでいます。そこでお聞きしたいのですが、処理速度は次の3つのうちどれが一番速いのでしょうか? それとも多少の処理速度の差はあるけども、Javaを使った方がメリットが多いのでしょうか? 1)Java core LibraryのStringクラスやCharcterクラスを利用したもの 2)Java の正規表現ライブラリを利用したもの 3)Perlを利用するもの すいませんが、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2004-06-13 22:56
書籍 詳説 正規表現 第2版 (1. Amazon 2. オライリージャパン 3. O'Reilly) に
各種のライブラリの速度の比較が合ったかと思います。 手元にないので詳細は判りませんが、上の2.のリンクで目次を見ればある程度期待できるかと。 また、3.のリンクの Sample Chapters Chapter 8:Java(PDF) で Javaについて書かれた章の 一部を見ることができます。 この書籍は去年ちょっとだけ読んだのですが、かなり詳しく書いてあった印象があります。 [ミススペル修正, リンク追加] [ メッセージ編集済み 編集者: ちいにぃ 編集日時 2004-06-14 01:50 ] | ||||||||
|
投稿日時: 2004-06-14 00:52
一般的にPerlはインタプリタなので、それほど処理速度は速くないです。
JavaはVMが立ち上がるまでは時間がかかりますが、立ち上がってしまえば 処理速度はPerlよりも速いと思います。 どちらの方が速く書けるか、ときかれればPerlでしょう。 System.out.printlnなんて書かなくてもいいわけですから。 また、再利用する機会が多いのならば、PerlよりもJavaの方がきれいに書けるのでは ないかと思います。Perlもオブジェクト指向的にかけると聞いていますが、 私には難しく、理解できませんでした。 継承等の仕組みはJavaの方がわかりやすいと思います。 かなり大雑把に書きましたが、こんな感じで言語ごとに特徴があったりするわけで 1つの言語しか使えないより、複数の言語をその場その場で 使い分けた方が絶対良いはずです。 いい機会なので、3つとも書いてみて、その結果を こちらに書いてみましょうよ。 _________________ ^^ 明日はどっちだ? | ||||||||
|
投稿日時: 2004-06-14 01:22
OROでなくても、
J2SE1.4には java.util.regexパッケージもありますよ。 | ||||||||
|
投稿日時: 2004-06-14 01:46
Dreamさん、こんばんは
>今大量のテキストデータを、別のリストと比較してマッチしたのものを抽出・・・ とありすが、マッチングには高度な正規表現(.* ^ $ 以外)が必要なのでしょうか? もし、高度な正規表現がいらないなら 1)Java core LibraryのStringクラスやCharcterクラスを利用したもの が高速にできる可能性が一番高いと思います(それなりの良いアルゴリズムを書かないとダメですが)。 もし、高度な正規表現が必要なら 2) か 3) ですが、 単純に正規表現のライブラリーで 比較すると Perl の正規表現はC言語、Java(JDK1.4)の正規表現はJavaで書かれているので Perl の方が早いと思います。 本気で高速化をねらうなら 全部C言語で書いてみては [ メッセージ編集済み 編集者: yuu 編集日時 2004-06-14 02:08 ] | ||||||||
|
投稿日時: 2004-06-14 11:04
Javaの掲示板なのであまりPerlの話をするのも気が引けますが、これは若干誤解を招く表現なので少し。 Perlは、shやcshのような単純逐次実行型の言語ではありません。 スクリプトを解析、コンパイルして「OPコード」のツリーを作り(微妙に最適化なんかもされるらしいですよ)、それをOPコードインタプリタが実行しているのです。Javaにそっくりでしょ? スクリプトに文法エラーがあると、「Execution of x.pl aborted due to compilation errors.」って怒られて全く実行されないところからも、単純な「インタプリタ型」とは違うことがわかると思います。シェルスクリプトや昔のBASICなんかだと、エラーがある行の直前までは実行されますよね。 そして、各々のOPコードは対応するC言語の関数で実現されていて、OPコードツリーを実行していくことはCの関数を実行していくことです。だから、「スクリプト言語」という響きから一般的に想起されるほどの遅さはPerlにはありません。 それでもPerlがやはりCで直接書いたアプリケーションほど速くないのは、数値型にも文字列型にも必要に応じて自在に解釈が切り替わるデータ型とか、いくらでも延びたり縮んだりする配列とか、そういう「書き手の利便性」を得るための仕掛けに対するオーバーヘッドのせいだと思います。 決して「インタプリタだから遅い」わけではありません。 あ、ただ、
この辺は確かにうなずけますね。。Perl5のオブジェクト指向機能はいかにも「付け足し」みたいな感じですしね。。(付け足しにしてはうまくできてると思いますが) | ||||||||
1
