Skip to content

Instantly share code, notes, and snippets.

@konoha81
Created January 22, 2015 15:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save konoha81/91ff2e1e343da15b021e to your computer and use it in GitHub Desktop.
Save konoha81/91ff2e1e343da15b021e to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl
use strict;
use utf8;
use Encode;
# 出現確率ファイルを読み込む
# Like.txtの読み込み
open(LIKE, "Likeprob.txt") or die "$!";
open(DISLIKE, "Dislikeprob.txt") or die "$!";
my $like;
my $dislike;
my %like_hash = 0;
my %dislike_hash = 0;
while(<LIKE>){
chomp;
my @list = split(/\t/);
$like_hash{$list[0]} = $list[1];
}
close(LIKE);
while(<DISLIKE>){
chomp;
my @list = split(/\t/);
$dislike_hash{$list[0]} = $list[1];
}
close(DISLIKE);
# LIKE/DISLIKE判定後の配列
my %judge;
my %judge_test;
# 解答データのLike/Dislikeを取得
open(TEST, "train_id.txt") or die "$!";
my @id;
while(<TEST>){
chomp;
@_ = split("\t");
push(@id,@_[0]);
if(@_[1] =~ /Like/){
$judge_test{@_[0]} = "Like";
}elsif(@_[1] =~ /Dislike/){
$judge_test{@_[0]} = "Dislike";
}else{
print("ERROR!\n");
}
}
close(TEST);
# クローズドテスト用タグの読み込み
# 教師データにはLikeが194個、Dislikeが96個存在する
my $like_num = 194;
my $dislike_num = 96;
my $total = $like_num + $dislike_num;
open(IN,"test.txt") or die "$!";
while(<IN>){
chomp;
my $like = log($like_num/$total);
my $dislike = log($dislike_num/$total);
my @list = split(/\t/);
my @taglist = split(",", @list[1]);
for(my $i=0; $i<$#taglist; $i++){
if(defined($like_hash{$taglist[$i]})){
$like += log($like_hash{$taglist[$i]})
}else{
$like += log(0.000001);
}
if(defined($dislike_hash{$taglist[$i]})){
$dislike += log($dislike_hash{$taglist[$i]});
}else{
$dislike += log(0.000001);
}
}
# Like/Dislike判定
if($like > $dislike){
# print "@list[0] Like\n";
$judge{@list[0]} = "Like";
}elsif($dislike > $like){
# print "$like $dislike Dislike\n";
$judge{@list[0]} = "Dislike";
}else{
print "$like $dislike same\n";
}
$like = 0;
$dislike = 0;
}
close(IN);
my $j=0;
my $k=0;
for(my $i=0; $i<=$#id; $i++){
if($judge{$id[$i]} eq $judge_test{$id[$i]}){
$j++;
}elsif($judge{$id[$i]} ne $judge_test{$id[$i]}){
$k++;
}else{
print("ERROR");
}
}
print("correct: $j , incorrect: $k \n");
my $p= $j/($j+$k)*100;
print("the precision is $p\%\n");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment