QA@IT

MeCabのnode.featureをsplit(",")するとエラーになることがある

1959 PV

常に再現するわけではないのですが、以下のエラーメッセージが表示されます:

`split': invalid byte sequence in UTF-8 (ArgumentError)

force_encoding("utf-8")を実行しているのになぜ?

    node = mecab.parseToNode(body.content)
    while node do
      f = node.feature.force_encoding("utf-8").split(",")
      word.push({:w=>node.surface.force_encoding("utf-8"),:f=>f})
      node = node.next
    end
  • 直接の回答ではありませんが、 force_encoding は、Stringを構成するバイト列に対するエンコード情報を指定のエンコーディングにするだけで、バイト列の並びは変更しません。ですから、元データが実際にUTF-8として不正なバイト列を含んでいるなら、invalid byte sequence in UTF-8 になる可能性はあります。 -

回答

mecab.parseToNode()に食わせるテキストが大きすぎるとこの現象が起きるようです。
パラグラフ単位に分割して処理したら、エラーがなくなりました。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。