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からとってきてもパッチが必要。
おかしいなあ。

カテゴリー: 技術情報