- PR -

Javaでのテキスト処理について

1
投稿者投稿内容
Dream
常連さん
会議室デビュー日: 2004/01/29
投稿数: 43
投稿日時: 2004-06-13 21:33
こんにちは。
今大量のテキストデータを、別のリストと比較してマッチしたのものを抽出するという処理を行うことになりました。
私はまだJavaしか使うことができず、Javaでプログラムを作ろうと思っているのですが、大量のデータを扱うので処理速度を上げたく、Perlを覚えようかなとも考えています。
ただ、Javaにも正規表現ライブラリ(Jakarta ORO)があるのを知り、それを使おうとも考えており、悩んでいます。そこでお聞きしたいのですが、処理速度は次の3つのうちどれが一番速いのでしょうか? それとも多少の処理速度の差はあるけども、Javaを使った方がメリットが多いのでしょうか?

1)Java core LibraryのStringクラスやCharcterクラスを利用したもの
2)Java の正規表現ライブラリを利用したもの
3)Perlを利用するもの

すいませんが、よろしくお願いいたします。
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 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 ]
kom
会議室デビュー日: 2003/09/19
投稿数: 10
お住まい・勤務地: お月様の見える家
投稿日時: 2004-06-14 00:52
一般的にPerlはインタプリタなので、それほど処理速度は速くないです。
JavaはVMが立ち上がるまでは時間がかかりますが、立ち上がってしまえば
処理速度はPerlよりも速いと思います。

どちらの方が速く書けるか、ときかれればPerlでしょう。
System.out.printlnなんて書かなくてもいいわけですから。
また、再利用する機会が多いのならば、PerlよりもJavaの方がきれいに書けるのでは
ないかと思います。Perlもオブジェクト指向的にかけると聞いていますが、
私には難しく、理解できませんでした。
継承等の仕組みはJavaの方がわかりやすいと思います。

かなり大雑把に書きましたが、こんな感じで言語ごとに特徴があったりするわけで
1つの言語しか使えないより、複数の言語をその場その場で
使い分けた方が絶対良いはずです。
いい機会なので、3つとも書いてみて、その結果を
こちらに書いてみましょうよ。
_________________
^^
明日はどっちだ?
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2004-06-14 01:22
OROでなくても、
J2SE1.4には java.util.regexパッケージもありますよ。
yuu
大ベテラン
会議室デビュー日: 2002/06/12
投稿数: 152
お住まい・勤務地: 美味しいケーキ店のそば
投稿日時: 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 ]
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-06-14 11:04
引用:

komさんの書き込み (2004-06-14 00:52) より:
一般的にPerlはインタプリタなので、それほど処理速度は速くないです。



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で直接書いたアプリケーションほど速くないのは、数値型にも文字列型にも必要に応じて自在に解釈が切り替わるデータ型とか、いくらでも延びたり縮んだりする配列とか、そういう「書き手の利便性」を得るための仕掛けに対するオーバーヘッドのせいだと思います。

決して「インタプリタだから遅い」わけではありません。

あ、ただ、
引用:

また、再利用する機会が多いのならば、PerlよりもJavaの方がきれいに書けるのでは
ないかと思います。Perlもオブジェクト指向的にかけると聞いていますが、
私には難しく、理解できませんでした。
継承等の仕組みはJavaの方がわかりやすいと思います。


この辺は確かにうなずけますね。。Perl5のオブジェクト指向機能はいかにも「付け足し」みたいな感じですしね。。(付け足しにしてはうまくできてると思いますが)
1

スキルアップ/キャリアアップ(JOB@IT)