LoginSignup
3
1

More than 5 years have passed since last update.

EXEファイルから日本語文字列を抽出する例

Last updated at Posted at 2018-04-03

はじめに

  • macOS 上で行いたい
  • OS 附属の strings は日本語に対応していない
  • istrings や jstrings といった派生ツールがあるようだけど導入が大変そう(brew で見つからない)
  • スクリプト言語だと融通が効く

ということで Ruby を使います。

コード

require "pathname"
require "kconv"
require "natto"

mecab = Natto::MeCab.new("-F%f[0]")
bin = Pathname("binary.exe").read.toutf8.scrub
bin.scan(/[\p{Han}\p{Hiragana}]{2,}/) do |e|
  parts = mecab.enum_parse(e).to_a[0..-2]
  if parts.size == e.size
    next
  end
  puts e
end

要点

  1. kconv の toutf8 を使ったのはエラーになりにくいため
  2. scrub で不正なコードを除去する(簡単に書けるの便利)
  3. 漢字 または ひらがな が含まれる2文字以上の言葉が対象
  4. 意味不明な漢字の羅列は MeCab に通したとき1文字ずつに分断される傾向があるので、分断された数と文字数が等しい場合は意味不明な文字列と見なしてスキップする
  5. ここでは行なってないですが parts 配列の要素にある feature メソッドは "名詞" などの種類を返すので、それをうまく利用してフィルタしてもいい

実行結果

閙酣
鑵酣
鐫酣閧
(snip)
韶貲
鞨貲
靨貲頸
が間違っています
を選択して下さい
まだまだこれからですね
困ったなあ
負けたか
こんなはずじゃ
本当は負けず嫌いなんですよっ
の書き込みに失敗しました

それでも意味不明な漢字の羅列が大量に出てきてしまいますが、あらかじめわかっている言葉で検索すると日本語の塊にたどりつきやすいです。

3
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1