新しいポスター情報から単語解析&相関図出力の並列化
今回ポスター内容が更新されたとのことなので、csvファイルをいただいてパースするところからやり直しました。
まず今まで自分でファイルから一行ずつ読込んでsplice(',')を使って調べていましたが、これをすると英文中のコンマでも区切れてしまうので、Rubyに標準でついているCSVパーサを使うことにしました。
require "csv"
source = CSV.readlines(filePath) #ファイル読込み
source.slice(1..-1).each do |parts|
entry = Array.new
entry.push(parts[0])
entry.push(parts[2])
entry.push(parts[12])
entry.push(parts[4])
if entry[1] =~ /[^\w ]/ || entry[3] =~ /[^\w ]/
posters.push(entry)
end
とすることで、必要な部分だけ回収できるようになりました。
次に、Rubyで簡単に並列化ができるようになる"Parallel"というライブラリを用いて、ポスター相関ファイルを読込んで相関図を作成するプログラムを作成しました。
ParallelについてはRuby で並列実行処理を簡単に書くのサイトさんで調べさせていただきました。自分のプログラムではハッシュを順番に見るところで、
Parallel.map(@posterDistance) do |posterHost, target| #全てのポスターについて相関画像出力
gv = Gviz.new
gv.global layout: 'neato', overlap: false
gv.edges arrowhead: 'none'
gv.nodes style: "filled"
makeEdges(posterHost, gv, @depth)
gv.node "#{posterHost[0]}".to_sym, label: "#{posterHost[0]}:#{posterHost[1]}", color: "skyblue"
gv.save("#{dir}/#{posterHost[0]}", :png)
end
とすることで並列化してグラフを作成・ファイルに出力を行うようにしました。
現在単語の頻度解析プログラムを走らせており、6時間後頃に終了すると思われるので、次回新たなデータを用いて相関解析を行ってみようと思います。