MeCabで分かち書きした時、元の文章のどこに半角スペースがあったかわからなくなって困った。

Rubyバインディング使った場合、

result = ''
node = MeCab::Tagger.new.parseToNode('filename.jpg 1024バイト')
result += while node = node.next
  # surfaceに何らかの処理
   node.surface + 'ざわざわ・・・'
end
puts result
=> filenameざわざわ・・・.ざわざわ・・・jpgざわざわ・・・1024ざわざわ・・・バイトざわざわ・・・

こんな感じでsurfaceを単につなげていくと半角スペースが無くなる。困ったのでフォーマットで適当なセパレータを入れてsplitすることにした。

MeCab::Tagger.new('-F%M__SEP__').parse('filename.jpg 1024バイト').split('__SEP__')
=> ["filename", ".", "jpg", " 1024", "バイト", "EOS\n"]

これはヘボい・・・。俺が知らないだけでなんかもっと素敵な解決策があると思うんだけど・・・。

Comments


Option