Instruction2CycLConverter.java
Go to the documentation of this file.
00001 package instruction.converter;
00002 
00003 import instruction.opencyc.OpenCyc;
00004 import instruction.semanticObjects.Action;
00005 import instruction.semanticObjects.Instruction;
00006 import instruction.semanticObjects.ObjectX;
00007 import instruction.semanticObjects.Preposition;
00008 import instruction.semanticObjects.Quantifier;
00009 import instruction.semanticObjects.Word;
00010 import instruction.wordnet.PrepositionalMap;
00011 import java.io.IOException;
00012 import java.net.UnknownHostException;
00013 import java.util.ArrayList;
00014 import java.util.HashMap;
00015 import java.util.List;
00016 import java.util.Map;
00017 import org.opencyc.api.CycApiException;
00018 
00019 public class Instruction2CycLConverter {
00020 
00022         List<String> assertions = new ArrayList<String>();
00023         String planName = "";
00024 
00029         private HashMap<String, String> objectInstances = new HashMap<String, String>();
00030 
00045         public String makeInstanceOfObject( String concept ) throws CycApiException, UnknownHostException,
00046                         IOException {
00047 
00048                 if ( concept == null || concept.isEmpty() )
00049                         return null;
00050 
00051                 if ( objectInstances.get( concept ) != null )
00052                         return objectInstances.get( concept );
00053 
00054                 // Find a fitting instance name
00055                 int counter = 1;
00056                 String instName;
00057                 do {
00058                         instName = concept.toLowerCase() + counter++;
00059                 }
00060                 while ( OpenCyc.getInstance().constantExists( instName ) );
00061 
00062                 // create the assertion
00063                 String assertion = "(#$isa #$" + instName + " #$" + concept + ")";
00064 
00065                 // make constant
00066                 OpenCyc.getInstance().getCycAcces().makeCycConstant( instName );
00067 
00068                 // make assertion
00069                 OpenCyc.getInstance().makeAssertionInKitchenMt( assertion );
00070                 assertions.add( assertion );
00071 
00072                 objectInstances.put( concept, instName );
00073 
00074                 return instName;
00075         }
00076 
00090         public String makeInstanceOfAction( String concept, String nameProposal ) throws CycApiException,
00091                         UnknownHostException, IOException {
00092 
00093                 if ( concept == null || concept.isEmpty() )
00094                         return null;
00095 
00096                 // Find a fitting instance name
00097                 int counter = 1;
00098                 String instName;
00099                 do {
00100                         instName = ( nameProposal == null ? concept.toLowerCase() : nameProposal ) + counter++;
00101                 }
00102                 while ( OpenCyc.getInstance().constantExists( instName ) );
00103 
00104                 // create the assertion
00105                 String assertion = "(#$isa #$" + instName + " #$" + concept + ")";
00106 
00107                 // make constant
00108                 OpenCyc.getInstance().getCycAcces().makeCycConstant( instName );
00109 
00110                 // make assertion
00111                 OpenCyc.getInstance().makeAssertionInKitchenMt( assertion );
00112                 assertions.add( assertion );
00113 
00114                 return instName;
00115         }
00116 
00127         public String convertInstruction( Instruction inst ) throws CycApiException, UnknownHostException,
00128                         IOException {
00129 
00130                 try {
00131                         // ==================================================================
00132                         // Convert the Action
00133                         // ==================================================================
00134                         Word action = inst.getAction().getAction();
00135                         String actionInst = makeInstanceOfAction( action.getCycConcepts().get( 0 ), null );
00136 
00137                         // ==================================================================
00138                         // Convert all Objects
00139                         // ==================================================================
00140                         List<ObjectX> objects = inst.getObjects();
00141                         List<String> objectInstances = convertObjects( objects, actionInst );
00142 
00143                         for ( int i = 0; i < objectInstances.size(); i++ ) {
00144 
00145                                 // add the "objectActedOn" predicate to the object
00146                                 String assertion = "(#$objectActedOn #$" + actionInst + " #$" + objectInstances.get( i ) + ")";
00147                                 OpenCyc.getInstance().makeAssertionInKitchenMt( assertion );
00148                                 assertions.add( assertion );
00149                         }
00150 
00151                         // ==================================================================
00152                         // Convert all Prepositions
00153                         // ==================================================================
00154                         for ( int i = 0; i < inst.getPrepositions().size(); i++ ) {
00155                                 Preposition pp = inst.getPrepositions().get( i );
00156                                 convertPP( pp, actionInst, objectInstances );
00157                         }
00158 
00159                         // ==================================================================
00160                         // Convert time constraint
00161                         // ==================================================================
00162                         if ( inst.getTimeConstraint() != null ) {
00163                                 convertTimeConstraint( inst.getTimeConstraint(), actionInst );
00164                         }
00165 
00166                         // ==================================================================
00167                         // Make the SimpleActionPrediacte in TUMKitchenEnvironmentMt
00168                         // ==================================================================
00169                         String assertion = "(#$isa #$" + actionInst + " #$SimpleActionPredicate)";
00170                         OpenCyc.getInstance().makeAssertionInKitchenPlanningMt( assertion );
00171                         assertions.add( assertion );
00172 
00173                         return actionInst;
00174                 }
00175                 catch ( Exception e ) {
00176                         e.printStackTrace();
00177                         return null;
00178                 }
00179         }
00180 
00186         public void convertTimeConstraint( Quantifier tc, String actionInst ) {
00187 
00188                 // ==================================================================
00189                 // Make out a maximum range of quantifying figures taking the first
00190                 // and last one of the Quantifier, or an underspecified Quantity
00191                 // ==================================================================
00192                 List<String> range = new ArrayList<String>();
00193 
00194                 for ( int i = 0; i < tc.getAlternatives().size(); i++ ) {
00195                         Word w = tc.getAlternatives().get( i );
00196 
00197                         // Check for a quotient
00198                         if ( w.getLabel().split( "\\\\/" ).length > 1 ) {
00199                                 String[] tokens = w.getLabel().split( "\\\\/" );
00200                                 range.add( "(#$QuotientFn " + tokens[0] + " " + tokens[1] + ")" );
00201                                 continue;
00202                         }
00203 
00204                         // Check for underspecified amount
00205                         if ( w.getCycConcepts().size() > 0 ) {
00206                                 range.add( "#$" + w.getCycConcepts().get( 0 ) );
00207                                 continue;
00208                         }
00209 
00210                         // Check for figures
00211                         try {
00212                                 Double.valueOf( w.getLabel() );
00213                                 range.add( w.getLabel() );
00214                         }
00215                         catch ( Exception e ) {
00216                                 e.printStackTrace();
00217                         }
00218                 }
00219 
00220                 if ( range.isEmpty() )
00221                         return;
00222 
00223                 String measure;
00224 
00225                 if ( tc.getMeasure().getCycConcepts().size() > 0 )
00226                         measure = tc.getMeasure().getCycConcepts().get( 0 );
00227                 else
00228                         return;
00229 
00230                 String assertion = "(#$timeSpan #$" + actionInst + " (#$" + measure + " " + range.get( 0 )
00231                                 + ( range.size() > 1 ? ( " " + range.get( range.size() - 1 ) ) : "" ) + "))";
00232 
00233                 try {
00234                         OpenCyc.getInstance().makeAssertionInKitchenMt( assertion );
00235                         assertions.add( assertion );
00236                 }
00237                 catch ( Exception e ) {
00238                         e.printStackTrace();
00239                 }
00240         }
00241 
00253         public void convertHowTo( List<Instruction> instructionList, Instruction howto ) throws CycApiException,
00254                         UnknownHostException, IOException {
00255 
00256                 resetConverter();
00257                 
00258                 howto = new Instruction();
00259                 Word set = new Word(Word.TYPE_VERB_INFINITIVE, "make");
00260                 ArrayList<String> list = new ArrayList<String>();
00261                 list.add("MakingSomething");
00262                 set.setCycConcepts(list);
00263                 
00264                 Word table = new Word(Word.TYPE_NOUN, "pancakes");
00265                 ArrayList<String> list2 = new ArrayList<String>();
00266                 list2.add("Pancake");
00267                 table.setCycConcepts(list2);
00268                 
00269                 howto.setAction(new Action(set));
00270                 howto.addObject(new ObjectX(table));
00271 
00272                 // ==================================================================
00273                 // Convert the Action and Object defining the HowTo
00274                 // ==================================================================
00275                 String howtoInst = makeInstanceOfAction( howto.getAction().getAction().getCycConcepts().get( 0 ), howto
00276                                 .getAction().getAction().getLabel()
00277                                 + "_" + howto.getObjects().get( 0 ).getName().get( 0 ).getLabel().replaceAll( " ", "_" ) );
00278                 
00279                 String howtoObjInst = convertObjects( howto.getObjects(), howtoInst ).get( 0 );
00280 
00281                 String assertion = "(#$objectActedOn #$" + howtoInst + " #$" + howtoObjInst + ")";
00282                 OpenCyc.getInstance().makeAssertionInKitchenMt( assertion );
00283                 assertions.add( assertion );
00284 
00285                 // ==================================================================
00286                 // Convert every single Instruction
00287                 // ==================================================================
00288                 Map<String, Instruction> actionInstancesMap = new HashMap<String, Instruction>();
00289                 ArrayList<String> actionInstances = new ArrayList<String>();
00290                 for ( int i = 0; i < instructionList.size(); i++ ) {
00291                         try {
00292                                 String actIn = convertInstruction( instructionList.get( i ) );
00293                                 if ( actIn != null ) {
00294                                         actionInstancesMap.put( actIn, instructionList.get( i ) );
00295                                         actionInstances.add( actIn );
00296                                 }
00297                         }
00298                         catch ( Exception e ) {
00299                                 e.printStackTrace();
00300                         }
00301                 }
00302 
00303                 // ==================================================================
00304                 // Create an action sequence as a plan
00305                 // ==================================================================
00306                 String actionSequence = "";
00307                 boolean optionalSequence = false;
00308                 for ( int i = 0; i < actionInstances.size(); i++ ) {
00309                         if ( actionInstancesMap.get( actionInstances.get( i ) ).getAction().dontDoIt() )
00310                                 actionSequence += "(#$notDo #$" + actionInstances.get( i ) + ")";
00311                         else if ( actionInstancesMap.get( actionInstances.get( i ) ).isOptional() && ! optionalSequence ) {
00312                                 actionSequence += "(#$orDo #$" + actionInstances.get( i );
00313                                 optionalSequence = true;
00314                         }
00315                         else {
00316                                 if ( optionalSequence && ! actionInstancesMap.get( actionInstances.get( i ) ).isOptional() ) {
00317                                         actionSequence += ") ";
00318                                         optionalSequence = false;
00319                                 }
00320                                 actionSequence += "#$" + actionInstances.get( i );
00321                         }
00322 
00323                         if ( i < actionInstances.size() - 1 )
00324                                 actionSequence += " ";
00325                 }
00326 
00327                 assertion = "(#$isa #$" + howtoInst + " #$ActionPredicate" + ")";
00328                 OpenCyc.getInstance().makeAssertionInKitchenPlanningMt( assertion );
00329                 assertions.add( assertion );
00330 
00331                 assertion = "(#$arity #$" + howtoInst + " 1)";
00332                 OpenCyc.getInstance().makeAssertionInKitchenPlanningMt( assertion );
00333                 assertions.add( assertion );
00334 
00335                 assertion = "(#$arg1Isa #$" + howtoInst + " #$"
00336                                 + howto.getObjects().get( 0 ).getName().get( 0 ).getCycConcepts().get( 0 ) + ")";
00337                 OpenCyc.getInstance().makeAssertionInKitchenPlanningMt( assertion );
00338                 assertions.add( assertion );
00339 
00340                 assertion = "(#$isa #$" + howtoObjInst + " #$"
00341                                 + howto.getObjects().get( 0 ).getName().get( 0 ).getCycConcepts().get( 0 ) + ")";
00342                 OpenCyc.getInstance().makeAssertionInKitchenPlanningMt( assertion );
00343                 assertions.add( assertion );
00344 
00345                 assertion = "(#$methodForAction (#$" + howtoInst + " #$" + howtoObjInst
00346                                 + ") (#$actionSequence (#$TheList " + actionSequence + ")))";
00347                 OpenCyc.getInstance().makeAssertionInKitchenPlanningMt( assertion );
00348                 planName = "(#$" + howtoInst + " #$" + howtoObjInst + ")";
00349                 assertions.add( assertion );
00350         }
00351 
00363         public void convertPP( Preposition pp, String actionInstance, List<String> parentObjects )
00364                         throws CycApiException, UnknownHostException, IOException {
00365 
00366                 List<String> objectInstances = null;
00367 
00368                 // ==================================================================
00369                 // Instantiate all objects of this Preposition
00370                 // ==================================================================
00371                 objectInstances = convertObjects( pp.getObjects(), actionInstance );
00372 
00373                 // ==================================================================
00374                 // Connect each parent Object with each child Object for each preposition
00375                 // ==================================================================
00376                 for ( int i = 0; i < objectInstances.size(); i++ ) {
00377                         String child = objectInstances.get( i );
00378 
00379                         for ( int k = 0; k < parentObjects.size(); k++ ) {
00380                                 String parent = parentObjects.get( k );
00381 
00382                                 for ( int j = 0; j < pp.getPrepositions().size(); j++ )
00383                                         connectObjectWithPreposition( child, parent, pp.getPrepositions().get( j ), actionInstance );
00384 
00385                         }
00386 
00387                         // if there are no objects specified in the instruction, connect the
00388                         // action
00389                         // instance with the prepositional objects
00390                         if ( parentObjects.size() == 0 ) {
00391                                 for ( int j = 0; j < pp.getPrepositions().size(); j++ )
00392                                         connectObjectWithPreposition( child, actionInstance, pp.getPrepositions().get( j ), actionInstance );
00393                         }
00394                 }
00395         }
00396 
00410         public void connectObjectWithPreposition( String child, String parent, Word pp, String action ) {
00411 
00412                 if ( pp.getType() != Word.TYPE_PREPOSITION )
00413                         return;
00414 
00415                 String p = PrepositionalMap.get( pp.getLabel() );
00416 
00417                 if ( p == null )
00418                         return;
00419 
00420                 // ==================================================================
00421                 // Generate the assertion
00422                 // ==================================================================
00423                 String assertion;
00424 
00425                 if ( p.equals( PrepositionalMap.ON ) ) {
00426                         assertion = "(#$" + PrepositionalMap.ON + " #$" + parent + " #$" + child + ")";
00427                 }
00428                 else if ( p.equals( PrepositionalMap.AT ) ) {
00429                         assertion = "(#$" + PrepositionalMap.AT + " #$" + parent + " #$" + child + ")";
00430                 }
00431                 else if ( p.equals( PrepositionalMap.FROM ) ) {
00432                         assertion = "(#$" + PrepositionalMap.FROM + " #$" + parent + " #$" + child + ")";
00433                 }
00434                 else if ( p.equals( PrepositionalMap.IN ) ) {
00435                         assertion = "(#$" + PrepositionalMap.IN + " #$" + parent + " #$" + child + ")";
00436                 }
00437                 else if ( p.equals( PrepositionalMap.IN_FRONT_OF ) ) {
00438                         assertion = "(#$" + PrepositionalMap.IN_FRONT_OF + " #$" + parent + " " + child + ")";
00439                 }
00440                 else if ( p.equals( PrepositionalMap.NEXT_TO ) ) {
00441                         assertion = "(#$" + PrepositionalMap.NEXT_TO + " #$" + parent + " #$" + child + " #$SomethingExisting)";
00442                 }
00443                 else if ( p.equals( PrepositionalMap.OF ) ) {
00444                         assertion = "(#$" + PrepositionalMap.OF + " #$" + child + " #$" + parent + ")";
00445                 }
00446                 else if ( p.equals( PrepositionalMap.TO ) ) {
00447                         assertion = "(#$" + PrepositionalMap.TO + " #$" + parent + " #$" + child + ")";
00448                 }
00449                 else if ( p.equals( PrepositionalMap.FOR ) ) {
00450                         assertion = "(#$" + PrepositionalMap.FOR + " #$" + parent + " #$" + child + ")";
00451                 }
00452                 else if ( p.equals( PrepositionalMap.THROUGH ) ) {
00453                         assertion = "(#$" + PrepositionalMap.THROUGH + " #$" + parent + " #$" + child + ")";
00454                 }
00455                 else if ( p.equals( PrepositionalMap.AMONG ) ) {
00456                         assertion = "(#$" + PrepositionalMap.AMONG + " #$" + parent + " #$" + child + ")";
00457                 }
00458                 else if ( p.equals( PrepositionalMap.INSIDE ) ) {
00459                         assertion = "(#$" + PrepositionalMap.INSIDE + " #$" + parent + " #$" + child + ")";
00460                 }
00461                 else if ( p.equals( PrepositionalMap.ABOUT ) ) {
00462                         assertion = "(#$" + PrepositionalMap.ABOUT + " #$" + parent + " #$" + child + ")";
00463                 }
00464                 else if ( p.equals( PrepositionalMap.WITHOUT ) ) {
00465                         assertion = "(#$" + PrepositionalMap.WITHOUT + " #$" + parent + " #$" + child + ")";
00466                 }
00467                 else if ( p.equals( PrepositionalMap.ALONG ) ) {
00468                         assertion = "(#$" + PrepositionalMap.ALONG + " #$" + parent + " #$" + child + ")";
00469                 }
00470                 else if ( p.equals( PrepositionalMap.AROUND ) ) {
00471                         assertion = "(#$" + PrepositionalMap.AROUND + " #$" + parent + " #$" + child + ")";
00472                 }
00473                 else if ( p.equals( PrepositionalMap.BY ) ) {
00474                         assertion = "(#$" + PrepositionalMap.BY + " #$" + parent + " #$" + child + ")";
00475                 }
00476                 else if ( p.equals( PrepositionalMap.UNDER ) ) {
00477                         assertion = "(#$" + PrepositionalMap.UNDER + " #$" + parent + " #$" + child + ")";
00478                 }
00479                 else if ( p.equals( PrepositionalMap.OVER ) ) {
00480                         assertion = "(#$" + PrepositionalMap.OVER + " #$" + parent + " #$" + child + ")";
00481                 }
00482                 else if ( p.equals( PrepositionalMap.WITH ) ) {
00483                         assertion = "(#$" + PrepositionalMap.WITH + " #$" + parent + " #$" + child + ")";
00484                 }
00485                 else if ( p.equals( PrepositionalMap.INTO ) ) {
00486                         assertion = "(#$" + PrepositionalMap.INTO + " #$" + parent + " #$" + child + ")";
00487                 }
00488                 else if ( p.equals( PrepositionalMap.ACROSS ) ) {
00489                         assertion = "(#$" + PrepositionalMap.ACROSS + " #$" + parent + " #$" + child + ")";
00490                 }
00491                 else if ( p.equals( PrepositionalMap.FOR ) ) {
00492                         assertion = "(#$" + PrepositionalMap.FOR + " #$" + parent + " #$" + child + ")";
00493                 }
00494                 else if ( p.equals( PrepositionalMap.AFTER ) ) {
00495                         assertion = "(#$" + PrepositionalMap.AFTER + " #$" + parent + " #$" + child + ")";
00496                 }
00497                 else if ( p.equals( PrepositionalMap.BEFORE ) ) {
00498                         assertion = "(#$" + PrepositionalMap.BEFORE + " #$" + parent + " #$" + child + ")";
00499                 }
00500                 else if ( p.equals( PrepositionalMap.AGAINST ) ) {
00501                         assertion = "(#$" + PrepositionalMap.AGAINST + " #$" + parent + " #$" + child + ")";
00502                 }
00503                 else
00504                         return;
00505 
00506                 if ( action != null )
00507                         assertion = "(#$purposeOf-Generic #$" + action + " " + assertion + ")";
00508 
00509                 // ==================================================================
00510                 // Make the assertion
00511                 // ==================================================================
00512                 try {
00513                         OpenCyc.getInstance().makeAssertionInKitchenMt( assertion );
00514                         assertions.add( assertion );
00515                 }
00516                 catch ( Exception e ) {
00517                         e.printStackTrace();
00518                 }
00519         }
00520 
00531         public List<String> convertObjects( List<ObjectX> objects, String actionInstance ) throws CycApiException, UnknownHostException,
00532                         IOException {
00533 
00534                 List<String> objectInstances = new ArrayList<String>();
00535 
00536                 // ==================================================================
00537                 // Create instance of object
00538                 // ==================================================================
00539                 for ( int i = 0; i < objects.size(); i++ ) {
00540                         if ( objects.get( i ).getName().size() == 0 )
00541                                 continue;
00542                         String instance = makeInstanceOfObject( objects.get( i ).getName().get( 0 ).getCycConcepts().get( 0 ) );
00543                         if ( instance != null && ! instance.isEmpty() ) {
00544                                 objectInstances.add( instance );
00545 
00546                                 // ==================================================================
00547                                 // Convert Adjectives of object
00548                                 // ==================================================================
00549                                 convertAdjectives( objects.get( i ).getAdjectives(), instance, actionInstance );
00550 
00551                                 // ==================================================================
00552                                 // Convert Quantifier of object
00553                                 // ==================================================================
00554                                 convertQuantifier( objects.get( i ).getQuantifier(), instance );
00555                         }
00556                 }
00557 
00558                 // ==================================================================
00559                 // Convert all Prepositions of the objects
00560                 // ==================================================================
00561                 for ( int i = 0; i < objects.size(); i++ ) {
00562                         ObjectX o = objects.get( i );
00563 
00564                         for ( int j = 0; j < o.getPrepositions().size(); j++ )
00565                                 convertNestedPP( o.getPrepositions().get( j ), objectInstances, actionInstance );
00566                 }
00567 
00568                 return objectInstances;
00569         }
00570 
00578         public void convertAdjectives( List<Word> adjectives, String objectInstance, String actionInstance ) {
00579 
00580                 for ( int i = 0; i < adjectives.size(); i++ ) {
00581 
00582                         List<String> concepts = adjectives.get( i ).getCycConcepts();
00583                         try {
00584                                 String assertion = null;
00585 
00586                                 // ==================================================================
00587                                 // 1. Case: Only 1 Concept generalized by SomethingExisting
00588                                 // ==================================================================
00589                                 if ( concepts.size() == 1 && OpenCyc.getInstance().genlsSomethingExisting( concepts.get( 0 ) ) ) {
00590                                         assertion = "(#$isa #$" + objectInstance + " #$" + concepts.get( 0 ) + ")";
00591                                 }
00592 
00593                                 // ==================================================================
00594                                 // 2. Case: 2 Concepts, predicate and argument
00595                                 // ==================================================================
00596                                 else {
00597                                         String pred = null;
00598 
00599                                         // Search for a predicate
00600                                         for ( int j = 0; j < concepts.size(); j++ ) {
00601                                                 if ( OpenCyc.getInstance().isaInUnivVocMt( concepts.get( j ), "Predicate" )
00602                                                                 && OpenCyc.getInstance().getArity( concepts.get( j ) ) == 2 ) {
00603                                                         pred = concepts.get( j );
00604                                                 }
00605                                         }
00606 
00607                                         if ( pred != null ) {
00608 
00609                                                 // Get type of argument 2
00610                                                 String typeOfArg2 = OpenCyc.getInstance().getTypeOfArg( pred, 2 );
00611                                                 if ( typeOfArg2 != null ) {
00612 
00613                                                         // Remove all concepts that do not fit type of arg 2
00614                                                         for ( int j = 0; j < concepts.size(); j++ ) {
00615                                                                 if ( ! OpenCyc.getInstance().isaInUnivVocMt( concepts.get( j ), typeOfArg2 )
00616                                                                                 && ! OpenCyc.getInstance().genlsInUniversalVocabularyMt( concepts.get( j ), typeOfArg2 ) ) {
00617                                                                         concepts.remove( j );
00618                                                                         j--;
00619                                                                         continue;
00620                                                                 }
00621                                                         }
00622 
00623                                                         assertion = "(#$" + pred + " #$" + objectInstance + " #$" + concepts.get( 0 ) + ")";
00624                                                 }
00625                                         }
00626 
00627                                         else {
00628                                                 // ==================================================================
00629                                                 // 3. Case: Past Participle
00630                                                 // ==================================================================
00631 
00632                                                 // Search for an Event
00633                                                 String event = null;
00634                                                 for ( int j = 0; j < concepts.size(); j++ ) {
00635                                                         if ( OpenCyc.getInstance().isaInUnivVocMt( concepts.get( j ), "TemporalObjectType" )
00636                                                                         || OpenCyc.getInstance().isaInUnivVocMt( concepts.get( j ), "TemporalStuffType" )
00637                                                                         || OpenCyc.getInstance().isaInUnivVocMt( concepts.get( j ), "ProcessType" )) {
00638                                                                 event = concepts.get( j );
00639                                                         }
00640                                                 }
00641 
00642                                                 if ( event != null ) {
00643 
00644                                                         String precondAction = makeInstanceOfAction( event, null );
00645 
00646                                                         assertion = "(#$objectActedOn #$" + precondAction + " #$" + objectInstance + ")";
00647                                                         OpenCyc.getInstance().makeAssertionInKitchenMt( assertion );
00648                                                         
00649                                                         assertion = "(#$preconditionFor-Events #$" + precondAction + " #$" + actionInstance + ")";
00650                                                         OpenCyc.getInstance().makeAssertionInKitchenMt( assertion );
00651                                                 }
00652                                         }
00653                                 }
00654 
00655                                 if ( assertion != null ) {
00656                                         OpenCyc.getInstance().makeAssertionInKitchenMt( assertion );
00657                                         assertions.add( assertion );
00658                                 }
00659 
00660                         }
00661                         catch ( Exception e ) {
00662                                 e.printStackTrace();
00663                         }
00664                 }
00665         }
00666 
00674         public void convertQuantifier( Quantifier q, String objectInstance ) {
00675 
00676                 // ==================================================================
00677                 // Make out a maximum range of quantifying figures taking the first
00678                 // and last one of the Quantifier, or an underspecified Quantity
00679                 // ==================================================================
00680                 List<String> range = new ArrayList<String>();
00681 
00682                 for ( int i = 0; i < q.getAlternatives().size(); i++ ) {
00683                         Word w = q.getAlternatives().get( i );
00684 
00685                         // Check for a quotient
00686                         if ( w.getLabel().split( "\\\\/" ).length > 1 ) {
00687                                 String[] tokens = w.getLabel().split( "\\\\/" );
00688                                 range.add( "(#$QuotientFn " + tokens[0] + " " + tokens[1] + ")" );
00689                                 continue;
00690                         }
00691 
00692                         // Check for underspecified amount
00693                         if ( w.getCycConcepts().size() > 0 ) {
00694                                 range.add( "#$" + w.getCycConcepts().get( 0 ) );
00695                                 continue;
00696                         }
00697 
00698                         // Check for figures
00699                         try {
00700                                 Double.valueOf( w.getLabel() );
00701                                 range.add( w.getLabel() );
00702                         }
00703                         catch ( Exception e ) {
00704                                 e.printStackTrace();
00705                         }
00706                 }
00707 
00708                 if ( range.isEmpty() )
00709                         return;
00710 
00711                 String measure;
00712 
00713                 if ( q.getMeasure().getCycConcepts().size() > 0 )
00714                         measure = q.getMeasure().getCycConcepts().get( 0 );
00715                 else
00716                         measure = "Piece";
00717 
00718                 String assertion = "(#$amountOfObject #$" + objectInstance + " (#$" + measure + " " + range.get( 0 )
00719                                 + ( range.size() > 1 ? ( " " + range.get( range.size() - 1 ) ) : "" ) + "))";
00720 
00721                 try {
00722                         OpenCyc.getInstance().makeAssertionInKitchenMt( assertion );
00723                         assertions.add( assertion );
00724                 }
00725                 catch ( Exception e ) {
00726                         e.printStackTrace();
00727                 }
00728 
00729         }
00730 
00741         public void convertNestedPP( Preposition pp, List<String> parentObjects, String actionInstance ) throws CycApiException,
00742                         UnknownHostException, IOException {
00743 
00744                 List<String> objectInstances = null;
00745 
00746                 // ==================================================================
00747                 // Instantiate all objects of this Preposition
00748                 // ==================================================================
00749                 objectInstances = convertObjects( pp.getObjects(), actionInstance );
00750 
00751                 // ==================================================================
00752                 // Connect each parent Object with each child Object for each preposition
00753                 // ==================================================================
00754                 for ( int i = 0; i < objectInstances.size(); i++ ) {
00755                         String child = objectInstances.get( i );
00756 
00757                         for ( int k = 0; k < parentObjects.size(); k++ ) {
00758                                 String parent = parentObjects.get( k );
00759 
00760                                 for ( int j = 0; j < pp.getPrepositions().size(); j++ )
00761                                         connectObjectWithPreposition( child, parent, pp.getPrepositions().get( j ), null );
00762 
00763                         }
00764                 }
00765         }
00766 
00770         public void resetConverter() {
00771 
00772                 objectInstances.clear();
00773         }
00774 
00780         public List<String> getAssertions() {
00781 
00782                 return assertions;
00783         }
00784 
00785         public String getPlanName() {
00786 
00787                 return planName;
00788         }
00789 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Friends


comp_ehow
Author(s): Moritz Tenorth, Daniel Nyga
autogenerated on Tue Apr 16 2013 00:18:02