package edu.stanford.nlp.sempre.freebase;
import edu.stanford.nlp.io.IOUtils;
import edu.stanford.nlp.sempre.*;
import edu.stanford.nlp.sempre.freebase.FbFormulasInfo.BinaryFormulaInfo;
import edu.stanford.nlp.sempre.MergeFormula.Mode;
import edu.stanford.nlp.sempre.freebase.utils.FileUtils;
import edu.stanford.nlp.sempre.freebase.utils.FormatConverter;
import edu.stanford.nlp.stats.ClassicCounter;
import edu.stanford.nlp.stats.Counter;
import edu.stanford.nlp.util.StringUtils;
import fig.basic.LispTree;
import fig.basic.LogInfo;
import fig.basic.MapUtils;
import fig.basic.Option;
import fig.exec.Execution;
import fig.prob.SampleUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
/**
* One-time hack that converts the Cai & Yates dataset to our format.
* @author Jonathan Berant
*/
public class Free917Converter implements Runnable {
private Counter<Integer> argnumCounter = new ClassicCounter<Integer>();
private FbFormulasInfo formulaInfo = FbFormulasInfo.getSingleton();
private Set<String> cvts;
@Option(gloss = "Input path to examples to canonicalize")
public String inDir;
@Option(gloss = "Input path to examples to canonicalize")
public String outDir;
@Option(gloss = "Input path to examples to canonicalize")
public String entityInfoFile;
@Option(gloss = "Input path to examples to canonicalize")
public String cvtFile;
@Option(gloss = "Input path to examples to canonicalize")
public String midToIdFile;
@Override
public void run() {
try {
String inQuestionsFile = inDir + "question-and-logical-form-917/dataset-all-917.txt";
String inNpFile = inDir + "fixed-np-manually.txt";
String outQuestionFile = outDir + "dataset-all-917_corrected.txt";
String outNpFile = outDir + "fixed-np-manually_corrected.txt";
String outputPrefix = outDir + "free917";
String free917EntityInfoFile = outDir + "entityInfo.txt";
String free917MissingEntitiesFile = outDir + "missingEntities.txt";
cvts = FileUtils.loadSet(cvtFile);
correctErrors(inQuestionsFile, inNpFile, outQuestionFile, outNpFile);
convertExampleFile(outQuestionFile, outputPrefix);
genreateEntityInfoFile(outNpFile, entityInfoFile, free917EntityInfoFile, free917MissingEntitiesFile);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
public static void main(String[] args) throws IOException {
Execution.run(args, new Free917Converter());
}
private void correctErrors(String inQuestionsFile, String inNpFile,
String outQuestionFile, String outNpFile) throws IOException {
// manual corrections of question file
int i = 0;
PrintWriter questionWriter = IOUtils.getPrintWriter(outQuestionFile);
for (String line : IOUtils.readLines(inQuestionsFile)) {
if (line.equals("(lambda $0 /type/int (exists $1 (/award/ranking@rank@year@note@list@item:t $0 /type/datetime/2000:/type/datetime $1 /en/fortune_500:/award/ranked_list /en/monsanto:/award/ranked_item)))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (/award/ranking@rank@year@note@list@item:t $0 /type/datetime/2000:/type/datetime $1 $2 /en/fortune_500:/award/ranked_list /en/monsanto:/award/ranked_item)))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (exists $4 (/medicine/disease/survival_rates&/medicine/survival_rate@gender@race@years@rate@disease_stage:t /en/prostate_cancer:/medicine/disease $1 $2 $0 $3 $4))))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (exists $4 (/medicine/disease/survival_rates&/medicine/survival_rate@gender@race@years@rate@disease_stage:t /en/prostate_cancer:/medicine/disease $-1 $1 $2 $3 $0 $4))))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (/soccer/football_league_participation@team@league@from@to:t $1 $0 $2 $3)))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (/soccer/football_league_participation@team@league@from@to:t /en/real_madrid:/soccer/football_team $1 $0 $2 $3)))))");
else if (line.equals("(lambda $0 /common/topic (/tv/tv_program@languages:t /base/ranker/rankerurlname/firefly$002f143400:/tv/tv_program $0))"))
questionWriter.println("(lambda $0 /common/topic (/tv/tv_program@languages:t /m/014v3t:/tv/tv_program $0))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (/film/film/estimated_budget&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/edward_scissorhands:/film/film $1 $0 $2))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (/film/film/estimated_budget&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/edward_scissorhands:/film/film $-1 $1 $0 $2))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (/film/film/estimated_budget&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/transformers:/film/film $1 $0 $2))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (/film/film/estimated_budget&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/transformers:/film/film $-1 $1 $0 $2))))");
else if (line.equals("(lambda $0 /location/location (exists $1 (exists $2 (exists $3 (exists $4 (exists $5 (/library/public_library/address&/location/mailing_address@street_address@street_address_2@citytown@postal_code@state_province_region@country:t /m/02ncllz:/library/public_library $1 $2 $0 $3 $4 $5)))))))"))
questionWriter.println("(lambda $0 /location/location (exists $1 (exists $2 (exists $3 (exists $4 (exists $5 (/library/public_library/address&/location/mailing_address@street_address@street_address_2@citytown@postal_code@state_province_region@country:t /m/02ncllz:/library/public_library $-1 $1 $2 $0 $3 $4 $5)))))))");
else if (line.matches("who won ali.*frazier ii"))
questionWriter.println("who won muhammad ali vs. joe frazier ii");
else if (line.equals("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (/base/boxing/match_boxer_relationship@match@boxer@winner_won@points:t $1 $0 $2 $3)))))")) {
if (i++ == 0)
questionWriter.println("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (/boxing/match_boxer_relationship@match@boxer@winner_won@points:t /en/ali-frazier_ii:/boxing/boxing_match $1 $0 /type/boolean/true $2 $3)))))");
else
questionWriter.println("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (/boxing/match_boxer_relationship@match@boxer@winner_won@points:t /m/0kvlz:/boxing/boxing_match $1 $0 $2 $3)))))");
} else if (line.equals("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (exists $4 (exists $5 (exists $6 (/base/boxing/boxing_title_tenure@champion@weight@from@to@defenses@title@notes:t $0 $1 $2 $3 $4 $5 $6))))))))"))
questionWriter.println("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (exists $4 (exists $5 (exists $6 (/boxing/boxing_title_tenure@champion@weight@from@to@defenses@title@notes:t $0 $1 $2 $3 $4 /m/0chgh2j:/boxing/boxing_title $5 $6))))))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/business_operation/revenue&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/motorola:/business/business_operation $0 $1 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/business_operation/revenue&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/motorola:/business/business_operation $-1 $0 $1 $2))))");
else if (line.equals("(lambda $1 /common/topic (exists $2 (exists $3 (/business/business_operation/net_profit&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/procter_gamble:/business/business_operation $1 $2 $3))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (/business/business_operation/net_profit&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/procter_gamble:/business/business_operation $-1 $1 $0 $2))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (/business/business_operation/revenue&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/viacom:/business/business_operation /un/2009:/type/datetime $0 $1)))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (/business/business_operation/revenue&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/viacom:/business/business_operation /type/datetime/2009:/type/datetime $1 $0)))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (/business/business_operation/operating_income&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/j_c_penney:/business/business_operation $1 $0 $2))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (/business/business_operation/operating_income&/measurement_unit/dated_money_value@valid_date@amount@currency:t /en/j_c_penney:/business/business_operation $-1 $1 $0 $2))))");
else if (line.equals("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/belgium:/location/statistical_region $0 $1 $2))))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/belgium:/location/statistical_region $-1 $0 $1 $2))))");
else if (line.equals("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/iowa:/location/statistical_region $0 $1 $2))))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/iowa:/location/statistical_region $-1 $0 $1 $2))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (/location/statistical_region/major_exports&/location/imports_exports_by_industry@amount@currency@date@industry:t /en/madagascar:/location/statistical_region $1 $2 $3 $0)))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (/location/statistical_region/major_exports&/location/imports_exports_by_industry@amount@currency@date@industry:t /en/madagascar:/location/statistical_region $-1 $1 $2 $3 $0)))))");
else if (line.equals("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/africa:/location/statistical_region $0 $1 $2))))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/africa:/location/statistical_region $-1 $0 $1 $2))))");
else if (line.equals("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/asia:/location/statistical_region $0 $1 $2))))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/asia:/location/statistical_region $-1 $0 $1 $2))))");
else if (line.equals("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/earth:/location/statistical_region $0 $1 $2))))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/earth:/location/statistical_region $-1 $0 $1 $2))))");
else if (line.equals("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/europe:/location/statistical_region $0 $1 $2))))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/europe:/location/statistical_region $-1 $0 $1 $2))))");
else if (line.equals("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/earth:/location/statistical_region $0 $1 $2))))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (exists $2 (/location/statistical_region/population&/measurement_unit/dated_integer@number@year@source:t /en/earth:/location/statistical_region $-1 $0 $1 $2))))");
else if (line.equals("(count $0 (exists $1 (exists $2 (exists $3 (exists $4 (exists $5 (/tv/regular_tv_appearance@actor@character@series@from@to@special_performance_type@seasons:t /en/ron_glass:/tv/tv_actor $1 $0 $2 $3 $4 $5)))))))"))
questionWriter.println("(count $0 (exists $1 (exists $2 (exists $3 (exists $4 (exists $5 (/tv/regular_tv_appearance@actor@character@series@from@to@special_performance_type@seasons:t /en/ron_glass:/tv/tv_actor $1 $2 $0 $3 $4 $5)))))))");
else if (line.equals("(lambda $0 /common/topic (/fashion/garment@specialization_of:t /fashion/garment:/fashion/garment $0))"))
questionWriter.println("(lambda $0 /common/topic (/fashion/garment@specialization_of:t /en/knickerbockers:/fashion/garment $0))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (exists $4 (/award/award_honor@notes_description@year@award@award_winner@honored_for@ceremony:t $1 $2 /en/golden_globe_award_for_best_motion_picture_-_drama:/award/award_category $3 $0 $4))))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (exists $4 (/award/award_honor@notes_description@year@award@award_winner@honored_for@ceremony:t $1 $2 /en/golden_globe_award_for_best_motion_picture_-_drama:/award/award_category $3 $4 $0))))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (/celebrities/sexual_orientation_phase@celebrity@start@end@sexual_orientation:t /en/britney_spears:/celebrities/celebrity $1 $2 $0))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (/celebrities/sexual_orientation_phase@celebrity@start@end@sexual_orientation:t /en/britney_spears:/celebrities/celebrity $1 $2 $3 $0))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/projects/project_participation@project@participant@role@from_date@to_date:t /m/0gk9x46:/projects/project /en/francesco_sabatini:/projects/project_participant $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/projects/project_participation@project@participant@role@from_date@to_date:t /m/0gk9x46:/projects/project $1 /en/francesco_sabatini:/projects/project_participant $2 $3 $0))))");
else if (line.equals("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (exists $4 (exists $5 (exists $6 (/government/government_position_held@office_holder@office_position_or_title@governmental_body@district_represented@appointed_by@from@to@jurisdiction_of_office@legislative_sessions:t $0 /en/united_states_senator:/government/government_office_or_title $1 $2 $3 $4 $5 /en/colorado:/government/governmental_jurisdiction $6))))))))"))
questionWriter.println("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (exists $4 (exists $5 (exists $6 (/government/government_position_held@office_holder@office_position_or_title@governmental_body@district_represented@appointed_by@from@to@jurisdiction_of_office@legislative_sessions:t $0 /en/united_states_senator:/government/government_office_or_title $1 $2 /en/colorado:/government/governmental_jurisdiction $3 $4 $5 $6 $7 $8))))))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (/ice_hockey/hockey_previous_roster_position@team@player@from@to:t /en/montreal_canadiens:/ice_hockey/hockey_team /en/christopher_higgins:/ice_hockey/hockey_player $0 $1)))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (/ice_hockey/hockey_previous_roster_position@team@player@from@to:t /en/montreal_canadiens:/ice_hockey/hockey_team /en/christopher_higgins:/ice_hockey/hockey_player $1 $2 $0)))");
else if (line.equals("(lambda $0 /location/location (/organization/organization@headquarters:t /en/apple_inc:/organization/organization $0))"))
questionWriter.println("(lambda $0 /location/location (exists $1 (exists $2 (exists $3 (exists $4 (/organization/organization/headquarters&/location/mailing_address@citytown@race@years@rate@disease_stage:t /en/apple_inc:/organization/organization $-1 $0))))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (/celebrities/substance_abuse_problem@substance@start@end@celebrity:t /en/cocaine:/celebrities/abused_substance $0 $1 /en/robin_williams:/celebrities/celebrity)))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (/celebrities/substance_abuse_problem@substance@start@end@celebrity:t /en/cocaine:/celebrities/abused_substance $1 $2 $0 /en/robin_williams:/celebrities/celebrity)))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (/travel/transportation@travel_destination@mode_of_transportation@transport_operator@transport_terminus:t /en/paris:/travel/travel_destination $1 $0 $2))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (/travel/transportation@travel_destination@mode_of_transportation@transport_operator@transport_terminus:t /en/paris:/travel/travel_destination $1 $2 $0))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (/martial_arts/martial_arts_certification@person@qualification@certifying_body@date@art:t /en/cathy_landers:/martial_arts/martial_artist /en/fifth_degree:/martial_arts/martial_arts_qualification $1 $0 /en/seishindo_kenpo:/martial_arts/martial_art)))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (/martial_arts/martial_arts_certification@person@qualification@certifying_body@date@art:t /en/cathy_landers:/martial_arts/martial_artist /en/fifth_degree:/martial_arts/martial_arts_qualification $1 $2 $0 /en/seishindo_kenpo:/martial_arts/martial_art)))");
else if (line.equals("(lambda $0 /type/int (exists $1 (exists $2 (exists $3 (/american_football/football_historical_roster_position@player@team@from@to@number@position_s:t /en/david_akers:/american_football/football_player /en/philadelphia_eagles:/american_football/football_team $1 $2 $0 $3)))))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (exists $2 (exists $3 (/american_football/football_historical_roster_position@player@team@from@to@number@position_s:t /en/david_akers:/american_football/football_player /en/philadelphia_eagles:/american_football/football_team $1 $2 $3 $0 $4)))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (exists $4 (/award/award_honor@notes_description@year@award@award_winner@honored_for@ceremony:t $1 $2 /m/04d215m:/award/award_category $3 $0 $4))))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (exists $4 (/award/award_honor@notes_description@year@award@award_winner@honored_for@ceremony:t $1 $2 /m/04d215m:/award/award_category $3 $4 $0))))))");
else if (line.equals("(count $0 (/architecture/architect@structures_designed:t /en/frank_lloyd_wright:/architecture/architect $0))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (/architecture/architect@structures_designed:t /en/frank_lloyd_wright:/architecture/architect $0)))");
else if (line.equals("(lambda $0 /common/topic (/conferences/conference_subject@series_of_conferences_about_this:t /en/mathematics:/conferences/conference_subject $0))"))
questionWriter.println("(count $0 (/conferences/conference_subject@series_of_conferences_about_this:t /en/mathematics:/conferences/conference_subject $0))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/ritz_cracker:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/ritz_cracker:/business/brand $1 $2 $0))))");
else if (line.equals("(lambda $0 /type/int (exists $1 (exists $2 (exists $3 (/american_football/player_game_statistics@player@season@team@games@starts@as_of_week:t /en/donovan_mcnabb:/american_football/football_player /en/2008_nfl_season:/sports/sports_league_season $1 $0 $2 $3)))))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (exists $2 (exists $3 (/american_football/player_game_statistics@player@season@team@games@starts@as_of_week:t /en/donovan_mcnabb:/american_football/football_player /en/2008_nfl_season:/sports/sports_league_season $1 $2 $0 $3)))))");
else if (line.equals("(count $0 (exists $1 (exists $2 (/royalty/chivalric_order_position_tenure@order@chivalric_office@from@until@officer:t /en/order_of_the_most_holy_annunciation:/royalty/order_of_chivalry /en/grand_master:/royalty/chivalric_office $1 $2 $0))))"))
questionWriter.println("(count $0 (exists $1 (exists $2 (/royalty/chivalric_order_position_tenure@order@chivalric_office@from@until@officer:t /en/order_of_the_most_holy_annunciation:/royalty/order_of_chivalry /en/grand_master:/royalty/chivalric_office $1 $2 $3 $0))))");
else if (line.equals("(count $0 (exists $1 (exists $2 (exists $3 (/film/performance@actor@film@special_performance_type@character@character_note:t $1 /en/charlies_angels:/film/film $2 $0 $3)))))"))
questionWriter.println("(count $0 (exists $1 (exists $2 (exists $3 (/film/performance@actor@film@special_performance_type@character@character_note:t $1 /en/charlies_angels:/film/film $2 $3 $0 $4)))))");
else if (line.equals("(lambda $0 /location/location (/library/public_library@address:t /en/mitchell_public_library:/library/public_library $0))"))
questionWriter.println("(lambda $0 /location/location (/library/public_library/address&/location/mailing_address@citytown@street_address:t /m/0j9by57:/library/public_library $-1 $1 $0))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/chips_ahoy:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/chips_ahoy:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(count $0 (exists $1 (exists $2 (/media_common/dedication@dedicated_by@dedicated_to@work_dedicated@notes:t /en/joseph_haydn:/media_common/dedicator $1 $0 $2))))"))
questionWriter.println("(count $0 (exists $1 (exists $2 (/media_common/dedication@dedicated_by@dedicated_to@work_dedicated@notes:t /en/wolfgang_amadeus_mozart:/media_common/dedicator $1 /en/joseph_haydn:/media_common/dedicator $2 $0 $3))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (/government/political_party_tenure@politician@from@to@party:t /en/grover_cleveland:/government/politician $1 $2 $0))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (/government/political_party_tenure@politician@from@to@party:t /en/grover_cleveland:/government/politician $1 $2 $3 $0))))");
else if (line.equals("(lambda $0 /location/location (/organization/organization@headquarters:t /en/h_r_block:/organization/organization $0))"))
questionWriter.println("(lambda $0 /location/location (/organization/organization/headquarters&/location/mailing_address@citytown@street_address:t /en/h_r_block:/organization/organization $-1 $0))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/country_time:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/country_time:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/girl_scouts_of_the_usa:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (/organization/organization@date_founded:t /en/girl_scouts_of_the_usa:/organization/organization $0))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/tostitos:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/tostitos:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/girl_scouts_of_the_usa:/business/brand $0 $1 $2))))"))
questionWriter.println("(lambda $0 /common/topic (/organization/organization@founders:t /en/girl_scouts_of_the_usa:/business/brand $0))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /m/02r3cjp:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /m/02r3cjp:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/stove_top_stuffing:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/stove_top_stuffing:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/oreo:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/oreo:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(count $0 (exists $1 (exists $2 (exists $3 (/cvg/musical_game_song_relationship@download@game@platforms@song@release_date:t $1 /en/guitar_hero_aerosmith:/cvg/musical_game $2 $0 $3)))))"))
questionWriter.println("(count $0 (exists $1 (exists $2 (exists $3 (/cvg/musical_game_song_relationship@download@game@platforms@song@release_date:t $1 /en/guitar_hero_aerosmith:/cvg/musical_game $2 $3 $0 $4)))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (/olympics/olympic_athlete_affiliation@athlete@country@olympics@sport:t /m/04dnjr9:/olympics/olympic_athlete $1 /en/1992_summer_olympics:/olympics/olympic_games $0)))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (/olympics/olympic_athlete_affiliation@athlete@country@olympics@sport:t /m/04dnjr9:/olympics/olympic_athlete $1 $2 /en/1992_summer_olympics:/olympics/olympic_games $3 $0)))");
else if (line.equals("(count $0 (exists $1 (exists $2 (exists $3 (exists $4 (exists $5 (/tv/regular_tv_appearance@actor@character@series@from@to@special_performance_type@seasons:t /en/jerry_seinfeld:/tv/tv_actor $1 $0 $2 $3 $4 $5)))))))"))
questionWriter.println("(count $0 (exists $1 (exists $2 (exists $3 (exists $4 (exists $5 (/tv/regular_tv_appearance@actor@character@series@from@to@special_performance_type@seasons:t /en/jerry_seinfeld:/tv/tv_actor $1 $2 $0 $3 $4 $5 $6)))))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (/basketball/basketball_roster_position@number@player@position@team:t $1 /en/richard_hamilton:/basketball/basketball_player $2 $0))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (/basketball/basketball_roster_position@number@player@position@team:t $1 /en/richard_hamilton:/basketball/basketball_player $2 $3 $0))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/crystal_light:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/crystal_light:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/kool-aid:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/kool-aid:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (/award/award_honor@notes_description@year@award@award_winner@honored_for@ceremony:t $1 /type/datetime/1981:/type/datetime $2 /en/danny_devito:/award/award_winner $0 $3)))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (/award/award_honor@notes_description@year@award@award_winner@honored_for@ceremony:t $1 /type/datetime/1981:/type/datetime $2 $3 /en/danny_devito:/award/award_winner $4 $0 $5)))))");
else if (line.equals("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (/american_football/football_historical_roster_position@player@team@from@to@number@position_s:t $0 /en/green_bay_packers:/american_football/football_team $1 $2 $3 /en/quarterback:/american_football/football_position)))))"))
questionWriter.println("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (/american_football/football_historical_roster_position@player@team@from@to@number@position_s:t $0 /en/green_bay_packers:/american_football/football_team $1 $2 $3 $4 /en/quarterback:/american_football/football_position)))))");
else if (line.equals("(count $0 (exists $1 (exists $2 (exists $3 (exists $4 (/event/speech_or_presentation@event@speech_topic@speaker_s@type_or_format_of_presentation@presented_work@date:t $1 /en/world_war_ii:/event/speech_topic $2 $3 $0 $4))))))"))
questionWriter.println("(count $0 (exists $1 (exists $2 (exists $3 (exists $4 (/event/speech_or_presentation@event@speech_topic@speaker_s@type_or_format_of_presentation@presented_work@date:t $1 /en/world_war_ii:/event/speech_topic $2 $3 $4 $0 $5))))))");
else if (line.equals("(count $0 (exists $1 (exists $2 (/celebrities/substance_abuse_problem@substance@start@end@celebrity:t /en/cocaine:/celebrities/abused_substance $1 $2 $0))))"))
questionWriter.println("(count $0 (exists $1 (exists $2 (/celebrities/substance_abuse_problem@substance@start@end@celebrity:t /en/cocaine:/celebrities/abused_substance $1 $2 $3 $0))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/doritos:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/doritos:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(count $0 (exists $1 (exists $2 (exists $3 (exists $4 (/event/speech_or_presentation@event@speech_topic@speaker_s@type_or_format_of_presentation@presented_work@date:t $1 $2 /en/winston_churchill:/event/public_speaker $3 $0 $4))))))"))
questionWriter.println("(count $0 (exists $1 (exists $2 (exists $3 (exists $4 (/event/speech_or_presentation@event@speech_topic@speaker_s@type_or_format_of_presentation@presented_work@date:t $1 $2 /en/winston_churchill:/event/public_speaker $3 $4 $0 $5))))))");
else if (line.equals("(lambda $0 /common/topic (/transportation/bridge@bridge_type:t /en/suspension_bridge:/transportation/bridge $0))"))
questionWriter.println("(lambda $0 /common/topic (/transportation/bridge@bridge_type:t /en/manhattan_bridge:/transportation/bridge $0))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (/martial_arts/martial_arts_certification@person@qualification@certifying_body@date@art:t /en/christopher_adams:/martial_arts/martial_artist /en/black_belt:/martial_arts/martial_arts_qualification $1 $2 $0))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (/martial_arts/martial_arts_certification@person@qualification@certifying_body@date@art:t /en/christopher_adams:/martial_arts/martial_artist $1 /en/black_belt:/martial_arts/martial_arts_qualification $2 $3 $4 $0))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/capri_sun:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/capri_sun:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (exists $4 (/organization/leadership@person@title@as_of_date@organization@role@from@to:t $0 /en/chief_executive_officer:/type/text $1 /en/save-a-lot:/organization/organization $2 $3 $4))))))"))
questionWriter.println("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (exists $4 (/organization/leadership@person@title@as_of_date@organization@role@from@to:t $0 $1 $2 /en/save-a-lot:/organization/organization $3 /en/chief_executive_officer:/type/text $4 $5))))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/barbie:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/barbie:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/capn_crunch:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/capn_crunch:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/gatorade:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/gatorade:/business/brand $1 $2 $0 $3))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/mountain_dew:/business/brand $1 $0 $2))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (/business/company_brand_relationship@brand@company@from_date@to_date:t /en/mountain_dew:/business/brand $1 $2 $0 $3))))");
// entity issues
else if (line.equals("(lambda $0 /common/topic (/music/track@producer:t /m/0l16j8:/music/track $0))"))
questionWriter.println("(lambda $0 /common/topic (/music/recording@producer:t /m/0l16j8:/music/recording $0))");
else if (line.equals("(lambda $0 /people/person (/book/written_work@author:t /m/03crp32:/book/written_work $0))"))
questionWriter.println("(lambda $0 /people/person (/book/written_work@author:t /m/067y_k7:/book/written_work $0))");
else if (line.equals("(lambda $0 /common/topic (/book/literary_genre@books_in_this_genre:t $0 /en/the_hound_of_the_baskervilles:/book/book))"))
questionWriter.println("(lambda $0 /common/topic (/media_common/literary_genre@books_in_this_genre:t $0 /en/the_hound_of_the_baskervilles:/book/book))");
else if (line.equals("(count $0 (/book/literary_genre@books_in_this_genre:t /en/computer_programming:/book/literary_genre $0))"))
questionWriter.println("(count $0 (/media_common/literary_genre@books_in_this_genre:t /en/computer_programming:/book/literary_genre $0))");
else if (line.equals("(lambda $0 /type/int (/freebase/type_profile@instance_count:t /film/film_actor:/freebase/type_profile $0))"))
questionWriter.println("(lambda $0 /type/int (/freebase/type_profile@instance_count:t /film/actor:/freebase/type_profile $0))");
else if (line.equals("(lambda $0 /people/person (exists $1 (exists $2 (/olympics/olympic_medal_honor@country@event@medal@medalist@olympics:t $1 /view/en/tennis_at_the_1896_summer_olympics_mens_singles:/olympics/olympic_event_competition /en/gold_medal:/olympics/olympic_medal $0 $2))))"))
questionWriter.println("(lambda $0 /people/person (exists $1 (exists $2 (/olympics/olympic_medal_honor@country@event@medal@medalist@olympics:t $1 /en/tennis_at_the_1896_summer_olympics_mens_singles:/olympics/olympic_event_competition /en/gold_medal:/olympics/olympic_medal $0 $2))))");
else if (line.equals("(lambda $0 /type/datetime (/amusement_parks/ride@opened:t /m/03mfjrv:/amusement_parks/ride $0))"))
questionWriter.println("(lambda $0 /type/datetime (/amusement_parks/ride@opened:t /m/0flmt0:/amusement_parks/ride $0))");
else if (line.equals("(lambda $0 /common/topic (/base/dinosaur/dinosaur@diet:t /en/ceratopsia/-/base/dinosaur:/base/dinosaur/dinosaur $0))"))
questionWriter.println("(lambda $0 /common/topic (/base/dinosaur/dinosaur@diet:t /en/ceratopsia:/base/dinosaur/dinosaur $0))");
else if (line.equals("(lambda $0 /location/location (/base/dinosaur/dinosaur_location@dinosaur_s:t $0 /en/barosaurus/-/base/dinosaur:/base/dinosaur/dinosaur))"))
questionWriter.println("(lambda $0 /location/location (/base/dinosaur/dinosaur_location@dinosaur_s:t $0 /en/barosaurus:/base/dinosaur/dinosaur))");
else if (line.equals("(lambda $0 /common/topic (/chemistry/chemical_element@symbol:t /authority/us/gov/hhs/fda/srs-unii/fxs1by2pgl:/chemistry/chemical_element $0))"))
questionWriter.println("(lambda $0 /common/topic (/chemistry/chemical_element@symbol:t /m/025sw5g:/chemistry/chemical_element $0))");
else if (line.equals("(count $0 (/amusement_parks/park@annual_visits:t /en/magic_kingdom:/amusement_parks/park $0))"))
questionWriter.println("(lambda $0 /type/int (/amusement_parks/park@annual_visits:t /en/magic_kingdom:/amusement_parks/park $0))");
else if (line.equals("(lambda $0 /common/topic (/organization/organization@slogan:t /business/cik/0001011006:/organization/organization $0))"))
questionWriter.println("(lambda $0 /common/topic (/organization/organization@slogan:t /m/019rl6:/organization/organization $0))");
else if (line.equals("(lambda $0 /location/location (/location/location@containedby:t /base/usnris/item/86000083:/location/location $0))"))
questionWriter.println("(lambda $0 /location/location (/location/location@containedby:t /m/019zhn:/location/location $0))");
else if (line.equals("(lambda $0 /common/topic (/opera/opera@language:t /base/imslp/65847:/opera/opera $0))"))
questionWriter.println("(lambda $0 /common/topic (/opera/opera@language:t /m/09hvx:/opera/opera $0))");
else if (line.equals("(lambda $0 /people/person (/film/film@costume_design_by:t /source/allocine/fr/film/132663:/film/film $0))"))
questionWriter.println("(lambda $0 /people/person (/film/film@costume_design_by:t /m/04jpg2p:/film/film $0))");
else if (line.equals("(lambda $0 /people/person (/architecture/architectural_style@architects:t /en/bauhaus:/architecture/architectural_style $0))"))
questionWriter.println("(lambda $0 /people/person (/architecture/architectural_style@architects:t /en/international_style:/architecture/architectural_style $0))");
else if (line.equals("(lambda $0 /common/topic (/astronomy/star@temperature_k:t /en/polaris:/astronomy/star $0))"))
questionWriter.println("(lambda $0 /common/topic (/astronomy/star@temperature_k:t /m/0kjyrc7:/astronomy/star $0))");
else if (line.equals("(lambda $0 /common/topic (/book/literary_series@fictional_universe:t /en/the_lord_of_the_rings:/book/literary_series $0))"))
questionWriter.println("(lambda $0 /common/topic (/fictional_universe/work_of_fiction@setting:t /en/the_lord_of_the_rings:/book/literary_series $0))");
else if (line.equals("(lambda $0 /common/topic (/chemistry/chemical_element@melting_point:t /quotationsbook/subject/gold:/chemistry/chemical_element $0))"))
questionWriter.println("(lambda $0 /common/topic (/chemistry/chemical_element@melting_point:t /m/025rs2z:/chemistry/chemical_element $0))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (exists $3 (/award/award_honor@notes_description@year@award@award_winner@honored_for@ceremony:t $1 $0 /en/guardian_first_book_award:/award/award_category $2 /en/everything_is_illuminated:/award/award_winning_work $3)))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (exists $3 (/award/award_honor@notes_description@year@award@award_winner@honored_for@ceremony:t $1 $0 /en/guardian_first_book_award:/award/award_category $2 $3 /en/everything_is_illuminated:/award/award_winning_work $4)))))");
else if (line.equals("(lambda $0 /type/datetime (exists $1 (exists $2 (exists $3 (/award/award_honor@notes_description@year@award@award_winner@honored_for@ceremony:t $1 $0 /en/hugo_award_for_best_novel:/award/award_category $2 /en/harry_potter_and_the_goblet_of_fire:/award/award_winning_work $3)))))"))
questionWriter.println("(lambda $0 /type/datetime (exists $1 (exists $2 (exists $3 (/award/award_honor@notes_description@year@award@award_winner@honored_for@ceremony:t $1 $0 /en/hugo_award_for_best_novel:/award/award_category $2 $3 /en/harry_potter_and_the_goblet_of_fire:/award/award_winning_work $3)))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (/american_football/football_roster_position@team@player@position@number:t /en/baltimore_ravens:/american_football/football_team /en/ray_lewis:/american_football/football_player $0 $1)))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (/american_football/football_historical_roster_position@team@player@position_s@number:t /en/baltimore_ravens:/american_football/football_team /en/ray_lewis:/american_football/football_player $0 $1)))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (/award/award_nomination@award@year@award_nominee@nominated_for@notes_description:t /en/peoples_choice_award_for_favorite_comedy_movie:/award/award_category $1 $2 $0 $3)))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (/award/award_nomination@award@year@award_nominee@nominated_for@notes_description:t /en/peoples_choice_award_for_favorite_comedy_movie:/award/award_category $1 $2 $3 $0 $4)))))");
else if (line.equals("(lambda $0 /type/int (exists $1 (/award/ranking@rank@year@note@list@item:t $0 /type/datetime/2010:/type/datetime $1 /en/fortune_500:/award/ranked_list /en/target_corporation:/award/ranked_item)))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (/award/ranking@rank@year@note@list@item:t $0 /type/datetime/2010:/type/datetime $1 $2 /en/fortune_500:/award/ranked_list /en/target_corporation:/award/ranked_item)))");
else if (line.equals("(lambda $0 /type/int (exists $1 (/baseball/baseball_roster_position@position@team@player@number:t $1 /en/boston_red_sox:/baseball/baseball_team /en/kevin_youkilis:/baseball/baseball_player $0)))"))
questionWriter.println("(lambda $0 /type/int (exists $1 (/sports/sports_team_roster@position@team@player@number:t $1 /en/boston_red_sox:/baseball/baseball_team /en/kevin_youkilis:/baseball/baseball_player $0)))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (/basketball/basketball_roster_position@number@player@position@team:t $1 /en/keyon_dooling:/basketball/basketball_player $0 $2))))"))
questionWriter.println("(lambda $0 /common/topic (/basketball/basketball_player@position_s:t /en/keyon_dooling:/basketball/basketball_player $0))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (/business/sponsorship@sponsored_by@from@to@sponsored_recipient:t $0 $1 $2 /en/gatorade:/business/sponsored_recipient))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (/business/sponsorship@sponsored_by@from@to@sponsored_recipient:t /en/gatorade:/business/sponsored_recipient $1 $2 $3 $0))))");
else if (line.equals("(lambda $0 /common/topic (/freebase/domain_profile@category:t /film:/freebase/domain_profile $0))"))
questionWriter.println("(lambda $0 /common/topic (/freebase/domain_profile@category:t /m/010s:/freebase/domain_profile $0))");
else if (line.equals("(count $0 (exists $1 (exists $2 (/soccer/football_league_participation@team@league@from@to:t $0 /en/uefa:/soccer/football_league $1 $2))))"))
questionWriter.println("(count $0 (exists $1 (exists $2 (/sports/sports_league_participation@team@league@from@to:t $0 /en/uefa:/soccer/football_league $1 $2))))");
else if (line.equals("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (/tv/tv_regular_personal_appearance@to@from@appearance_type@person@program@seasons:t $1 $2 /en/newscaster:/tv/non_character_role $0 /en/abc_news:/tv/tv_program $3)))))"))
questionWriter.println("(lambda $0 /common/topic (exists $1 (exists $2 (exists $3 (/business/employment_tenure@person@company@title:t $0 /en/abc_news:/tv/tv_program $1 /en/news_presenter:/tv/non_character_role $2)))))");
else if (line.equals("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (exists $4 (/organization/leadership@person@title@as_of_date@organization@role@from@to:t $0 /en/chief_executive_officer:/type/text $1 /en/apple_inc:/organization/organization $2 $3 $4))))))"))
questionWriter.println("(lambda $0 /people/person (exists $1 (exists $2 (exists $3 (exists $4 (/organization/leadership@person@title@as_of_date@organization@role@from@to:t $0 $1 $2 /en/apple_inc:/organization/organization $3 /en/chief_executive_officer:/type/text $4 $5))))))");
else if (line.contains("/en/the_nutty_professor")) {
String replaceLine = line.replace("/en/the_nutty_professor", "/en/the_nutty_professor_1996");
questionWriter.println(replaceLine);
} else if (line.contains("/base/boxing")) {
String replaceLine = line.replace("/base/boxing", "/boxing");
questionWriter.println(replaceLine);
} else questionWriter.println(line);
}
questionWriter.close();
PrintWriter npWriter = IOUtils.getPrintWriter(outNpFile);
for (String line : IOUtils.readLines(inNpFile)) {
if (line.equals("firefly :- NP : /base/ranker/rankerurlname/firefly$002F143400:/tv/tv_program"))
npWriter.println("firefly :- NP : /m/014v3t:/tv/tv_program");
else if (line.equals("manhattan bridge :- NP : /en/suspension_bridge:/transportation/bridge"))
npWriter.println("manhattan bridge :- NP : /en/manhattan_bridge:/transportation/bridge");
else if (line.equals("the beastie boys :- NP : /m/0116j8:/music/track"))
npWriter.println("the beastie boys :- NP : /m/0116j8:/music/recording");
else if (line.equals("sabotage :- NP : /m/0l16j8:/music/track"))
npWriter.println("sabotage :- NP : /m/0l16j8:/music/recording");
else if (line.equals("travels with my cello :- NP : /m/03crp32:/book/written_work"))
npWriter.println("travels with my cello :- NP : /m/067y_k7:/book/written_work");
else if (line.equals("film actor :- NP : /film/film_actor:/freebase/type_profile"))
npWriter.println("film actor :- NP : /film/actor:/freebase/type_profile");
else if (line.equals("invertigo :- NP : /m/03mfjrv:/amusement_parks/ride"))
npWriter.println("invertigo :- NP : /m/0flmt0:/amusement_parks/ride");
else if (line.equals("ceratopsia :- NP : /en/ceratopsia/-/base/dinosaur:/base/dinosaur/dinosaur"))
npWriter.println("ceratopsia :- NP : /en/ceratopsia:/base/dinosaur/dinosaur");
else if (line.equals("barosaurus :- NP : /en/barosaurus/-/base/dinosaur:/base/dinosaur/dinosaur"))
npWriter.println("barosaurus :- NP : /en/barosaurus:/base/dinosaur/dinosaur");
else if (line.equals("mercury :- NP : /authority/us/gov/hhs/fda/srs-unii/FXS1BY2PGL:/chemistry/chemical_element"))
npWriter.println("mercury :- NP : /m/025sw5g:/chemistry/chemical_element");
else if (line.equals("knickerbockers :- NP : /fashion/garment:/fashion/garment"))
npWriter.println("knickerbockers :- NP : /en/knickerbockers:/fashion/garment");
else if (line.equals("yahoo! :- NP : /business/cik/0001011006:/organization/organization"))
npWriter.println("yahoo! :- NP : /m/019rl6:/organization/organization");
else if (line.equals("uss alabama :- NP : /base/usnris/item/86000083:/location/location"))
npWriter.println("uss alabama :- NP : /m/019zhn:/location/location");
else if (line.equals("lohengrin :- NP : /base/imslp/65847:/opera/opera"))
npWriter.println("lohengrin :- NP : /m/09hvx:/opera/opera");
else if (line.equals("alice in wonderland :- NP : /source/allocine/fr/film/132663:/film/film"))
npWriter.println("alice in wonderland :- NP : /m/04jpg2p:/film/film");
else if (line.equals("bauhaus :- NP : /en/bauhaus:/architecture/architectural_style"))
npWriter.println("bauhaus :- NP : /en/international_style:/architecture/architectural_style");
else if (line.equals("polaris :- NP : /en/polaris:/astronomy/star"))
npWriter.println("polaris :- NP : /m/0kjyrc7:/astronomy/star");
else if (line.equals("mitchell public library :- NP : /en/mitchell_public_library:/library/public_library"))
npWriter.println("mitchell public library :- NP : /m/0j9by57:/library/public_library");
else if (line.equals("gold :- NP : /quotationsbook/subject/gold:/chemistry/chemical_element"))
npWriter.println("gold :- NP : /m/025rs2z:/chemistry/chemical_element");
else if (line.equals("nutty professor :- NP : /en/the_nutty_professor:/film/film"))
npWriter.println("nutty professor :- NP : /en/the_nutty_professor_1996:/film/film");
else if (line.equals("film domain :- NP : /film:/freebase/domain_profile"))
npWriter.println("film domain :- NP : /m/010s:/freebase/domain_profile");
else if (line.equals("newscaster :- NP : /en/newscaster:/tv/non_character_role"))
npWriter.println("newscaster :- NP : /en/news_presenter:/tv/non_character_role");
else if (line.matches("ali.*frazier ii :- NP : /en/ali-frazier_ii:/base/boxing/boxing_match")) {
} else
npWriter.println(line);
}
npWriter.println("the battle of the champions :- NP : /m/0kvlz:/boxing/boxing_match");
npWriter.println("wba world champion :- NP : /m/0chgh2j:/boxing/boxing_title");
npWriter.println("muhammad ali vs. joe frazier ii :- NP : /en/ali-frazier_ii:/boxing/boxing_match");
npWriter.close();
}
// TODO - handle all entities that do not start with fb:m. or fb:en.
private void convertExampleFile(String inFile, String outPrefix) throws IOException {
PrintWriter formulaWriter = IOUtils.getPrintWriter(outPrefix + ".formulas");
BufferedReader reader = IOUtils.getBufferedFileReader(inFile);
List<String> examples = new ArrayList<String>();
String line = reader.readLine();
while (line != null) {
Example example = new Example.Builder()
.setUtterance(line)
.setTargetFormula(processFree917LogicalForm(reader.readLine()))
.createExample();
line = reader.readLine();
line = reader.readLine();
examples.add(example.toJson());
formulaWriter.println(example.targetFormula);
}
LogInfo.log("Arg count distribution: " + argnumCounter);
reader.close();
formulaWriter.close();
int split = (int) (0.7 * examples.size());
int[] perm = SampleUtils.samplePermutation(new Random(1), examples.size());
List<String> train = new ArrayList<String>();
List<String> test = new ArrayList<String>();
for (int i = 0; i < split; i++)
train.add(examples.get(perm[i]));
for (int i = split; i < examples.size(); i++)
test.add(examples.get(perm[i]));
printToFile(outPrefix + ".train.examples", train);
printToFile(outPrefix + ".test.examples", test);
printToFile(outPrefix + ".examples", examples);
}
private void printToFile(String fileName, List<String> examples) throws IOException {
PrintWriter exampleWriter = IOUtils.getPrintWriter(fileName);
for (String example : examples) {
exampleWriter.println(example);
}
exampleWriter.close();
}
private Formula processFree917LogicalForm(String free917LogicalForm) {
LispTree tree = LispTree.proto.parseFromString(free917LogicalForm);
if (tree.child(0).value.equals("lambda")) {
// error check
if (!tree.child(1).value.equals("$0") || tree.children.size() != 4)
throw new RuntimeException("Illegal lambda expression: " + free917LogicalForm);
return handleLambda(tree);
} else if (tree.child(0).value.equals("count")) {
if (!tree.child(1).value.equals("$0") || tree.children.size() != 3)
throw new RuntimeException("Illegal lambda expression: " + free917LogicalForm);
return handleCount(tree);
} else if (tree.child(0).value.startsWith("/")) {
return handleAsk(tree);
} else
throw new RuntimeException("Unknown free917 logical form: " + free917LogicalForm);
}
private Formula handleLambda(LispTree tree) {
return handleBody(tree.child(3));
}
private Formula handleCount(LispTree tree) {
Formula formula = handleBody(tree.child(2));
if (formula == null)
return null;
return new AggregateFormula(AggregateFormula.Mode.count, formula);
}
private Formula handleBody(LispTree tree) {
Map<String, String> argToPredMap = new HashMap<String, String>();
handleBodyRecurse(tree, argToPredMap);
return generateFormula(argToPredMap);
}
private Formula generateFormula(Map<String, String> argToPredMap) {
if (argToPredMap.size() == 1) {
String arg = argToPredMap.keySet().iterator().next();
String pred = argToPredMap.get(arg);
BinaryFormulaInfo info = formulaInfo.getBinaryInfo(Formulas.fromLispTree(LispTree.proto.parseFromString(pred)));
if (info != null) {
String type = formulaInfo.getBinaryInfo(Formulas.fromLispTree(LispTree.proto.parseFromString(pred))).expectedType1;
if (cvts.contains(type)) {
return fixCvtFormulas(pred, arg);
}
}
return new JoinFormula(pred, getArgFormula(arg));
} else {
if (argToPredMap.get("target") == null)
throw new RuntimeException("target is null: " + argToPredMap);
Formula argsFormula = conjunctArgs(argToPredMap);
Formula targetFormula = Formulas.reverseFormula(
new ValueFormula<NameValue>(new NameValue(argToPredMap.get("target"))));
Formula res = new JoinFormula(targetFormula, argsFormula);
return res;
}
}
private Formula fixCvtFormulas(String pred, String arg) {
Formula join = new JoinFormula(pred, getArgFormula(arg));
if (pred.equals("!fb:automotive.trim_level.msrp") || pred.equals("!fb:event.disaster.damage") ||
pred.equals("!fb:comic_books.comic_book_issue.cover_price")) {
return new JoinFormula("!fb:measurement_unit.money_value.amount", join);
} else if (pred.equals("!fb:celebrities.celebrity.net_worth") || pred.equals("!fb:projects.project.actual_cost")
|| pred.equals("!fb:digicams.digital_camera.street_price") || pred.equals("!fb:amusement_parks.ride.cost")) {
return new JoinFormula("!fb:measurement_unit.dated_money_value.amount", join);
} else if (pred.equals("!fb:computer.software.compatible_oses")) {
return new JoinFormula("!fb:computer.software_compatibility.operating_system", join);
} else if (pred.equals("!fb:finance.stock_exchange.companies_traded")) {
return new JoinFormula("!fb:business.stock_ticker_symbol.ticker_symbol", join);
} else if (pred.equals("!fb:medicine.hospital.beds") || pred.equals("!fb:metropolitan_transit.transit_system.daily_riders")
|| pred.equals("!fb:library.public_library_system.collection_size") || pred.equals("!fb:library.public_library_system.annual_visits")
|| pred.equals("!fb:protected_sites.protected_site.annual_visitors") || pred.equals("!fb:amusement_parks.park.annual_visits")
|| pred.equals("!fb:education.educational_institution.total_enrollment")
|| pred.equals("!fb:religion.religion.number_of_adherents")) {
return new JoinFormula("!fb:measurement_unit.dated_integer.number", join);
} else if (pred.equals("!fb:business.employer.employees")) {
return new JoinFormula("!fb:business.employment_tenure.person", join);
} else if (pred.equals("!fb:tv.tv_series_episode.producers")) {
return new JoinFormula("!fb:tv.tv_producer_episode_credit.producer", join);
} else if (pred.equals("!fb:book.periodical.frequency_or_issues_per_year")) {
return new JoinFormula("!fb:book.periodical_frequency.issues_per_year", join);
} else if (pred.equals("!fb:book.periodical.first_issue_date")) {
return new JoinFormula("!fb:book.periodical_publication_date.date", join);
} else if (pred.equals("!fb:games.game.number_of_players") || pred.equals("!fb:aviation.aircraft_model.passengers")) {
return new JoinFormula("!fb:measurement_unit.integer_range.high_value", join);
} else if (pred.equals("!fb:military.armed_force.personnel")) {
return new JoinFormula("!fb:military.military_service.military_person", join);
} else if (pred.equals("!fb:business.consumer_company.products")) {
return new JoinFormula("!fb:business.company_product_relationship.consumer_product", join);
} else if (pred.equals("!fb:location.location.geolocation")) {
return new JoinFormula("!fb:location.geocode.longitude", join);
}
return new JoinFormula(pred, getArgFormula(arg));
}
private Formula conjunctArgs(Map<String, String> argToPredMap) {
List<JoinFormula> pivots = new ArrayList<JoinFormula>();
for (String arg : argToPredMap.keySet()) {
if (!arg.equals("target"))
pivots.add(constructJoin(arg, argToPredMap.get(arg)));
}
Formula res = pivots.get(0);
if (pivots.size() == 1) return res;
for (int i = 1; i < pivots.size(); ++i)
res = new MergeFormula(Mode.and, res, pivots.get(i));
return res;
}
private Formula getArgFormula(String arg) {
if (arg.startsWith("fb:"))
return new ValueFormula<NameValue>(new NameValue(arg));
if (arg.startsWith("DATE::")) {
String[] tokens = arg.split("::");
return new ValueFormula<DateValue>(DateValue.parseDateValue(tokens[1]));
}
// TODO make sure ints and booleans work
if (arg.startsWith("INT::")) {
String[] tokens = arg.split("::");
return new ValueFormula<NumberValue>(new NumberValue(Double.parseDouble(tokens[1]), NumberValue.unitless));
}
if (arg.startsWith("BOOL::")) {
String[] tokens = arg.split("::");
return new ValueFormula<NameValue>(new NameValue(tokens[1]));
}
if (arg.startsWith("TEXT::")) {
String[] tokens = arg.split("::");
return new ValueFormula<StringValue>(new StringValue(tokens[1]));
}
throw new RuntimeException("Unknown arg: " + arg);
}
private JoinFormula constructJoin(String arg, String pred) {
VariableFormula var = new VariableFormula("x");
JoinFormula join = new JoinFormula(pred, var);
LambdaFormula lambda = new LambdaFormula("x", join);
return new JoinFormula(lambda, getArgFormula(arg));
}
private void handleBodyRecurse(LispTree tree, Map<String, String> argToPredMap) {
if (tree.child(0).value.equals("exists")) {
if (tree.children.size() != 3)
throw new RuntimeException("bad exists clause: " + tree);
handleBodyRecurse(tree.child(2), argToPredMap);
} else {
if (!tree.child(0).value.startsWith("/"))
throw new RuntimeException("bad exists clause: " + tree);
// parse the relation
String predicate = tree.child(0).value;
String[] predTokens = predicate.substring(0, predicate.lastIndexOf(':')).split("@");
if (predTokens.length <= 1)
throw new RuntimeException("Bad body: " + tree);
String fbType = constructFbType(predTokens[0]);
List<String> fbRelations = constructFbRelations(predTokens, fbType);
// parse the arguments
if (predTokens.length == 2) {
if (tree.child(1).value.equals("$0"))
argToPredMap.put(parseEntity(tree.child(2).value), fbRelations.get(0));
else if (tree.child(2).value.equals("$0"))
argToPredMap.put(parseEntity(tree.child(1).value), "!" + fbRelations.get(0));
else throw new RuntimeException("bad non-cvt tree: " + tree);
} else {
List<String> fbArguments = constructFbArguments(tree);
for (int i = 0; i < fbArguments.size(); ++i) {
String fbRelation = fbRelations.get(i);
if (fbArguments.get(i).equals("$0"))
argToPredMap.put("target", fbRelation);
else if (!fbArguments.get(i).startsWith("$")) {
argToPredMap.put(fbArguments.get(i), fbRelation);
}
}
}
argnumCounter.incrementCount(argToPredMap.size());
}
}
private List<String> constructFbArguments(LispTree tree) {
boolean lastName = false;
List<String> res = new ArrayList<String>();
for (int j = 1; j < tree.children.size(); ++j) {
if (tree.child(j).value.equals("$0")) {
res.add("$0");
lastName = false;
} else if (tree.child(j).value.startsWith("/")) {
String entity = parseEntity(tree.child(j).value);
res.add(entity);
lastName = true;
} else {
if (!lastName)
res.add(tree.child(j).value);
lastName = false;
}
}
return res;
}
private List<String> constructFbRelations(String[] predTokens, String fbType) {
List<String> res = new ArrayList<String>();
if (predTokens[0].contains("&")) {
String relation = "!" + FormatConverter.fromSlashToDot(predTokens[0].substring(0, predTokens[0].indexOf('&')), true);
res.add(relation);
}
for (int j = 1; j < predTokens.length; ++j)
res.add(fbType + "." + predTokens[j]);
return res;
}
private String constructFbType(String predHead) {
if (predHead.contains("&"))
return FormatConverter.fromSlashToDot(predHead.substring(predHead.indexOf('&') + 1), true);
return FormatConverter.fromSlashToDot(predHead, true);
}
private String parseEntity(String value) {
if (value.startsWith("/type/datetime/")) {
String[] tokens = value.split(":");
String date = tokens[0].substring(tokens[0].lastIndexOf('/') + 1);
return "DATE::" + date;
} else if (value.startsWith("/type/boolean/")) {
String[] tokens = value.split(":");
String b = tokens[0].substring(tokens[0].lastIndexOf('/') + 1);
return "BOOL::" + b;
} else if (value.startsWith("/type/int/")) {
String[] tokens = value.split(":");
String i = tokens[0].substring(tokens[0].lastIndexOf('/') + 1);
return "INT::" + i;
} else if (value.startsWith("/type/text/")) {
String[] tokens = value.split(":");
String i = tokens[0].substring(tokens[0].lastIndexOf('/') + 1);
return "TEXT::" + i;
}
return FormatConverter.fromSlashToDot(value.substring(0, value.indexOf(':')), true);
}
/** There is one example and this method is tailored for that */
private Formula handleAsk(LispTree tree) {
String pred = tree.child(0).value;
ValueFormula<NameValue> arg1 = Formulas.newNameFormula(parseEntity(tree.child(1).value));
ValueFormula<NameValue> arg2 = Formulas.newNameFormula(parseEntity(tree.child(2).value));
pred = pred.replace('@', '/');
pred = pred.substring(0, pred.lastIndexOf(':'));
pred = FormatConverter.fromSlashToDot(pred, true);
ValueFormula<NameValue> predFormula = Formulas.newNameFormula(pred);
JoinFormula pf = new JoinFormula(predFormula, arg2);
MergeFormula mf = new MergeFormula(Mode.and, arg1, pf);
return mf;
}
public void genreateEntityInfoFile(String free917EntityFile, String entityInfoFile, String outFile, String missingEntitiesFile) throws IOException {
Map<String, String> midToIdMap = FileUtils.loadStringToStringMap(midToIdFile);
Map<String, Set<String>> idToNameMap = new HashMap<String, Set<String>>();
for (String line : IOUtils.readLines(free917EntityFile)) {
String[] tokens = line.split(":-");
String name = tokens[0].trim().replace('-', ' ');
name = name.replace("#", "# ");
name = name.replace("!", " !");
name = name.replace("'", " '");
name = name.replace(",", " ,");
name = name.replace(":", " :");
String entry = tokens[1].trim();
String[] entryTokens = entry.split(":");
String id = entryTokens[1].trim();
id = FormatConverter.fromSlashToDot(id, true);
if (midToIdMap.containsKey(id))
id = midToIdMap.get(id);
MapUtils.add(idToNameMap, id, name);
}
LogInfo.log("Number of entries: " + idToNameMap.size());
PrintWriter writer = IOUtils.getPrintWriter(outFile);
int i = 0;
for (String line : IOUtils.readLines(entityInfoFile)) {
String[] tokens = line.split("\t");
String id = tokens[1];
if (idToNameMap.containsKey(id)) {
if (idToNameMap.get(id).size() > 1)
System.out.println("Multiple names: " + idToNameMap.get(id));
for (String name : idToNameMap.get(id)) {
if (name.equals("beer")) {
tokens[3] = "beer";
writer.println(StringUtils.join(tokens, "\t"));
tokens[3] = "beers";
writer.println(StringUtils.join(tokens, "\t"));
} else if (name.equals("film actor")) {
tokens[3] = "film actor";
writer.println(StringUtils.join(tokens, "\t"));
tokens[3] = "film actors";
writer.println(StringUtils.join(tokens, "\t"));
} else {
tokens[3] = name;
writer.println(StringUtils.join(tokens, "\t"));
}
}
idToNameMap.remove(id);
}
if (i % 1000000 == 0)
System.out.println("Lines: " + i++);
i++;
}
writer.close();
PrintWriter missingWriter = IOUtils.getPrintWriter(missingEntitiesFile);
for (String id : idToNameMap.keySet()) {
if (id.startsWith("fb:type") || id.startsWith("fb:un."))
continue;
missingWriter.println(id + "\t" + idToNameMap.get(id));
}
missingWriter.close();
}
}