Changeset 105

Show
Ignore:
Timestamp:
10/19/06 23:42:09 (7 years ago)
Author:
lincoln
Message:

much improved title-preference rewriting + logs that go with it

Files:
2 modified

Legend:

Unmodified
Added
Removed
  • reconcilers/reconciler_mk2

    r89 r105  
    1919#    0.06  17aug06      enhancement: name mapping based on previously learnt names 
    2020#    0.07  19aug06      turn down debugging 
     21#    0.08  20aug06      improved preference-title rewriter, more debugging to logfile 
    2122 
    2223# 
     
    7172#       duplicate checking:             $in->{dupcheck}->{$source}->{$prog_chan}->{$prog_key} 
    7273#       channel list:                   $in->{channels}->{$chan}->{$lang} = $desc 
    73  
     74# 
     75#       used translations               $in->{used_translations}->{$xlate_to}->{num}=count 
     76#                                       $in->{used_translations}->{$xlate_to}->{from}->{$xlate_from}=count 
     77 
     78# history of title preferences uses the following (cache-based) data: 
     79#   $title_xlate_table->{"$primary_title"}->{seen_in_primary} = count 
     80#   $title_xlate_table->{"$primary_title"}->{last_seen_in_primary} = time 
     81#   $title_xlate_table->{"$primary_title"}->{translated} = count 
     82#   $title_xlate_table->{"$primary_title"}->{translation} = title 
     83#   $title_xlate_table->{"$primary_title"}->{alternate}->{"$alt_title"}->{secondary}->{"$source"} = count 
     84#   $title_xlate_table->{"$primary_title"}->{alternate}->{"$alt_title"}->{last_seen_in_secondary} = time 
     85#   $title_xlate_table->{"$primary_title"}->{same}->{"$source"} = count 
    7486 
    7587use strict; 
     
    7890 
    7991my $progname = "reconciler_mk2"; 
    80 my $version = "0.07_19aug06"; 
     92my $version = "0.08_20aug06"; 
    8193 
    8294use LWP::UserAgent; 
     
    127139$reclogic{max_programme_length} = (8 * 60 * 60); # 8 hours 
    128140 
     141# do store a preference title, even if we don't have any alternatives 
     142$reclogic{title_xlate_table_min_alt_progs} = 0; 
    129143 
    130144# 
     
    176190my $setting_override; 
    177191my %cli_override; 
    178 my $title_map_table; 
     192my $title_xlate_table;  # cached 
    179193 
    180194my %amp; 
     
    188202my $opt = { }; 
    189203$opt->{output_file} =           cwd()."/output.xmltv"; 
    190 $opt->{config_file} =           cwd()."/".$progname.".conf"; 
     204$opt->{config_file} =           cwd()."/".$progname.".config"; 
    191205$opt->{log_file} =              cwd()."/".$progname.".log"; 
    192206$opt->{alt_title_file} =        cwd()."/".$progname.".alt_title.log"; 
     
    347361        open(CONF, ">$opt->{config_file}") || die "cannot write to $opt->{config_file}: $!"; 
    348362        print CONF Data::Dumper->Dump( 
    349                 [$setting_override,  $title_map_table  ], 
    350                 ["setting_override", "title_map_table" ]); 
     363                [$setting_override,  $title_xlate_table  ], 
     364                ["setting_override", "title_xlate_table" ]); 
    351365        close CONF; 
    352366        &log(1,(sprintf "updated configuration file %s.\n",$opt->{config_file})); 
     
    489503        my ($log_level,$entry) = @_; 
    490504        printf STDERR "%s [%d] %s\n",$progname, time,$entry if ($log_level); 
    491         printf LOG_FILE "%s [%d] %s\n",$progname, time,$entry if (($log_level) && (!$opt->{nolog})); 
     505        #printf LOG_FILE "%s [%d] %s\n",$progname, time,$entry if (($log_level) && (!$opt->{nolog})); 
     506        printf LOG_FILE "%s [%d] %s\n",$progname, time,$entry unless ($opt->{nolog}); 
    492507} 
    493508 
     
    553568        printf ALT_TITLE_FILE "(1) The following list shows title translations that were used:\n\n"; 
    554569 
    555         printf ALT_TITLE_FILE "  Preferred Title (translated to)   Translated From                  Seen\n"; 
    556         printf ALT_TITLE_FILE "  --------------------------------  ------------------------------  -----\n"; 
    557         my $used = $in->{used_translations}; 
    558         foreach my $key (sort { $used->{$b}->{num} <=> $used->{$a}->{num} } keys %{$used}) { 
    559                 my $used2 = $used->{$key}->{from}; 
    560                 foreach my $key2 (sort { $used2->{$a} <=> $used2->{$b} } keys %{$used2}) { 
    561                         printf ALT_TITLE_FILE "  %-32s  %-30s  %5d\n", $key, $key2, $used2->{$key2}; 
     570        printf ALT_TITLE_FILE "  Times Preferred Title (translated to)  Translated from                Times\n"; 
     571        printf ALT_TITLE_FILE "  ----- -------------------------------- ------------------------------ -----\n"; 
     572        my $u = $in->{used_translations}; 
     573        foreach my $xlate_to (sort { $u->{$b}->{num} <=> $u->{$a}->{num} } keys %{$u}) { 
     574                printf ALT_TITLE_FILE "  %5d %-32s", $u->{$xlate_to}->{num},$xlate_to; 
     575 
     576                my $u2 = $u->{$xlate_to}->{from}; 
     577                my $num = 0; 
     578                foreach my $xlate_from (sort { $u2->{$a} <=> $u2->{$b} } keys %{$u2}) { 
     579                        printf ALT_TITLE_FILE "%s %-30s %5d\n", 
     580                          ($num > 0 ? "                                        " : ""), 
     581                          $xlate_from, $u2->{$xlate_from}; 
     582                        $num++; 
    562583                } 
    563584        } 
     
    565586        printf ALT_TITLE_FILE "\n==========================================================================================================\n\n"; 
    566587        printf ALT_TITLE_FILE "(2) The following table lists ALL the translations we have stored:\n\n"; 
    567         printf ALT_TITLE_FILE " Preferred title (xlate to)         Translated From                    Last used (total) Last seen (total)\n"; 
    568         printf ALT_TITLE_FILE " ---------------------------------- ---------------------------------- ----------------- -----------------\n"; 
    569  
    570         foreach my $key (sort keys %{$title_map_table}) { 
    571                 my $xlate_to = $title_map_table->{$key}; 
    572                 foreach my $key2 (sort keys %{$xlate_to}) { 
    573                         printf ALT_TITLE_FILE " %-34s %-34s %-10s %6d %-10s %6d\n", 
    574                                 substr($key2,0,34), substr($key,0,34), 
    575                                 ($title_map_table->{$key}->{$key2}->{last_translated} ? 
    576                                   (strftime "%a%e%b%y",localtime($title_map_table->{$key}->{$key2}->{last_translated})) : "never"), 
    577                                 ($title_map_table->{$key}->{$key2}->{times_translated} ? 
    578                                   $title_map_table->{$key}->{$key2}->{times_translated} : 0), 
    579                                 ($title_map_table->{$key}->{$key2}->{last_seen} ?  
    580                                   (strftime "%a%e%b%y",localtime($title_map_table->{$key}->{$key2}->{last_seen})) : "never"), 
    581                                 ($title_map_table->{$key}->{$key2}->{times_seen} ?  
    582                                   $title_map_table->{$key}->{$key2}->{times_seen} : 0); 
    583                 } 
     588        printf ALT_TITLE_FILE "+Preferred title (xlate to)          xlate_  preferred title seen in source (times)\n"; 
     589        printf ALT_TITLE_FILE "-Alternate title (xlate from)         times  alternate title seen in source (times)\n"; 
     590        printf ALT_TITLE_FILE " ---------------------------------- -------  --------------------------------------------------------------\n"; 
     591 
     592        foreach my $xlate_to (sort { $title_xlate_table->{$b}->{translated} <=> $title_xlate_table->{$a}->{translated} } keys %{$title_xlate_table}) { 
     593                printf ALT_TITLE_FILE "+%-34s %7d ", 
     594                  substr("\"".$title_xlate_table->{$xlate_to}->{translation}."\"",0,34), 
     595                  $title_xlate_table->{$xlate_to}->{translated}; 
     596 
     597                foreach my $source (sort { $title_xlate_table->{$xlate_to}->{same}->{$b} <=> $title_xlate_table->{$xlate_to}->{same}->{$a} } 
     598                  keys %{($title_xlate_table->{$xlate_to}->{same})}) { 
     599                        printf ALT_TITLE_FILE " %s(%d)", $source, $title_xlate_table->{$xlate_to}->{same}->{$source}; 
     600                } 
     601                printf ALT_TITLE_FILE "\n"; 
     602 
     603                foreach my $xlate_from (sort keys %{($title_xlate_table->{$xlate_to}->{alternate})}) { 
     604                        my $last_xlated = (time - $title_xlate_table->{$xlate_to}->{alternate}->{$xlate_from}->{last_seen_in_secondary}); 
     605                        my $last_xlated_desc; 
     606                        if ($last_xlated < (24*60*60)) { 
     607                                $last_xlated_desc = sprintf "-%dhrs",int($last_xlated/(24*60*60)); 
     608                        } elsif ($last_xlated < (7*24*60*60)) { 
     609                                $last_xlated_desc = sprintf "-%ddays",int($last_xlated/(24*60*60)); 
     610                        } else { 
     611                                $last_xlated_desc = sprintf "-%dwks",int($last_xlated/(7*24*60*60)); 
     612                        } 
     613                         
     614                        printf ALT_TITLE_FILE "-%-34s %7s ",substr("\"".$xlate_from."\"",0,34),$last_xlated_desc; 
     615 
     616                        foreach my $source (sort { $title_xlate_table->{$xlate_to}->{alternate}->{$xlate_from}->{secondary}->{$a} <=> 
     617                          $title_xlate_table->{$xlate_to}->{alternate}->{$xlate_from}->{secondary}->{$b} } 
     618                          keys %{($title_xlate_table->{$xlate_to}->{alternate}->{$xlate_from}->{secondary})}) { 
     619                                printf ALT_TITLE_FILE " %s(%d)", $source, $title_xlate_table->{$xlate_to}->{alternate}->{$xlate_from}->{secondary}->{$source}; 
     620                        } 
     621                        printf ALT_TITLE_FILE "\n"; 
     622                } 
     623                printf ALT_TITLE_FILE "\n"; 
    584624        } 
    585625 
     
    10641104 
    10651105###################################################################################################### 
     1106# all logic associated with choosing the preferred title of a programme 
     1107# (uses past-seen choices to set preferences) 
     1108 
     1109sub choose_title 
     1110{ 
     1111        my ($num_matching,$m) = @_; 
     1112        my @titles, my @titles_from; 
     1113        my $num_titles = 0; 
     1114 
     1115        # 1. gather a list of all titles we have for our preferred language 
     1116        #    there are stored in the @titles array in our "preferred grabber" order 
     1117        for my $i (0..($num_matching-1)) { 
     1118                if (defined $m->[$i]->{title}) { 
     1119                        foreach my $found_t (@{($m->[$i]->{title})}) { 
     1120                                my $t = $found_t->[0]; 
     1121                                my $l = $found_t->[1]; 
     1122 
     1123                                if ((!defined $l) || (lc($l) eq lc($opt->{lang}))) { 
     1124                                        $titles[$num_titles] = $t; 
     1125                                        $titles_from[$num_titles] = $m->[$i]->{grabber}; 
     1126                                        $num_titles++; 
     1127                                } 
     1128                        } 
     1129                } 
     1130        } 
     1131 
     1132        # 2. no titles in our language? return with the first title we saw 
     1133        if ($num_titles == 0) { 
     1134                my $title = $m->[0]->{title}->[0]->[0]; 
     1135                my $lang = $m->[0]->{title}->[0]->[1]; 
     1136 
     1137                &log($reclogic{debug_choose_title},(sprintf  
     1138                  "choose_title: no titles in lang %s found; using first title \"%s\" in lang %s", 
     1139                  $opt->{lang}, $title, (defined $lang ? $lang : "(undef)"))); 
     1140                return ($title, $lang); 
     1141        } 
     1142 
     1143        # 3. do we already have any titles in our list here in our 'preferred title' list? 
     1144        my $found_index = -1; 
     1145        foreach my $i (0..$num_titles) { 
     1146                if (defined $title_xlate_table->{(lc($titles[$i]))}) { 
     1147                        $found_index = $i; 
     1148                        last; 
     1149                } 
     1150        } 
     1151 
     1152        # 4. found our preferred title.  use that. 
     1153        if ($found_index != -1) { 
     1154                my $key = lc($titles[$found_index]); 
     1155                my $title = $title_xlate_table->{$key}->{translation}; 
     1156 
     1157                &log($reclogic{debug_choose_title},(sprintf  
     1158                  "choose_title: existing preferred title \"%s\" matched with title \"%s\" from grabber %s (index %d)", 
     1159                  $title, $titles[$found_index], $titles_from[$found_index], $found_index)); 
     1160 
     1161                # update stats on use 
     1162                $title_xlate_table->{$key}->{seen_in_primary}++; 
     1163                $title_xlate_table->{$key}->{last_seen_in_primary} = time; 
     1164 
     1165                # update 'seen' stats for alternatives 
     1166                foreach my $i (0..($num_titles-1)) { 
     1167                        my $key2 = $titles[$i]; # don't actually store in lower-case.. 
     1168                        my $source = $titles_from[$i]; 
     1169 
     1170                        if (lc($key) eq lc($key2)) { 
     1171                                # store where we have seen the same title 
     1172                                $title_xlate_table->{$key}->{same}->{$source}++; 
     1173                        } else { 
     1174                                # store all alternatives for this title 
     1175                                $title_xlate_table->{$key}->{alternate}->{$key2}->{secondary}->{$source}++; 
     1176                                $title_xlate_table->{$key}->{alternate}->{$key2}->{last_seen_in_secondary} = time; 
     1177                        } 
     1178                } 
     1179 
     1180                return ($title, $opt->{lang}); 
     1181        } 
     1182 
     1183        # 5. didn't find this title in our preferred title list. 
     1184        #    see if it is an alternate name 
     1185        foreach my $i (0..($num_titles-1)) { 
     1186                my $title = $titles[$i]; # don't actually convert to lowercase.. 
     1187 
     1188                # FUTURE MAYBE: this is a linear search. 
     1189                # if it grows too much consider a schema change to make it better 
     1190 
     1191                foreach my $key (keys %{($title_xlate_table)}) { 
     1192                        foreach my $key2 (keys %{($title_xlate_table->{$key}->{alternate})}) { 
     1193                                if (lc($key2) eq lc($title)) { 
     1194                                        # matched alternate! 
     1195                                        $title_xlate_table->{$key}->{translated}++; 
     1196                                        my $xlated_to = $title_xlate_table->{$key}->{translation}; 
     1197                                        my $xlated_from = $titles[$i]; 
     1198                                        $in->{used_translations}->{$xlated_to}->{num}++; 
     1199                                        $in->{used_translations}->{$xlated_to}->{from}->{$xlated_from}++; 
     1200 
     1201                                        &log($reclogic{debug_choose_title},(sprintf  
     1202                                          "choose_title: title \"%s\" (idx %d grabber %s) matched previously-seen alternate title for \"%s\"", 
     1203                                          $xlated_from, $i, $titles_from[$i], $xlated_to)); 
     1204 
     1205                                        # update 'seen' stats for alternatives 
     1206                                        foreach my $j (0..($num_titles-1)) { 
     1207                                                my $key2a = $titles[$j]; # don't store in lowercase 
     1208                                                my $source = $titles_from[$j]; 
     1209 
     1210                                                if ($key eq lc($key2a)) { 
     1211                                                        # store where we have seen the same title 
     1212                                                        $title_xlate_table->{$key}->{same}->{$source}++; 
     1213                                                } else { 
     1214                                                        # store all alternatives for this title 
     1215                                                        $title_xlate_table->{$key}->{alternate}->{$key2a}->{secondary}->{$source}++; 
     1216                                                        $title_xlate_table->{$key}->{alternate}->{$key2a}->{last_seen_in_secondary} = time; 
     1217                                                } 
     1218                                        } 
     1219 
     1220                                        # return primary translation for this found alternative 
     1221                                        return ($xlated_to, $opt->{lang}); 
     1222                                } 
     1223                        } 
     1224                } 
     1225        } 
     1226 
     1227        my $preferred_title = $titles[0]; 
     1228 
     1229        # 6. don't create a preferred title for this unless we have met our threshold for title_xlate_table_min_alt_progs 
     1230        if (($num_titles-1) < $reclogic{title_xlate_table_min_alt_progs}) { 
     1231                &log($reclogic{debug_choose_title},(sprintf  
     1232                  "choose_title: title \"%s\" not added as a preferred title due to title_xlate_table_min_alt_progs (%d)", 
     1233                  $preferred_title, $reclogic{title_xlate_table_min_alt_progs})); 
     1234                return ($preferred_title, $opt->{lang}); 
     1235        } 
     1236 
     1237        # 7. wasn't an alternate name 
     1238        #    add it as a preferred name 
     1239 
     1240        my $key = lc($preferred_title); 
     1241        $title_xlate_table->{$key}->{seen_in_primary} = 1; 
     1242        $title_xlate_table->{$key}->{last_seen_in_primary} = time; 
     1243        $title_xlate_table->{$key}->{translated} = 0; 
     1244        $title_xlate_table->{$key}->{translation} = $preferred_title; 
     1245        $title_xlate_table->{$key}->{same}->{$titles_from[0]} = 1; 
     1246 
     1247        foreach my $i (1..($num_titles-1)) { 
     1248                my $key2 = $titles[$i]; 
     1249                my $source = $titles_from[$i]; 
     1250 
     1251                if (lc($key2) eq $key) { 
     1252                        $title_xlate_table->{$key}->{same}->{$source}++; 
     1253                } else { 
     1254                        $title_xlate_table->{$key}->{alternate}->{$key2}->{secondary}->{$source} = 1; 
     1255                        $title_xlate_table->{$key}->{alternate}->{$key2}->{last_seen_in_secondary} = time; 
     1256                } 
     1257        } 
     1258 
     1259        &log($reclogic{debug_choose_title},(sprintf  
     1260          "choose_title: added title \"%s\" as a preferred title (grabber %s)", 
     1261          $preferred_title, $titles_from[0])); 
     1262 
     1263        return ($preferred_title, $opt->{lang}); 
     1264} 
     1265 
     1266###################################################################################################### 
    10661267# insert a programme into our reconciled list 
    10671268#  - if fed multiple programmes for the one slot, choose attributes from all of them 
     
    10691270sub add_one_programme 
    10701271{ 
    1071         my($chan_id,$num_matching,$m) = @_; 
     1272        my($chan_id,$title,$title_lang,$num_matching,$m) = @_; 
    10721273        &log($reclogic{debug_add_logic}, 
    10731274          (sprintf "add_one_programme: adding programme %s-%s \"%s\" with data from %d programmes", 
    10741275          (strftime "%a%e%b%H:%M",localtime(($m->[0]->{start_epoch}))), 
    10751276          (strftime "%a%e%b%H:%M",localtime(($m->[0]->{stop_epoch}))), 
    1076           $m->[0]->{title}->[0]->[0], $num_matching)); 
     1277          $title, $num_matching)); 
    10771278 
    10781279        my $newprog; 
    10791280        my $chan = $m->[0]->{channel}; 
    10801281        my $starttime = $m->[0]->{start_epoch}; 
     1282        my $have_xlated_title = 0; 
    10811283 
    10821284        # always take start/stop/channel from first choice 
     
    10921294        $newprog->{stop_epoch} =        $m->[0]->{stop_epoch}; 
    10931295        $newprog->{channel} =           $chan; 
     1296        $newprog->{title}->[0] =        [ $title, $title_lang ]; 
    10941297 
    10951298        $newprog->{datasources} = ""; 
     
    10991302                # (1) merge in attributes which are simple scalars 
    11001303                foreach my $field ('date', 'length') { 
    1101                         $newprog->{$field} = $m->[$i]->{$field} 
    1102                           if ((!defined $newprog->{$field}) && (defined $m->[$i]->{$field}) && ($m->[$i]->{$field} ne "")); 
     1304                        if ((!defined $newprog->{$field}) && 
     1305                            (defined $m->[$i]->{$field}) &&  
     1306                            ($m->[$i]->{$field} ne "")) { 
     1307                                $newprog->{$field} = $m->[$i]->{$field}; 
     1308                                &log($reclogic{debug_add_logic}, 
     1309                                  (sprintf " - added field %s from #%d (%s) value %s", 
     1310                                  $field,$m->[$i]->{grabber_num},$m->[$i]->{grabber},$newprog->{$field})); 
     1311                        } 
    11031312                } 
    11041313 
     
    11241333                                                $newprog->{$field}->[$num_existing] = $entry; 
    11251334                                                $num_existing++; 
     1335 
     1336                                                &log($reclogic{debug_add_logic}, 
     1337                                                  (sprintf " - added field %s from #%d (%s) value %s", 
     1338                                                  $field,$m->[$i]->{grabber_num},$m->[$i]->{grabber},$entry)); 
    11261339                                        } 
    11271340                                } 
     
    11301343 
    11311344                # (3) merge in attributes which are [val,lang] pairs, [val,val] or [val,val,val] 
     1345                #     note: while 'title' is here, this is simply to pick up titles in any 
     1346                #     additional languages; the primary (preferred) title has already been 
     1347                #     set via the choose_title() routine 
    11321348                foreach my $field ('title', 'sub-title', 'desc', 'category', 'country', 'episode-num', 'rating') { 
    11331349                        my $num_added = 0; 
     
    11641380                                                $lang_added{$lang} = $val; 
    11651381 
    1166                                                 # title is special - we write out alternate title if we have one 
    1167                                                 if (($field eq "title") && ($lang eq $opt->{lang})) { 
    1168                                                         if (defined $title_map_table->{$val}) { 
    1169                                                                 # got a translation to make! 
    1170                                                                 # if we have multiple to choose from, choose the one 
    1171                                                                 # used the most 
    1172  
    1173                                                                 my $translations = $title_map_table->{$val}; 
    1174                                                                 my @translation_list = sort { choose_best_translation($val,$a,$b) } keys %{$translations}; 
    1175                                                                 my $chosen_xlate = $translation_list[0]; 
    1176  
    1177                                                                 if (lc($chosen_xlate) ne lc($val)) { 
    1178                                                                         $title_map_table->{$val}->{$chosen_xlate}->{times_translated}++; 
    1179                                                                         $title_map_table->{$val}->{$chosen_xlate}->{last_translated} = time; 
    1180                                                                         $in->{used_translations}->{$chosen_xlate}->{from}->{$val}++; 
    1181                                                                         $in->{used_translations}->{$chosen_xlate}->{num}++; 
    1182  
    1183                                                                         &log($reclogic{debug_add_logic_name_xlate}, 
    1184                                                                           (sprintf "add_one_programme: chose translation '%s' for title '%s'", 
    1185                                                                           $chosen_xlate, $val)); 
    1186  
    1187                                                                         $val = $chosen_xlate; 
    1188                                                                         $stats{used_translated_title}++; 
    1189                                                                 } 
    1190                                                         } 
    1191                                                 } 
    11921382                                                $newprog->{$field}->[$num_added]->[0] = $val; 
     1383 
     1384                                                &log($reclogic{debug_add_logic}, 
     1385                                                  (sprintf " - added field %s(%s) from #%d (%s) value %s", 
     1386                                                  $field,($lang ne "BLANK" ? $lang : ""),$m->[$i]->{grabber_num},$m->[$i]->{grabber},$val)); 
    11931387 
    11941388                                                if ($lang eq "BLANK") { 
     
    12311425                                                        $entries{$entry} = 1; 
    12321426                                                        $num_added++; 
     1427 
     1428                                                        &log($reclogic{debug_add_logic}, 
     1429                                                          (sprintf " - added field %s/%s from #%d (%s) value %s", 
     1430                                                          $field,$field2,$m->[$i]->{grabber_num},$m->[$i]->{grabber},$entry)); 
    12331431                                                } 
    12341432                                        } 
     
    12411439                        if ((!defined $newprog->{$field}) && (defined $m->[$i]->{$field})) { 
    12421440                                $newprog->{$field} = $m->[$i]->{$field}; 
     1441 
     1442                                &log($reclogic{debug_add_logic}, 
     1443                                  (sprintf " - added field %s from #%d (%s)", 
     1444                                  $field,$m->[$i]->{grabber_num},$m->[$i]->{grabber})); 
    12431445                        } 
    12441446                } 
     
    12631465                                                $newprog->{$field}->{$entry} = $m->[$i]->{$field}->{$entry}; 
    12641466                                                $entries{$entry} = $m->[$i]->{$field}->{$entry}; 
     1467 
     1468                                                &log($reclogic{debug_add_logic}, 
     1469                                                  (sprintf " - added field %s from #%d (%s) value %s", 
     1470                                                  $field,$m->[$i]->{grabber_num},$m->[$i]->{grabber},$entries{$entry})); 
    12651471                                        } 
    12661472                                } 
     
    12791485                $in->{total_progs_out}->{($newprog->{channel})}++; 
    12801486        } 
    1281 } 
    1282  
    1283 ###################################################################################################### 
    1284 # logic for choosing the best translation 
    1285 # called from sort of $title_map_table->{} 
    1286  
    1287 # choose "most translated" 
    1288 # if zero, then choose "most seen" 
    1289  
    1290 sub choose_best_translation 
    1291 { 
    1292         my ($v,$a,$b) = @_; 
    1293         my $most_translated_result = ($title_map_table->{$v}->{$b}->{times_translated} <=> $title_map_table->{$v}->{$a}->{times_translated}); 
    1294         return $most_translated_result if ($most_translated_result != 0); 
    1295         return ($title_map_table->{$v}->{$b}->{times_seen} <=> $title_map_table->{$v}->{$a}->{times_seen}); 
    12961487} 
    12971488 
     
    15731764                                  $this_title, $i, $matching_progs->[$num_matching_progs]->{grabber})); 
    15741765 
    1575                                 # store details of this in our mappings table if titles differ 
    1576                                 if (lc($primary_title) ne lc($this_title)) { 
    1577                                         if ($title_map_table->{$this_title}->{$primary_title}->{times_seen}) { 
    1578                                                 $stats{already_seen_title_translations}++; 
    1579                                         } else { 
    1580                                                 $stats{added_title_translation}++; 
    1581                                                 $title_map_table->{$this_title}->{$primary_title}->{times_translated} = 0; 
    1582                                                 $title_map_table->{$this_title}->{$primary_title}->{times_seen} = 0; 
    1583                                                 &log($reclogic{debug_find_prog_to_add}, 
    1584                                                   (sprintf "find_prog_to_add:  - saving title translation: preferred \"%s\", alternate \"%s\"", 
    1585                                                   $primary_title, $this_title)); 
    1586                                         } 
    1587                                         $title_map_table->{$this_title}->{$primary_title}->{times_seen}++; 
    1588                                         $title_map_table->{$this_title}->{$primary_title}->{last_seen} = time; 
    1589                                 } 
    1590  
    15911766                                $num_matching_progs++; 
    15921767                        } 
    15931768                } 
    15941769        } 
    1595         &add_one_programme($chan_id,$num_matching_progs,$matching_progs); 
     1770 
     1771        my ($title, $title_lang) = &choose_title($num_matching_progs,$matching_progs); 
     1772        &add_one_programme($chan_id,$title,$title_lang,$num_matching_progs,$matching_progs); 
    15961773 
    15971774        # remove all programming data for this channel which overlaps with this (inserted) programme 
  • status

    r103 r105  
    77grabber:jrobbo:0.03-r4 
    88grabber:d1:0.6.2.3-r4 
    9 reconciler:reconciler_mk2:0.07 
     9reconciler:reconciler_mk2:0.08 
    1010postprocessor:imdb_augment_data:0.03