nutch-0.9に含まれるWordExtractorを使って日本語を含むMicrosoft Wordファイルをテキスト化しようとしたら
java.lang.StringIndexOutOfBoundsException: String index out of range: -101 at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:881) at java.lang.StringBuffer.substring(StringBuffer.java:416) at org.apache.poi.hwpf.model.TextPiece.substring(TextPiece.java:88) at org.apache.nutch.parse.msword.WordExtractor.extractText(WordExtractor.java:190) at org.apache.nutch.parse.msword.Test.main(Test.java:41)
こんな例外が起きる。
nutchのbugzillaにも報告されてた(ASF Bugzilla Bug 41076 )ので、そこにあったパッチを当ててみる。
$ wget http://issues.apache.org/bugzilla/attachment.cgi?id=19798 --12:28:16-- http://issues.apache.org/bugzilla/attachment.cgi?id=19798 => `attachment.cgi?id=19798' issues.apache.org をDNSに問いあわせています... 140.211.11.4 issues.apache.org|140.211.11.4|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 4,066 (4.0K) [text/plain] 100%[=====================================================================================================================================>] 4,066 --.--K/s 12:28:17 (45.85 KB/s) - `attachment.cgi?id=19798' を保存しました [4066/4066] $ patch WordExtractor.java < "attachment.cgi?id=19798" (Stripping trailing CRs from patch.) patching file WordExtractor.java $
これで例外が起きなくなった。
bugzilla上では解決したことになってるけど、最新ソースをsubversionのtrunkからとってきてもパッチが必要。
おかしいなあ。