絵文字変換テーブルをGraphvizで可視化してみた


f:id:darashi:20090319210704p:image

絵文字変換テーブルを洗練させる方法がないか検討しています。まず現状を把握しようと思い、no titleをGraphvizで可視化してみました。巨大な画像ファイルが得られたので一部を抜粋しています。変換に使用したスクリプトは以下の通りです。emoji_X2XX.txtと同じディレクトリに置いて実行してください。なお、今回のスクリプトでは絵文字と絵文字が直接対応していないものは除外してあります。

#!/usr/bin/ruby -Ku
require 'kconv'

class Tables def add_edge(from, to) return unless to =~ /^%.+%$/ @table[[from,to].map{|x|x.gsub(/%/,"")}] = 1 end def initialize tables = %w(emoji_i2es.txt emoji_e2is.txt emoji_s2ie.txt) @table = {} tables.each do |name| open(name) do |f| f.gets f.each do |l| a = l.toutf8.chomp.split(/\t/) add_edge(a[0], a[2]) add_edge(a[0], a[3]) end end end end def dot puts digraph Emoticon { @table.each do |k,v| from, to = k puts %{#{from}” -> ”#{to}“;} end puts } end end

t = Tables.new t.dot

図中で双方向に連結されている3ノードの完全グラフはキャリア間で共通の絵文字があること、2ノードで双方向に連結されている場合は2キャリア間で一対一に対応する絵文字があることを示しています。しかし、現実はそれほど単純ではないようで、上記画像のような複雑な絵文字群も相当数見受けられます。さて、どうしたものでしょう・・・。