{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "e48cae3a",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/bcheng/anaconda3/envs/dualloop/lib/python3.8/site-packages/huggingface_hub/snapshot_download.py:6: FutureWarning: snapshot_download.py has been made private and will no longer be available from version 0.11. Please use `from huggingface_hub import snapshot_download` to import the only public function in this module. Other members of the file may be changed without a deprecation notice.\n",
" warnings.warn(\n"
]
}
],
"source": [
"import pandas as pd\n",
"\n",
"## Loading and preparing data\n",
"dataset_name = 'nasa'\n",
"with_blocking = True\n",
"\n",
"if with_blocking:\n",
" all_dataset_df = pd.read_csv(dataset_name + '_blocked.csv')\n",
"else:\n",
" all_dataset_df = pd.read_csv(dataset_name + '.csv')\n",
"\n",
"import pickle\n",
"source_ontology = pickle.load( open(dataset_name + \"_source_ontology.pk\", \"rb\" ) )\n",
"target_ontology = pickle.load( open(dataset_name + \"_target_ontology.pk\", \"rb\" ) )\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "265cc2ff",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import numpy as np\n",
"\n",
"def print_true_match(row):\n",
" x = int(row['x'])\n",
" y = int(row['y']) \n",
" source_class = source_ontology[x]\n",
" target_class = target_ontology[y] \n",
" print(source_class.class_name, ' => ', target_class.class_name, row['x'], row['y'])\n",
" \n",
"def print_included_match(row, f):\n",
" x = int(row['x'])\n",
" y = int(row['y']) \n",
" source_class = source_ontology[x]\n",
" target_class = target_ontology[y] \n",
" print(source_class.class_name, ' => ', target_class.class_name, row[f], row['x'], row['y'])\n",
" \n",
" \n",
"def get_blocking_performance(features):\n",
" MAX_NUM_CANDIDATES = 50\n",
" target_size = len(target_ontology)\n",
" max_k = target_size\n",
" if target_size > MAX_NUM_CANDIDATES:\n",
" max_k = MAX_NUM_CANDIDATES\n",
"\n",
" changing_point_detection_algorithm = 'online2' # 'rdf', 'l1', 'l2', 'online1', 'online2'\n",
" print_matches = True\n",
"\n",
" # show the matches included by different blocking indexes\n",
" combination_statement = \"\";\n",
" missing_statement = \"\"\n",
" for blocked_column in features:\n",
" print(\"\\r\\n\" + blocked_column)\n",
" blocked_key = blocked_column+'_blocked'\n",
"\n",
" all_dataset_df.query(blocked_key + '==0 & label==1').apply(print_included_match, f=blocked_column, axis = 1)\n",
"\n",
" total_num = len(all_dataset_df)\n",
" num_after_blocking = len(all_dataset_df.query(blocked_key + '==0'))\n",
"\n",
" print(num_after_blocking, ' out of ', total_num, num_after_blocking*100.0/total_num)\n",
"\n",
" total_true_matches = len(all_dataset_df[all_dataset_df['label']==1])\n",
" captured_true_matches = len(all_dataset_df.query(blocked_key + '==0 & label==1'))\n",
"\n",
" print(captured_true_matches, ' out of ', total_true_matches, captured_true_matches*100.0/total_true_matches)\n",
"\n",
" if combination_statement == \"\":\n",
" combination_statement = \" (\" + blocked_key + '==0)'\n",
" missing_statement = \" (\" + blocked_key + '==1)' \n",
" else:\n",
" combination_statement = combination_statement + \" | (\" + blocked_key + '==0)'\n",
" missing_statement = missing_statement + \" & (\" + blocked_key + '==1)'\n",
"\n",
" all_dataset_df['selected_after_blocking'] = 0\n",
"\n",
" # calculate the union of all selected items by the committee of blockers\n",
" print(\"\\r\\n============= RESULT OF TOP-X blocking =====================\")\n",
"\n",
" #print(combination_statement)\n",
" selected_items = all_dataset_df.query(combination_statement)\n",
" all_dataset_df.loc[selected_items.index, 'selected_after_blocking'] = 1\n",
" total_selected_items = len(selected_items)\n",
"\n",
"\n",
" query = '(label==1) & (' + combination_statement + ')'\n",
" #print(query)\n",
" total_selected_matches = len(all_dataset_df.query(query))\n",
"\n",
" query = 'label==1' \n",
" #print(query)\n",
" total_matches = len(all_dataset_df.query(query))\n",
"\n",
" total_num = len(all_dataset_df)\n",
"\n",
"\n",
" print(total_selected_items, ' out of ', total_num, total_selected_items*100.0/total_num)\n",
" print(total_selected_matches, ' out of ', total_matches, total_selected_matches*100.0/total_matches)\n",
"\n",
" top_x_recall = total_selected_matches*1.0/total_matches\n",
" top_x_reduction = 1.0 - total_selected_items*1.0/total_num\n",
"\n",
" print(\"\\r\\n=======list of all true matches========\")\n",
" true_matches = all_dataset_df.query('label==1').apply(print_true_match, axis = 1)\n",
"\n",
" print(\"\\r\\n***** MISSING ****\")\n",
"\n",
" query = '(label==1) & (' + missing_statement + ')'\n",
" #print(query)\n",
" true_matches = all_dataset_df.query(query).apply(print_true_match, axis = 1) \n",
" \n",
" return top_x_recall, top_x_reduction"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "24621eed",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\r\n",
"num_common_words\n",
"WeatherCondition => WeatherCondition 2 3 316\n",
"SurfaceWindCondition => Wind 1 5 867\n",
"PhysicalRunway => Runway 1 9 517\n",
"VisibilityCondition => HorizontalVisibility 1 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 2 15 664\n",
"AircraftCapacity => Capacity 1 17 298\n",
"TimeInterval => TimeRangeType 1 40 340\n",
"AircraftWakeCategory => Aircraft 1 47 134\n",
"EngineeredSystem => Taxiway 1 48 345\n",
"BallBearing => AirspaceLayer 2 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 1 65 44\n",
"QRoute => DeicingArea 1 78 344\n",
"AirportServiceVehicle => Terminal 1 79 79\n",
"ATCSCC => Gate 1 90 356\n",
"TransitionRoute => AircraftType 2 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 2 102 137\n",
"JetRoute => RadioNavigationAid 1 104 625\n",
"CommonRoute => Engine 1 105 355\n",
"RampTower => CodeAircraftEngineType 2 107 376\n",
"CrewMember => CrewMember 2 115 334\n",
"Flight => Flight 1 116 2\n",
"FlightSpec => FlightConditionCombination 1 122 427\n",
"AircraftTrackPoint => AircraftState 1 127 185\n",
"Taxipath => TaxiRoute 1 140 768\n",
"2382 out of 140910 1.6904407068341494\n",
"24 out of 32 75.0\n",
"\r\n",
"============= RESULT OF TOP-X blocking =====================\n",
"2382 out of 140910 1.6904407068341494\n",
"24 out of 32 75.0\n",
"\r\n",
"=======list of all true matches========\n",
"WeatherCondition => WeatherCondition 3 316\n",
"SurfaceWindCondition => Wind 5 867\n",
"Airport => Aerodrome 6 1\n",
"PhysicalRunway => Runway 9 517\n",
"NavigationFix => SignificantPoint 11 56\n",
"VisibilityCondition => HorizontalVisibility 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 15 664\n",
"AircraftCapacity => Capacity 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 25 567\n",
"TimeInterval => TimeRangeType 40 340\n",
"AircraftWakeCategory => Aircraft 47 134\n",
"EngineeredSystem => Taxiway 48 345\n",
"AircraftType => AircraftOperator 51 171\n",
"BallBearing => AirspaceLayer 57 59\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"AircraftCommunicationSystem => RunwayDirection 65 44\n",
"QRoute => DeicingArea 78 344\n",
"AirportServiceVehicle => Terminal 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 87 360\n",
"ATCSCC => Gate 90 356\n",
"TransitionRoute => AircraftType 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 102 137\n",
"JetRoute => RadioNavigationAid 104 625\n",
"CommonRoute => Engine 105 355\n",
"RampTower => CodeAircraftEngineType 107 376\n",
"AirportSpec => AerodromeSet 114 100\n",
"CrewMember => CrewMember 115 334\n",
"Flight => Flight 116 2\n",
"FlightSpec => FlightConditionCombination 122 427\n",
"AircraftTrackPoint => AircraftState 127 185\n",
"Taxipath => TaxiRoute 140 768\n",
"RelativeFix => PointReference 143 589\n",
"\r\n",
"***** MISSING ****\n",
"Airport => Aerodrome 6 1\n",
"NavigationFix => SignificantPoint 11 56\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 25 567\n",
"AircraftType => AircraftOperator 51 171\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"DeicingTruck => StandardInstrumentDeparture 87 360\n",
"AirportSpec => AerodromeSet 114 100\n",
"RelativeFix => PointReference 143 589\n",
"\r\n",
"num_common_words\n",
"WeatherCondition => WeatherCondition 2 3 316\n",
"SurfaceWindCondition => Wind 1 5 867\n",
"PhysicalRunway => Runway 1 9 517\n",
"VisibilityCondition => HorizontalVisibility 1 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 2 15 664\n",
"AircraftCapacity => Capacity 1 17 298\n",
"TimeInterval => TimeRangeType 1 40 340\n",
"AircraftWakeCategory => Aircraft 1 47 134\n",
"EngineeredSystem => Taxiway 1 48 345\n",
"BallBearing => AirspaceLayer 2 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 1 65 44\n",
"QRoute => DeicingArea 1 78 344\n",
"AirportServiceVehicle => Terminal 1 79 79\n",
"ATCSCC => Gate 1 90 356\n",
"TransitionRoute => AircraftType 2 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 2 102 137\n",
"JetRoute => RadioNavigationAid 1 104 625\n",
"CommonRoute => Engine 1 105 355\n",
"RampTower => CodeAircraftEngineType 2 107 376\n",
"CrewMember => CrewMember 2 115 334\n",
"Flight => Flight 1 116 2\n",
"FlightSpec => FlightConditionCombination 1 122 427\n",
"AircraftTrackPoint => AircraftState 1 127 185\n",
"Taxipath => TaxiRoute 1 140 768\n",
"2382 out of 140910 1.6904407068341494\n",
"24 out of 32 75.0\n",
"\r\n",
"class_long_name_distance_a\n",
"WeatherCondition => WeatherCondition 1.0 3 316\n",
"SurfaceWindCondition => Wind 0.8790944218635559 5 867\n",
"PhysicalRunway => Runway 0.8516059517860413 9 517\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.9156749844551086 15 664\n",
"TimeInterval => TimeRangeType 0.8980519771575928 40 340\n",
"AircraftWakeCategory => Aircraft 1.0 47 134\n",
"EngineeredSystem => Taxiway 1.0 48 345\n",
"AircraftType => AircraftOperator 0.852443516254425 51 171\n",
"BallBearing => AirspaceLayer 1.0 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.8838164210319519 65 44\n",
"QRoute => DeicingArea 0.913707971572876 78 344\n",
"AirportServiceVehicle => Terminal 1.0 79 79\n",
"ATCSCC => Gate 1.0 90 356\n",
"TransitionRoute => AircraftType 1.0 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 0.8626880049705505 102 137\n",
"RampTower => CodeAircraftEngineType 0.8093550205230713 107 376\n",
"AirportSpec => AerodromeSet 0.8208879232406616 114 100\n",
"CrewMember => CrewMember 1.0 115 334\n",
"Flight => Flight 1.0 116 2\n",
"Taxipath => TaxiRoute 0.9633474946022034 140 768\n",
"RelativeFix => PointReference 0.795529842376709 143 589\n",
"2120 out of 140910 1.5045064225392095\n",
"21 out of 32 65.625\n",
"\r\n",
"============= RESULT OF TOP-X blocking =====================\n",
"3927 out of 140910 2.7868852459016393\n",
"27 out of 32 84.375\n",
"\r\n",
"=======list of all true matches========\n",
"WeatherCondition => WeatherCondition 3 316\n",
"SurfaceWindCondition => Wind 5 867\n",
"Airport => Aerodrome 6 1\n",
"PhysicalRunway => Runway 9 517\n",
"NavigationFix => SignificantPoint 11 56\n",
"VisibilityCondition => HorizontalVisibility 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 15 664\n",
"AircraftCapacity => Capacity 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 25 567\n",
"TimeInterval => TimeRangeType 40 340\n",
"AircraftWakeCategory => Aircraft 47 134\n",
"EngineeredSystem => Taxiway 48 345\n",
"AircraftType => AircraftOperator 51 171\n",
"BallBearing => AirspaceLayer 57 59\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"AircraftCommunicationSystem => RunwayDirection 65 44\n",
"QRoute => DeicingArea 78 344\n",
"AirportServiceVehicle => Terminal 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 87 360\n",
"ATCSCC => Gate 90 356\n",
"TransitionRoute => AircraftType 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 102 137\n",
"JetRoute => RadioNavigationAid 104 625\n",
"CommonRoute => Engine 105 355\n",
"RampTower => CodeAircraftEngineType 107 376\n",
"AirportSpec => AerodromeSet 114 100\n",
"CrewMember => CrewMember 115 334\n",
"Flight => Flight 116 2\n",
"FlightSpec => FlightConditionCombination 122 427\n",
"AircraftTrackPoint => AircraftState 127 185\n",
"Taxipath => TaxiRoute 140 768\n",
"RelativeFix => PointReference 143 589\n",
"\r\n",
"***** MISSING ****\n",
"Airport => Aerodrome 6 1\n",
"NavigationFix => SignificantPoint 11 56\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 25 567\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"DeicingTruck => StandardInstrumentDeparture 87 360\n",
"\r\n",
"num_common_words\n",
"WeatherCondition => WeatherCondition 2 3 316\n",
"SurfaceWindCondition => Wind 1 5 867\n",
"PhysicalRunway => Runway 1 9 517\n",
"VisibilityCondition => HorizontalVisibility 1 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 2 15 664\n",
"AircraftCapacity => Capacity 1 17 298\n",
"TimeInterval => TimeRangeType 1 40 340\n",
"AircraftWakeCategory => Aircraft 1 47 134\n",
"EngineeredSystem => Taxiway 1 48 345\n",
"BallBearing => AirspaceLayer 2 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 1 65 44\n",
"QRoute => DeicingArea 1 78 344\n",
"AirportServiceVehicle => Terminal 1 79 79\n",
"ATCSCC => Gate 1 90 356\n",
"TransitionRoute => AircraftType 2 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 2 102 137\n",
"JetRoute => RadioNavigationAid 1 104 625\n",
"CommonRoute => Engine 1 105 355\n",
"RampTower => CodeAircraftEngineType 2 107 376\n",
"CrewMember => CrewMember 2 115 334\n",
"Flight => Flight 1 116 2\n",
"FlightSpec => FlightConditionCombination 1 122 427\n",
"AircraftTrackPoint => AircraftState 1 127 185\n",
"Taxipath => TaxiRoute 1 140 768\n",
"2382 out of 140910 1.6904407068341494\n",
"24 out of 32 75.0\n",
"\r\n",
"class_long_name_distance_a\n",
"WeatherCondition => WeatherCondition 1.0 3 316\n",
"SurfaceWindCondition => Wind 0.8790944218635559 5 867\n",
"PhysicalRunway => Runway 0.8516059517860413 9 517\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.9156749844551086 15 664\n",
"TimeInterval => TimeRangeType 0.8980519771575928 40 340\n",
"AircraftWakeCategory => Aircraft 1.0 47 134\n",
"EngineeredSystem => Taxiway 1.0 48 345\n",
"AircraftType => AircraftOperator 0.852443516254425 51 171\n",
"BallBearing => AirspaceLayer 1.0 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.8838164210319519 65 44\n",
"QRoute => DeicingArea 0.913707971572876 78 344\n",
"AirportServiceVehicle => Terminal 1.0 79 79\n",
"ATCSCC => Gate 1.0 90 356\n",
"TransitionRoute => AircraftType 1.0 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 0.8626880049705505 102 137\n",
"RampTower => CodeAircraftEngineType 0.8093550205230713 107 376\n",
"AirportSpec => AerodromeSet 0.8208879232406616 114 100\n",
"CrewMember => CrewMember 1.0 115 334\n",
"Flight => Flight 1.0 116 2\n",
"Taxipath => TaxiRoute 0.9633474946022034 140 768\n",
"RelativeFix => PointReference 0.795529842376709 143 589\n",
"2120 out of 140910 1.5045064225392095\n",
"21 out of 32 65.625\n",
"\r\n",
"label_long_distance_a\n",
"0 out of 140910 0.0\n",
"0 out of 32 0.0\n",
"\r\n",
"============= RESULT OF TOP-X blocking =====================\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"3927 out of 140910 2.7868852459016393\n",
"27 out of 32 84.375\n",
"\r\n",
"=======list of all true matches========\n",
"WeatherCondition => WeatherCondition 3 316\n",
"SurfaceWindCondition => Wind 5 867\n",
"Airport => Aerodrome 6 1\n",
"PhysicalRunway => Runway 9 517\n",
"NavigationFix => SignificantPoint 11 56\n",
"VisibilityCondition => HorizontalVisibility 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 15 664\n",
"AircraftCapacity => Capacity 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 25 567\n",
"TimeInterval => TimeRangeType 40 340\n",
"AircraftWakeCategory => Aircraft 47 134\n",
"EngineeredSystem => Taxiway 48 345\n",
"AircraftType => AircraftOperator 51 171\n",
"BallBearing => AirspaceLayer 57 59\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"AircraftCommunicationSystem => RunwayDirection 65 44\n",
"QRoute => DeicingArea 78 344\n",
"AirportServiceVehicle => Terminal 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 87 360\n",
"ATCSCC => Gate 90 356\n",
"TransitionRoute => AircraftType 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 102 137\n",
"JetRoute => RadioNavigationAid 104 625\n",
"CommonRoute => Engine 105 355\n",
"RampTower => CodeAircraftEngineType 107 376\n",
"AirportSpec => AerodromeSet 114 100\n",
"CrewMember => CrewMember 115 334\n",
"Flight => Flight 116 2\n",
"FlightSpec => FlightConditionCombination 122 427\n",
"AircraftTrackPoint => AircraftState 127 185\n",
"Taxipath => TaxiRoute 140 768\n",
"RelativeFix => PointReference 143 589\n",
"\r\n",
"***** MISSING ****\n",
"Airport => Aerodrome 6 1\n",
"NavigationFix => SignificantPoint 11 56\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 25 567\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"DeicingTruck => StandardInstrumentDeparture 87 360\n",
"\r\n",
"num_common_words\n",
"WeatherCondition => WeatherCondition 2 3 316\n",
"SurfaceWindCondition => Wind 1 5 867\n",
"PhysicalRunway => Runway 1 9 517\n",
"VisibilityCondition => HorizontalVisibility 1 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 2 15 664\n",
"AircraftCapacity => Capacity 1 17 298\n",
"TimeInterval => TimeRangeType 1 40 340\n",
"AircraftWakeCategory => Aircraft 1 47 134\n",
"EngineeredSystem => Taxiway 1 48 345\n",
"BallBearing => AirspaceLayer 2 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 1 65 44\n",
"QRoute => DeicingArea 1 78 344\n",
"AirportServiceVehicle => Terminal 1 79 79\n",
"ATCSCC => Gate 1 90 356\n",
"TransitionRoute => AircraftType 2 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 2 102 137\n",
"JetRoute => RadioNavigationAid 1 104 625\n",
"CommonRoute => Engine 1 105 355\n",
"RampTower => CodeAircraftEngineType 2 107 376\n",
"CrewMember => CrewMember 2 115 334\n",
"Flight => Flight 1 116 2\n",
"FlightSpec => FlightConditionCombination 1 122 427\n",
"AircraftTrackPoint => AircraftState 1 127 185\n",
"Taxipath => TaxiRoute 1 140 768\n",
"2382 out of 140910 1.6904407068341494\n",
"24 out of 32 75.0\n",
"\r\n",
"class_long_name_distance_a\n",
"WeatherCondition => WeatherCondition 1.0 3 316\n",
"SurfaceWindCondition => Wind 0.8790944218635559 5 867\n",
"PhysicalRunway => Runway 0.8516059517860413 9 517\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.9156749844551086 15 664\n",
"TimeInterval => TimeRangeType 0.8980519771575928 40 340\n",
"AircraftWakeCategory => Aircraft 1.0 47 134\n",
"EngineeredSystem => Taxiway 1.0 48 345\n",
"AircraftType => AircraftOperator 0.852443516254425 51 171\n",
"BallBearing => AirspaceLayer 1.0 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.8838164210319519 65 44\n",
"QRoute => DeicingArea 0.913707971572876 78 344\n",
"AirportServiceVehicle => Terminal 1.0 79 79\n",
"ATCSCC => Gate 1.0 90 356\n",
"TransitionRoute => AircraftType 1.0 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 0.8626880049705505 102 137\n",
"RampTower => CodeAircraftEngineType 0.8093550205230713 107 376\n",
"AirportSpec => AerodromeSet 0.8208879232406616 114 100\n",
"CrewMember => CrewMember 1.0 115 334\n",
"Flight => Flight 1.0 116 2\n",
"Taxipath => TaxiRoute 0.9633474946022034 140 768\n",
"RelativeFix => PointReference 0.795529842376709 143 589\n",
"2120 out of 140910 1.5045064225392095\n",
"21 out of 32 65.625\n",
"\r\n",
"label_long_distance_a\n",
"0 out of 140910 0.0\n",
"0 out of 32 0.0\n",
"\r\n",
"comment_distance_a\n",
"WeatherCondition => WeatherCondition 0.7918440699577332 3 316\n",
"PhysicalRunway => Runway 0.7813199162483215 9 517\n",
"NavigationFix => SignificantPoint 0.788296639919281 11 56\n",
"VisibilityCondition => HorizontalVisibility 0.8003379702568054 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.9089569449424744 15 664\n",
"AircraftCapacity => Capacity 0.8342741131782532 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 0.8646405935287476 25 567\n",
"TimeInterval => TimeRangeType 0.7229284048080444 40 340\n",
"AircraftType => AircraftOperator 0.907685935497284 51 171\n",
"BallBearing => AirspaceLayer 0.7635786533355713 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.7357498407363892 65 44\n",
"AirportServiceVehicle => Terminal 0.8493094444274902 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 0.7947181463241577 87 360\n",
"CanadianAirport => AircraftMakeModelSeries 0.8741694092750549 102 137\n",
"RampTower => CodeAircraftEngineType 0.84563148021698 107 376\n",
"AirportSpec => AerodromeSet 0.8796764016151428 114 100\n",
"CrewMember => CrewMember 0.8921281695365906 115 334\n",
"Taxipath => TaxiRoute 0.8659443855285645 140 768\n",
"2099 out of 140910 1.4896032928819813\n",
"18 out of 32 56.25\n",
"\r\n",
"============= RESULT OF TOP-X blocking =====================\n",
"5718 out of 140910 4.057909303810943\n",
"30 out of 32 93.75\n",
"\r\n",
"=======list of all true matches========\n",
"WeatherCondition => WeatherCondition 3 316\n",
"SurfaceWindCondition => Wind 5 867\n",
"Airport => Aerodrome 6 1\n",
"PhysicalRunway => Runway 9 517\n",
"NavigationFix => SignificantPoint 11 56\n",
"VisibilityCondition => HorizontalVisibility 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 15 664\n",
"AircraftCapacity => Capacity 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 25 567\n",
"TimeInterval => TimeRangeType 40 340\n",
"AircraftWakeCategory => Aircraft 47 134\n",
"EngineeredSystem => Taxiway 48 345\n",
"AircraftType => AircraftOperator 51 171\n",
"BallBearing => AirspaceLayer 57 59\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"AircraftCommunicationSystem => RunwayDirection 65 44\n",
"QRoute => DeicingArea 78 344\n",
"AirportServiceVehicle => Terminal 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 87 360\n",
"ATCSCC => Gate 90 356\n",
"TransitionRoute => AircraftType 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 102 137\n",
"JetRoute => RadioNavigationAid 104 625\n",
"CommonRoute => Engine 105 355\n",
"RampTower => CodeAircraftEngineType 107 376\n",
"AirportSpec => AerodromeSet 114 100\n",
"CrewMember => CrewMember 115 334\n",
"Flight => Flight 116 2\n",
"FlightSpec => FlightConditionCombination 122 427\n",
"AircraftTrackPoint => AircraftState 127 185\n",
"Taxipath => TaxiRoute 140 768\n",
"RelativeFix => PointReference 143 589\n",
"\r\n",
"***** MISSING ****\n",
"Airport => Aerodrome 6 1\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"\r\n",
"num_common_words\n",
"WeatherCondition => WeatherCondition 2 3 316\n",
"SurfaceWindCondition => Wind 1 5 867\n",
"PhysicalRunway => Runway 1 9 517\n",
"VisibilityCondition => HorizontalVisibility 1 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 2 15 664\n",
"AircraftCapacity => Capacity 1 17 298\n",
"TimeInterval => TimeRangeType 1 40 340\n",
"AircraftWakeCategory => Aircraft 1 47 134\n",
"EngineeredSystem => Taxiway 1 48 345\n",
"BallBearing => AirspaceLayer 2 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 1 65 44\n",
"QRoute => DeicingArea 1 78 344\n",
"AirportServiceVehicle => Terminal 1 79 79\n",
"ATCSCC => Gate 1 90 356\n",
"TransitionRoute => AircraftType 2 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 2 102 137\n",
"JetRoute => RadioNavigationAid 1 104 625\n",
"CommonRoute => Engine 1 105 355\n",
"RampTower => CodeAircraftEngineType 2 107 376\n",
"CrewMember => CrewMember 2 115 334\n",
"Flight => Flight 1 116 2\n",
"FlightSpec => FlightConditionCombination 1 122 427\n",
"AircraftTrackPoint => AircraftState 1 127 185\n",
"Taxipath => TaxiRoute 1 140 768\n",
"2382 out of 140910 1.6904407068341494\n",
"24 out of 32 75.0\n",
"\r\n",
"class_long_name_distance_a\n",
"WeatherCondition => WeatherCondition 1.0 3 316\n",
"SurfaceWindCondition => Wind 0.8790944218635559 5 867\n",
"PhysicalRunway => Runway 0.8516059517860413 9 517\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.9156749844551086 15 664\n",
"TimeInterval => TimeRangeType 0.8980519771575928 40 340\n",
"AircraftWakeCategory => Aircraft 1.0 47 134\n",
"EngineeredSystem => Taxiway 1.0 48 345\n",
"AircraftType => AircraftOperator 0.852443516254425 51 171\n",
"BallBearing => AirspaceLayer 1.0 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.8838164210319519 65 44\n",
"QRoute => DeicingArea 0.913707971572876 78 344\n",
"AirportServiceVehicle => Terminal 1.0 79 79\n",
"ATCSCC => Gate 1.0 90 356\n",
"TransitionRoute => AircraftType 1.0 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 0.8626880049705505 102 137\n",
"RampTower => CodeAircraftEngineType 0.8093550205230713 107 376\n",
"AirportSpec => AerodromeSet 0.8208879232406616 114 100\n",
"CrewMember => CrewMember 1.0 115 334\n",
"Flight => Flight 1.0 116 2\n",
"Taxipath => TaxiRoute 0.9633474946022034 140 768\n",
"RelativeFix => PointReference 0.795529842376709 143 589\n",
"2120 out of 140910 1.5045064225392095\n",
"21 out of 32 65.625\n",
"\r\n",
"label_long_distance_a\n",
"0 out of 140910 0.0\n",
"0 out of 32 0.0\n",
"\r\n",
"comment_distance_a\n",
"WeatherCondition => WeatherCondition 0.7918440699577332 3 316\n",
"PhysicalRunway => Runway 0.7813199162483215 9 517\n",
"NavigationFix => SignificantPoint 0.788296639919281 11 56\n",
"VisibilityCondition => HorizontalVisibility 0.8003379702568054 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.9089569449424744 15 664\n",
"AircraftCapacity => Capacity 0.8342741131782532 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 0.8646405935287476 25 567\n",
"TimeInterval => TimeRangeType 0.7229284048080444 40 340\n",
"AircraftType => AircraftOperator 0.907685935497284 51 171\n",
"BallBearing => AirspaceLayer 0.7635786533355713 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.7357498407363892 65 44\n",
"AirportServiceVehicle => Terminal 0.8493094444274902 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 0.7947181463241577 87 360\n",
"CanadianAirport => AircraftMakeModelSeries 0.8741694092750549 102 137\n",
"RampTower => CodeAircraftEngineType 0.84563148021698 107 376\n",
"AirportSpec => AerodromeSet 0.8796764016151428 114 100\n",
"CrewMember => CrewMember 0.8921281695365906 115 334\n",
"Taxipath => TaxiRoute 0.8659443855285645 140 768\n",
"2099 out of 140910 1.4896032928819813\n",
"18 out of 32 56.25\n",
"\r\n",
"class_long_name_distance_b\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"WeatherCondition => WeatherCondition 1.0 3 316\n",
"SurfaceWindCondition => Wind 0.8041812777519226 5 867\n",
"Airport => Aerodrome 0.5978173613548279 6 1\n",
"PhysicalRunway => Runway 0.9253858923912048 9 517\n",
"VisibilityCondition => HorizontalVisibility 0.7832207679748535 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.8289969563484192 15 664\n",
"TimeInterval => TimeRangeType 0.6964922547340393 40 340\n",
"AircraftWakeCategory => Aircraft 1.0 47 134\n",
"EngineeredSystem => Taxiway 1.0 48 345\n",
"AircraftType => AircraftOperator 0.6602221131324768 51 171\n",
"BallBearing => AirspaceLayer 1.0 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.8014291524887085 65 44\n",
"QRoute => DeicingArea 0.6480300426483154 78 344\n",
"AirportServiceVehicle => Terminal 1.0 79 79\n",
"ATCSCC => Gate 1.0 90 356\n",
"TransitionRoute => AircraftType 1.0 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 0.8465141654014587 102 137\n",
"CommonRoute => Engine 0.7702281475067139 105 355\n",
"RampTower => CodeAircraftEngineType 0.7346463203430176 107 376\n",
"CrewMember => CrewMember 1.0 115 334\n",
"Flight => Flight 1.0 116 2\n",
"FlightSpec => FlightConditionCombination 0.7547271847724915 122 427\n",
"AircraftTrackPoint => AircraftState 0.66340172290802 127 185\n",
"Taxipath => TaxiRoute 0.9188315272331238 140 768\n",
"RelativeFix => PointReference 0.3358121216297149 143 589\n",
"2157 out of 140910 1.5307643176495636\n",
"25 out of 32 78.125\n",
"\r\n",
"============= RESULT OF TOP-X blocking =====================\n",
"6846 out of 140910 4.858420268256334\n",
"31 out of 32 96.875\n",
"\r\n",
"=======list of all true matches========\n",
"WeatherCondition => WeatherCondition 3 316\n",
"SurfaceWindCondition => Wind 5 867\n",
"Airport => Aerodrome 6 1\n",
"PhysicalRunway => Runway 9 517\n",
"NavigationFix => SignificantPoint 11 56\n",
"VisibilityCondition => HorizontalVisibility 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 15 664\n",
"AircraftCapacity => Capacity 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 25 567\n",
"TimeInterval => TimeRangeType 40 340\n",
"AircraftWakeCategory => Aircraft 47 134\n",
"EngineeredSystem => Taxiway 48 345\n",
"AircraftType => AircraftOperator 51 171\n",
"BallBearing => AirspaceLayer 57 59\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"AircraftCommunicationSystem => RunwayDirection 65 44\n",
"QRoute => DeicingArea 78 344\n",
"AirportServiceVehicle => Terminal 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 87 360\n",
"ATCSCC => Gate 90 356\n",
"TransitionRoute => AircraftType 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 102 137\n",
"JetRoute => RadioNavigationAid 104 625\n",
"CommonRoute => Engine 105 355\n",
"RampTower => CodeAircraftEngineType 107 376\n",
"AirportSpec => AerodromeSet 114 100\n",
"CrewMember => CrewMember 115 334\n",
"Flight => Flight 116 2\n",
"FlightSpec => FlightConditionCombination 122 427\n",
"AircraftTrackPoint => AircraftState 127 185\n",
"Taxipath => TaxiRoute 140 768\n",
"RelativeFix => PointReference 143 589\n",
"\r\n",
"***** MISSING ****\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"\r\n",
"num_common_words\n",
"WeatherCondition => WeatherCondition 2 3 316\n",
"SurfaceWindCondition => Wind 1 5 867\n",
"PhysicalRunway => Runway 1 9 517\n",
"VisibilityCondition => HorizontalVisibility 1 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 2 15 664\n",
"AircraftCapacity => Capacity 1 17 298\n",
"TimeInterval => TimeRangeType 1 40 340\n",
"AircraftWakeCategory => Aircraft 1 47 134\n",
"EngineeredSystem => Taxiway 1 48 345\n",
"BallBearing => AirspaceLayer 2 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 1 65 44\n",
"QRoute => DeicingArea 1 78 344\n",
"AirportServiceVehicle => Terminal 1 79 79\n",
"ATCSCC => Gate 1 90 356\n",
"TransitionRoute => AircraftType 2 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 2 102 137\n",
"JetRoute => RadioNavigationAid 1 104 625\n",
"CommonRoute => Engine 1 105 355\n",
"RampTower => CodeAircraftEngineType 2 107 376\n",
"CrewMember => CrewMember 2 115 334\n",
"Flight => Flight 1 116 2\n",
"FlightSpec => FlightConditionCombination 1 122 427\n",
"AircraftTrackPoint => AircraftState 1 127 185\n",
"Taxipath => TaxiRoute 1 140 768\n",
"2382 out of 140910 1.6904407068341494\n",
"24 out of 32 75.0\n",
"\r\n",
"class_long_name_distance_a\n",
"WeatherCondition => WeatherCondition 1.0 3 316\n",
"SurfaceWindCondition => Wind 0.8790944218635559 5 867\n",
"PhysicalRunway => Runway 0.8516059517860413 9 517\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.9156749844551086 15 664\n",
"TimeInterval => TimeRangeType 0.8980519771575928 40 340\n",
"AircraftWakeCategory => Aircraft 1.0 47 134\n",
"EngineeredSystem => Taxiway 1.0 48 345\n",
"AircraftType => AircraftOperator 0.852443516254425 51 171\n",
"BallBearing => AirspaceLayer 1.0 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.8838164210319519 65 44\n",
"QRoute => DeicingArea 0.913707971572876 78 344\n",
"AirportServiceVehicle => Terminal 1.0 79 79\n",
"ATCSCC => Gate 1.0 90 356\n",
"TransitionRoute => AircraftType 1.0 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 0.8626880049705505 102 137\n",
"RampTower => CodeAircraftEngineType 0.8093550205230713 107 376\n",
"AirportSpec => AerodromeSet 0.8208879232406616 114 100\n",
"CrewMember => CrewMember 1.0 115 334\n",
"Flight => Flight 1.0 116 2\n",
"Taxipath => TaxiRoute 0.9633474946022034 140 768\n",
"RelativeFix => PointReference 0.795529842376709 143 589\n",
"2120 out of 140910 1.5045064225392095\n",
"21 out of 32 65.625\n",
"\r\n",
"label_long_distance_a\n",
"0 out of 140910 0.0\n",
"0 out of 32 0.0\n",
"\r\n",
"comment_distance_a\n",
"WeatherCondition => WeatherCondition 0.7918440699577332 3 316\n",
"PhysicalRunway => Runway 0.7813199162483215 9 517\n",
"NavigationFix => SignificantPoint 0.788296639919281 11 56\n",
"VisibilityCondition => HorizontalVisibility 0.8003379702568054 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.9089569449424744 15 664\n",
"AircraftCapacity => Capacity 0.8342741131782532 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 0.8646405935287476 25 567\n",
"TimeInterval => TimeRangeType 0.7229284048080444 40 340\n",
"AircraftType => AircraftOperator 0.907685935497284 51 171\n",
"BallBearing => AirspaceLayer 0.7635786533355713 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.7357498407363892 65 44\n",
"AirportServiceVehicle => Terminal 0.8493094444274902 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 0.7947181463241577 87 360\n",
"CanadianAirport => AircraftMakeModelSeries 0.8741694092750549 102 137\n",
"RampTower => CodeAircraftEngineType 0.84563148021698 107 376\n",
"AirportSpec => AerodromeSet 0.8796764016151428 114 100\n",
"CrewMember => CrewMember 0.8921281695365906 115 334\n",
"Taxipath => TaxiRoute 0.8659443855285645 140 768\n",
"2099 out of 140910 1.4896032928819813\n",
"18 out of 32 56.25\n",
"\r\n",
"class_long_name_distance_b\n",
"WeatherCondition => WeatherCondition 1.0 3 316\n",
"SurfaceWindCondition => Wind 0.8041812777519226 5 867\n",
"Airport => Aerodrome 0.5978173613548279 6 1\n",
"PhysicalRunway => Runway 0.9253858923912048 9 517\n",
"VisibilityCondition => HorizontalVisibility 0.7832207679748535 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.8289969563484192 15 664\n",
"TimeInterval => TimeRangeType 0.6964922547340393 40 340\n",
"AircraftWakeCategory => Aircraft 1.0 47 134\n",
"EngineeredSystem => Taxiway 1.0 48 345\n",
"AircraftType => AircraftOperator 0.6602221131324768 51 171\n",
"BallBearing => AirspaceLayer 1.0 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.8014291524887085 65 44\n",
"QRoute => DeicingArea 0.6480300426483154 78 344\n",
"AirportServiceVehicle => Terminal 1.0 79 79\n",
"ATCSCC => Gate 1.0 90 356\n",
"TransitionRoute => AircraftType 1.0 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 0.8465141654014587 102 137\n",
"CommonRoute => Engine 0.7702281475067139 105 355\n",
"RampTower => CodeAircraftEngineType 0.7346463203430176 107 376\n",
"CrewMember => CrewMember 1.0 115 334\n",
"Flight => Flight 1.0 116 2\n",
"FlightSpec => FlightConditionCombination 0.7547271847724915 122 427\n",
"AircraftTrackPoint => AircraftState 0.66340172290802 127 185\n",
"Taxipath => TaxiRoute 0.9188315272331238 140 768\n",
"RelativeFix => PointReference 0.3358121216297149 143 589\n",
"2157 out of 140910 1.5307643176495636\n",
"25 out of 32 78.125\n",
"\r\n",
"label_long_distance_b\n",
"0 out of 140910 0.0\n",
"0 out of 32 0.0\n",
"\r\n",
"============= RESULT OF TOP-X blocking =====================\n",
"6846 out of 140910 4.858420268256334\n",
"31 out of 32 96.875\n",
"\r\n",
"=======list of all true matches========\n",
"WeatherCondition => WeatherCondition 3 316\n",
"SurfaceWindCondition => Wind 5 867\n",
"Airport => Aerodrome 6 1\n",
"PhysicalRunway => Runway 9 517\n",
"NavigationFix => SignificantPoint 11 56\n",
"VisibilityCondition => HorizontalVisibility 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 15 664\n",
"AircraftCapacity => Capacity 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 25 567\n",
"TimeInterval => TimeRangeType 40 340\n",
"AircraftWakeCategory => Aircraft 47 134\n",
"EngineeredSystem => Taxiway 48 345\n",
"AircraftType => AircraftOperator 51 171\n",
"BallBearing => AirspaceLayer 57 59\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"AircraftCommunicationSystem => RunwayDirection 65 44\n",
"QRoute => DeicingArea 78 344\n",
"AirportServiceVehicle => Terminal 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 87 360\n",
"ATCSCC => Gate 90 356\n",
"TransitionRoute => AircraftType 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 102 137\n",
"JetRoute => RadioNavigationAid 104 625\n",
"CommonRoute => Engine 105 355\n",
"RampTower => CodeAircraftEngineType 107 376\n",
"AirportSpec => AerodromeSet 114 100\n",
"CrewMember => CrewMember 115 334\n",
"Flight => Flight 116 2\n",
"FlightSpec => FlightConditionCombination 122 427\n",
"AircraftTrackPoint => AircraftState 127 185\n",
"Taxipath => TaxiRoute 140 768\n",
"RelativeFix => PointReference 143 589\n",
"\r\n",
"***** MISSING ****\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"\r\n",
"num_common_words\n",
"WeatherCondition => WeatherCondition 2 3 316\n",
"SurfaceWindCondition => Wind 1 5 867\n",
"PhysicalRunway => Runway 1 9 517\n",
"VisibilityCondition => HorizontalVisibility 1 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 2 15 664\n",
"AircraftCapacity => Capacity 1 17 298\n",
"TimeInterval => TimeRangeType 1 40 340\n",
"AircraftWakeCategory => Aircraft 1 47 134\n",
"EngineeredSystem => Taxiway 1 48 345\n",
"BallBearing => AirspaceLayer 2 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 1 65 44\n",
"QRoute => DeicingArea 1 78 344\n",
"AirportServiceVehicle => Terminal 1 79 79\n",
"ATCSCC => Gate 1 90 356\n",
"TransitionRoute => AircraftType 2 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 2 102 137\n",
"JetRoute => RadioNavigationAid 1 104 625\n",
"CommonRoute => Engine 1 105 355\n",
"RampTower => CodeAircraftEngineType 2 107 376\n",
"CrewMember => CrewMember 2 115 334\n",
"Flight => Flight 1 116 2\n",
"FlightSpec => FlightConditionCombination 1 122 427\n",
"AircraftTrackPoint => AircraftState 1 127 185\n",
"Taxipath => TaxiRoute 1 140 768\n",
"2382 out of 140910 1.6904407068341494\n",
"24 out of 32 75.0\n",
"\r\n",
"class_long_name_distance_a\n",
"WeatherCondition => WeatherCondition 1.0 3 316\n",
"SurfaceWindCondition => Wind 0.8790944218635559 5 867\n",
"PhysicalRunway => Runway 0.8516059517860413 9 517\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.9156749844551086 15 664\n",
"TimeInterval => TimeRangeType 0.8980519771575928 40 340\n",
"AircraftWakeCategory => Aircraft 1.0 47 134\n",
"EngineeredSystem => Taxiway 1.0 48 345\n",
"AircraftType => AircraftOperator 0.852443516254425 51 171\n",
"BallBearing => AirspaceLayer 1.0 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.8838164210319519 65 44\n",
"QRoute => DeicingArea 0.913707971572876 78 344\n",
"AirportServiceVehicle => Terminal 1.0 79 79\n",
"ATCSCC => Gate 1.0 90 356\n",
"TransitionRoute => AircraftType 1.0 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 0.8626880049705505 102 137\n",
"RampTower => CodeAircraftEngineType 0.8093550205230713 107 376\n",
"AirportSpec => AerodromeSet 0.8208879232406616 114 100\n",
"CrewMember => CrewMember 1.0 115 334\n",
"Flight => Flight 1.0 116 2\n",
"Taxipath => TaxiRoute 0.9633474946022034 140 768\n",
"RelativeFix => PointReference 0.795529842376709 143 589\n",
"2120 out of 140910 1.5045064225392095\n",
"21 out of 32 65.625\n",
"\r\n",
"label_long_distance_a\n",
"0 out of 140910 0.0\n",
"0 out of 32 0.0\n",
"\r\n",
"comment_distance_a\n",
"WeatherCondition => WeatherCondition 0.7918440699577332 3 316\n",
"PhysicalRunway => Runway 0.7813199162483215 9 517\n",
"NavigationFix => SignificantPoint 0.788296639919281 11 56\n",
"VisibilityCondition => HorizontalVisibility 0.8003379702568054 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.9089569449424744 15 664\n",
"AircraftCapacity => Capacity 0.8342741131782532 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 0.8646405935287476 25 567\n",
"TimeInterval => TimeRangeType 0.7229284048080444 40 340\n",
"AircraftType => AircraftOperator 0.907685935497284 51 171\n",
"BallBearing => AirspaceLayer 0.7635786533355713 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.7357498407363892 65 44\n",
"AirportServiceVehicle => Terminal 0.8493094444274902 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 0.7947181463241577 87 360\n",
"CanadianAirport => AircraftMakeModelSeries 0.8741694092750549 102 137\n",
"RampTower => CodeAircraftEngineType 0.84563148021698 107 376\n",
"AirportSpec => AerodromeSet 0.8796764016151428 114 100\n",
"CrewMember => CrewMember 0.8921281695365906 115 334\n",
"Taxipath => TaxiRoute 0.8659443855285645 140 768\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"2099 out of 140910 1.4896032928819813\n",
"18 out of 32 56.25\n",
"\r\n",
"class_long_name_distance_b\n",
"WeatherCondition => WeatherCondition 1.0 3 316\n",
"SurfaceWindCondition => Wind 0.8041812777519226 5 867\n",
"Airport => Aerodrome 0.5978173613548279 6 1\n",
"PhysicalRunway => Runway 0.9253858923912048 9 517\n",
"VisibilityCondition => HorizontalVisibility 0.7832207679748535 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.8289969563484192 15 664\n",
"TimeInterval => TimeRangeType 0.6964922547340393 40 340\n",
"AircraftWakeCategory => Aircraft 1.0 47 134\n",
"EngineeredSystem => Taxiway 1.0 48 345\n",
"AircraftType => AircraftOperator 0.6602221131324768 51 171\n",
"BallBearing => AirspaceLayer 1.0 57 59\n",
"AircraftCommunicationSystem => RunwayDirection 0.8014291524887085 65 44\n",
"QRoute => DeicingArea 0.6480300426483154 78 344\n",
"AirportServiceVehicle => Terminal 1.0 79 79\n",
"ATCSCC => Gate 1.0 90 356\n",
"TransitionRoute => AircraftType 1.0 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 0.8465141654014587 102 137\n",
"CommonRoute => Engine 0.7702281475067139 105 355\n",
"RampTower => CodeAircraftEngineType 0.7346463203430176 107 376\n",
"CrewMember => CrewMember 1.0 115 334\n",
"Flight => Flight 1.0 116 2\n",
"FlightSpec => FlightConditionCombination 0.7547271847724915 122 427\n",
"AircraftTrackPoint => AircraftState 0.66340172290802 127 185\n",
"Taxipath => TaxiRoute 0.9188315272331238 140 768\n",
"RelativeFix => PointReference 0.3358121216297149 143 589\n",
"2157 out of 140910 1.5307643176495636\n",
"25 out of 32 78.125\n",
"\r\n",
"label_long_distance_b\n",
"0 out of 140910 0.0\n",
"0 out of 32 0.0\n",
"\r\n",
"comment_distance_b\n",
"WeatherCondition => WeatherCondition 0.6271312236785889 3 316\n",
"SurfaceWindCondition => Wind 0.4179730117321014 5 867\n",
"PhysicalRunway => Runway 0.6193324327468872 9 517\n",
"VisibilityCondition => HorizontalVisibility 0.6542302966117859 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 0.7768253087997437 15 664\n",
"AircraftCapacity => Capacity 0.6518810987472534 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 0.6116131544113159 25 567\n",
"TimeInterval => TimeRangeType 0.3665831685066223 40 340\n",
"AircraftType => AircraftOperator 0.7004066109657288 51 171\n",
"BallBearing => AirspaceLayer 0.614949643611908 57 59\n",
"AircraftNavigationSystem => StandardInstrumentArrival 0.5681436061859131 60 273\n",
"AirportServiceVehicle => Terminal 0.7174623608589172 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 0.5164375901222229 87 360\n",
"ATCSCC => Gate 0.6500580310821533 90 356\n",
"TransitionRoute => AircraftType 0.6725626587867737 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 0.742458701133728 102 137\n",
"JetRoute => RadioNavigationAid 0.5490636229515076 104 625\n",
"CommonRoute => Engine 0.6712578535079956 105 355\n",
"RampTower => CodeAircraftEngineType 0.6537625789642334 107 376\n",
"CrewMember => CrewMember 0.7734282612800598 115 334\n",
"Taxipath => TaxiRoute 0.8590744733810425 140 768\n",
"1974 out of 140910 1.4008941877794336\n",
"21 out of 32 65.625\n",
"\r\n",
"============= RESULT OF TOP-X blocking =====================\n",
"8031 out of 140910 5.699382584628486\n",
"32 out of 32 100.0\n",
"\r\n",
"=======list of all true matches========\n",
"WeatherCondition => WeatherCondition 3 316\n",
"SurfaceWindCondition => Wind 5 867\n",
"Airport => Aerodrome 6 1\n",
"PhysicalRunway => Runway 9 517\n",
"NavigationFix => SignificantPoint 11 56\n",
"VisibilityCondition => HorizontalVisibility 12 291\n",
"RunwayVisibleRangeMeasurement => RunwayVisualRange 15 664\n",
"AircraftCapacity => Capacity 17 298\n",
"AircraftFlow => OccupancyTrafficMonitoringValue 25 567\n",
"TimeInterval => TimeRangeType 40 340\n",
"AircraftWakeCategory => Aircraft 47 134\n",
"EngineeredSystem => Taxiway 48 345\n",
"AircraftType => AircraftOperator 51 171\n",
"BallBearing => AirspaceLayer 57 59\n",
"AircraftNavigationSystem => StandardInstrumentArrival 60 273\n",
"AircraftCommunicationSystem => RunwayDirection 65 44\n",
"QRoute => DeicingArea 78 344\n",
"AirportServiceVehicle => Terminal 79 79\n",
"DeicingTruck => StandardInstrumentDeparture 87 360\n",
"ATCSCC => Gate 90 356\n",
"TransitionRoute => AircraftType 98 138\n",
"CanadianAirport => AircraftMakeModelSeries 102 137\n",
"JetRoute => RadioNavigationAid 104 625\n",
"CommonRoute => Engine 105 355\n",
"RampTower => CodeAircraftEngineType 107 376\n",
"AirportSpec => AerodromeSet 114 100\n",
"CrewMember => CrewMember 115 334\n",
"Flight => Flight 116 2\n",
"FlightSpec => FlightConditionCombination 122 427\n",
"AircraftTrackPoint => AircraftState 127 185\n",
"Taxipath => TaxiRoute 140 768\n",
"RelativeFix => PointReference 143 589\n",
"\r\n",
"***** MISSING ****\n"
]
}
],
"source": [
"columns = [\n",
" 'num_common_words', \n",
" 'class_long_name_distance_a', 'label_long_distance_a', 'comment_distance_a', \n",
" 'class_long_name_distance_b', 'label_long_distance_b', 'comment_distance_b', \n",
" ]\n",
"\n",
"data = []\n",
"\n",
"for idx in range(len(columns)):\n",
" features = columns[:idx+1]\n",
" recall, reduction = get_blocking_performance(features)\n",
" \n",
" data.append(['top-x-' + str(idx+1), 'recall', recall])\n",
" data.append(['top-x-' + str(idx+1), 'reduction', reduction])\n",
"\n",
"\n",
"columns = [\"top-x with different number of distance features\", \"metrics\", \"result\"]\n",
"\n",
"\n",
"result_df = pd.DataFrame.from_records(data, columns=columns)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "21c431b2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>top-x with different number of distance features</th>\n",
" <th>metrics</th>\n",
" <th>result</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>top-x-1</td>\n",
" <td>recall</td>\n",
" <td>0.750000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>top-x-1</td>\n",
" <td>reduction</td>\n",
" <td>0.983096</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>top-x-2</td>\n",
" <td>recall</td>\n",
" <td>0.843750</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>top-x-2</td>\n",
" <td>reduction</td>\n",
" <td>0.972131</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>top-x-3</td>\n",
" <td>recall</td>\n",
" <td>0.843750</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>top-x-3</td>\n",
" <td>reduction</td>\n",
" <td>0.972131</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>top-x-4</td>\n",
" <td>recall</td>\n",
" <td>0.937500</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>top-x-4</td>\n",
" <td>reduction</td>\n",
" <td>0.959421</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>top-x-5</td>\n",
" <td>recall</td>\n",
" <td>0.968750</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>top-x-5</td>\n",
" <td>reduction</td>\n",
" <td>0.951416</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>top-x-6</td>\n",
" <td>recall</td>\n",
" <td>0.968750</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>top-x-6</td>\n",
" <td>reduction</td>\n",
" <td>0.951416</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>top-x-7</td>\n",
" <td>recall</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>top-x-7</td>\n",
" <td>reduction</td>\n",
" <td>0.943006</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" top-x with different number of distance features metrics result\n",
"0 top-x-1 recall 0.750000\n",
"1 top-x-1 reduction 0.983096\n",
"2 top-x-2 recall 0.843750\n",
"3 top-x-2 reduction 0.972131\n",
"4 top-x-3 recall 0.843750\n",
"5 top-x-3 reduction 0.972131\n",
"6 top-x-4 recall 0.937500\n",
"7 top-x-4 reduction 0.959421\n",
"8 top-x-5 recall 0.968750\n",
"9 top-x-5 reduction 0.951416\n",
"10 top-x-6 recall 0.968750\n",
"11 top-x-6 reduction 0.951416\n",
"12 top-x-7 recall 1.000000\n",
"13 top-x-7 reduction 0.943006"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result_df"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "7e887e52",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/ipykernel_1530081/2518077597.py:12: UserWarning: FixedFormatter should only be used together with FixedLocator\n",
" ax2.set_yticklabels(np.round(ax1.get_yticks()*100,1))\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAqQAAAGPCAYAAACKxcLBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAzkUlEQVR4nO3deZgdZZ33//cnBBADyiq7EhUXQHYFRRERARmfICqbOoCDMI6Cjg4qqA8g6u+HO24zEhVZVFBxiyOKqCBubJGwD8tA1LCKCLKqId/nj6rAsemkT590ujrJ+3Vd5+pTVXfdddd9TtKfvmtLVSFJkiR1ZVLXDZAkSdKyzUAqSZKkThlIJUmS1CkDqSRJkjplIJUkSVKnDKSSJEnq1OSuGyBpfM2cOXODSZMm/XjevHnPAtJ1e7TUq0mTJv3PvHnzdt1mm23mdN0YSROTgVRaxkyaNOnH66yzzsZrr712Jk3yIIkWr3nz5uW22257xpw5c345bdq0nWbMmDG76zZJmnj8bSQtY+bNm/estddee7JhVONh0qRJrLPOOstNmjTpKcDR06ZN27rrNkmaePyNJC17HBnVuJo0aRJJAO4C9u+4OZImIH8rSVoqnHzyyRx22GEAHHvssXzsYx/ruEXdWZT9P+GEE3jggQcemd5jjz24++67x6hlPAisPFaVSVp6eA6ptIzb5p2njml9Mz96wKjKVxVVxZIwavv7454zpvU9+egrRlV+PPrqhBNO4PWvfz2Pf/zjATjrrLPGehNeSCfpMSb+bwBJS53Zs2fzzGc+kwMOOIDNNtuMD3zgAzz3uc9l880355hjjnmk3Kmnnsrmm2/OFltswT//8z8D8P3vf5/tttuOrbbail122YXbb7+9q90YF/321Yc+9CGe8Yxn8MIXvpBrr732kfk77bQTl1xyCQB33nknG220EQAPP/wwRxxxBJttthmbb745n/nMZ/j0pz/NLbfcwkte8hJe8pKXALDRRhtx5513AvCJT3yCzTbbjM0224wTTjjhkfY9+9nP5pBDDmHTTTdl11135cEHHxyHnpG0NHGEVFInrr/+ek455RT+8pe/cOaZZ3LRRRdRVUybNo3zzz+fNdZYgw9+8IP8+te/Zs011+Suu+4C4IUvfCEXXHABSfjiF7/IRz7yET7+8Y93vDeL10h9NWXKFM444wxmzZrF3Llz2Xrrrdlmm20WWuf06dOZPXs2s2bNYvLkydx1112svvrqfOITn+Dcc89lzTXX/IfyM2fO5Mtf/jIXXnghVcV2223Hi1/8YlZbbTWuv/56Tj/9dL7whS+wzz778K1vfYvXv/71i7NLJC1lDKSSOvGUpzyF7bffniOOOIIf//jHbLXVVgDcd999XH/99Vx22WXsvffejwSj1VdfHYA5c+aw7777cuutt/K3v/2NqVOndrYP42Wkvrr33nvZa6+9HjnMPm3atBHr/MlPfsKb3vQmJk9ufg3M798F+eUvf8lee+3FlClTAHjVq17FL37xC6ZNm8bUqVPZcsstAdhmm22YPXv2gHsqaVnlIXtJnZgfbKqKo446ilmzZjFr1ixuuOEGDj744AWud/jhh3PYYYdxxRVXcOKJJ/LQQw+NV5M7M2hfAUyePJl58+YBLLa+WnHFFR95v9xyyzF37tzFsh1JSy8DqaRO7bbbbpx00kncd999ANx8883ccccd7Lzzznzzm9/kT3/6E8Ajh+zvuece1l9/fQBOOeWUbhrdkQX11Y477sh3v/tdHnzwQe69916+//3vP7LORhttxMyZMwE488wzH5n/spe9jBNPPPGR8Di/f1dZZRXuvffex2z7RS96Ed/97nd54IEHuP/++/nOd77Di170osW2r5KWLR6yl9SpXXfdlWuuuYbnP//5AKy88sp85StfYdNNN+W9730vL37xi1luueXYaqutOPnkkzn22GPZe++9WW211dh555256aabOt6D8bOgvtp6663Zd9992WKLLXjSk57Ec5/73EfWOeKII9hnn32YPn06//RP//TI/De+8Y1cd911bL755iy//PIccsghHHbYYRx66KHsvvvurLfeepx77rmPlN9666056KCDeN7znvfI+ltttZWH5yWNiVRV122QNI5mzpxZI13wIo21mTNn8v73v/+DwFozZsx4U9ftkTSxeMhekiRJnTKQSpIkqVMGUkmSJHXKQCote2r+bYCk8TBv3jy8XkHSwhhIpWXMpEmT/ufWW2+dZyjVeJg3bx633nrrvIceeujOrtsiaeLytk/SMmbevHm7zp49+5Jbb7117SRdN0dLuarioYceuuu00047DXgccF/XbZI08RhIpWXMNttsM2fatGk7Au8ClgM8lqrxsBoQ4PNdN0TSxON9SKVl1LRp0zYE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\n",
"text/plain": [
"<Figure size 720x432 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import itertools\n",
"\n",
"\n",
"# Plot\n",
"fig, ax1 = plt.subplots(figsize=(10, 6))\n",
"g = sns.barplot(x=columns[0], y=\"result\", hue=\"metrics\",\\\n",
" data=result_df, ax=ax1)\n",
"\n",
"ax2 = ax1.twinx()\n",
"\n",
"ax2.set_ylim(ax1.get_ylim())\n",
"ax2.set_yticklabels(np.round(ax1.get_yticks()*100,1))\n",
"\n",
"ax1.set_ylabel('recall', fontsize=20)\n",
"ax2.set_ylabel('reduction(%)', fontsize=20)\n",
"\n",
"plt.grid(False)\n",
"ax1.grid(False)\n",
"ax2.grid(False)\n",
"\n",
"g.legend(loc='upper center', bbox_to_anchor=(0.5, 1.1), ncol=2, fancybox=True, shadow=True)\n",
"\n",
"plt.show()\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "260a09d6",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import itertools\n",
"\n",
"sns.set_style('whitegrid')\n",
"\n",
"data1 = pd.DataFrame(np.random.rand(17, 3), columns=['A', 'B', 'C']).assign(Location=1)\n",
"data2 = pd.DataFrame(np.random.rand(17, 3) + 0.2, columns=['A', 'B', 'C']).assign(Location=2)\n",
"data3 = pd.DataFrame(np.random.rand(17, 3) + 0.4, columns=['A', 'B', 'C']).assign(Location=3)\n",
"cdf = pd.concat([data1, data2, data3])\n",
"mdf = pd.melt(cdf, id_vars=['Location'], var_name=['Letter'])\n",
"ax = sns.barplot(x=\"Location\", y=\"value\", hue=\"Letter\", data=mdf, errwidth=0)\n",
"\n",
"num_locations = len(mdf.Location.unique())\n",
"hatches = itertools.cycle(['/', '//', '+', '-', 'x', '\\\\', '*', 'o', 'O', '.'])\n",
"for i, bar in enumerate(ax.patches):\n",
" if i % num_locations == 0:\n",
" hatch = next(hatches)\n",
" bar.set_hatch(hatch)\n",
"\n",
"ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.1), ncol=3, fancybox=True, shadow=True)\n",
"\n",
"plt.show()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e40e7258",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 5
}