| 213 | return max_scores |
| 214 | |
| 215 | def _compute_f1(self, predicted_bag, gold_bag): |
| 216 | intersection = len(gold_bag.intersection(predicted_bag)) |
| 217 | if not predicted_bag: |
| 218 | precision = 1.0 |
| 219 | else: |
| 220 | precision = intersection / float(len(predicted_bag)) |
| 221 | if not gold_bag: |
| 222 | recall = 1.0 |
| 223 | else: |
| 224 | recall = intersection / float(len(gold_bag)) |
| 225 | f1 = ( |
| 226 | (2 * precision * recall) / (precision + recall) |
| 227 | if not (precision == 0.0 and recall == 0.0) |
| 228 | else 0.0 |
| 229 | ) |
| 230 | return f1 |
| 231 | |
| 232 | def _match_numbers_if_present(self, gold_bag, predicted_bag): |
| 233 | gold_numbers = set() |