packages feed

gf-3.4: examples/query/small/patentsQuery/QueryPatsEng.gf

--# -path=.:..:alltenses

concrete QueryPatsEng of QueryPats = QueryEng ** open
    LexQueryPatsEng,
    ParadigmsEng,
    IrregEng,
    SyntaxEng,
    ExtraEng,
    (L=LangEng),
    (M=MakeStructuralEng),
    Prelude
in {


--------------------------------------------------------
-- additions to the original query grammar 

lin

 SThe k = SyntaxEng.mkNP the_Det k ; 

 SMassSg k = SyntaxEng.mkNP k ;  

 QWho a = mkUtt (mkQCl whoSg_IP a) ; 
 
-- QWhen : Set -> Activity -> Query ;  

 QMass s = mkUtt s ; 

 QExist s =  mkUtt (L.ExistIP (L.IdetCN (L.IdetQuant what_IQuant L.NumPl) s))
              | mkUtt (mkNP all_NP (SyntaxEng.mkAdv about_Prep (mkNP s))) ;


---------------------------------------------------------
-- from the patent query grammar 

lincat 
  Drug = NP ;
  Patent = NP ; 
  ChemicalSubstance = NP ;
  DrugUsageForm = NP ;
  PatentNumber = NP ;
  Applicant = NP ;
  ApplicationNumber = NP ;
  PatsDate = Adv ;  
  SimpDate = Adv ; 


lin
PQInfo drug = QInfo (DrugToSet drug) ;  
     
PQActive drug = 
      let ai : Kind = KRelSet active_ingredient_CN (DrugToSet drug) 
   in 
    basicPlur ai  ;
 

PQDosage drug = 
       let df : Kind = KRelSet dosage_form_CN (DrugToSet drug)          
   in 
    basicBoth df | QExist df ;
   

PQRoute drug = 
      let df : Kind = KRelSet route_of_administration_CN (DrugToSet drug)  
   in 
    basicBoth df | QExist df ;


PQPatentNo =  
      let bu : Query = basicPlur patent_number_CN 
        in 
  bu | QExist patent_number_CN ;
    

PQPatentDrug drug = 
        let df : Kind = KRelSet patent_number_Rel (DrugToSet drug)  
  in 
    basicSing df ;



PQPatentPat  patent = 
       let ai : Kind = KRelSet patent_number_Rel (PatentToSet patent) 
   in 
    basicSing ai ;


PQExpPat patent = 
       let 
          ai : Kind = KRelSet expiration_date_CN (PatentToSet patent) ;
          bu : Query = basicSing ai 
   in 
    bu ; 
  -- KAct when_IAdv (mkCl patent (mkVP expire_V))) ;


PQExpDrug drug = 
      let 
          ai : Kind = KRelSet expiration_date_CN (SThe (KRelSet patent_N (DrugToSet drug))) 
   in 
  basicSing ai ;
--   | mkUtt (mkQCl when_IAdv (mkCl (mkNP the_Art ai) (mkVP expire_V)));


PQUseCode patent = 
       let df : Kind = KRelSet use_code_CN (PatentToSet patent) 
  in 
   basicBoth df  ;


PQAppNumber patent = 
     let df : Kind = KRelSet application_number_CN (PatentToSet patent) 
  in 
  basicSing df  ;


PQApplicant patent = 
    let df : Kind = KRelSet applicant_CN (PatentToSet patent) ;
         bu : Query = basicSing df 
   in 
   bu ;
--   | mkUtt (mkQS (mkQCl whoSg_IP (mkVP (mkVP apply_V) (SyntaxEng.mkAdv for_Prep patent)))) 
--   | mkUtt (mkQS pastTense (mkQCl whoSg_IP (mkVP (mkVP apply_V) (SyntaxEng.mkAdv for_Prep patent))));


PQAppDayDrug drug =
    let df : Kind = KRelSet approval_date_CN (SThe (KRelSet patent_N (DrugToSet drug)))
    in 
     basicSing df  ; 

 
PQAppDayPat patent =
    let df : Kind = KRelSet approval_date_CN (PatentToSet patent) 
    in
     basicSing df  ;
 

PQAppDayPatApp patent applicant =
       let df : Kind = KRelSet approval_date_CN (SThe (KRelSet patent_with_N (SThe (KRelSet applicant_CN (AppToSet applicant))))) 
        in 
        basicSing df  ;


PQAppDayNo appno = 
     let df : Kind = KRelSet approval_date_CN (SThe (KRelSet  patent_with_N (SThe (KRelSet application_number_CN (AppNumToSet appno))))) 
   in 
     basicSing df ;

 
PQChemComp drug = 
     let 
         df : Kind = KRelSet chemical_substance_CN (DrugToSet drug) ;
         cc : Kind = KRelSet chemical_composition_CN (DrugToSet drug)         
   in 
    basicPlur df | basicSing cc ; 


PQCompounds  =
       let cc : Kind = KAct compound_CN (KRel drug_N)          
        in 
          basicPlur cc  ;


PQPrep = 
     basicPlur (KRel drug_preparation_CN)
   | QExist (KRel drug_preparation_CN) ;


PQDrugPrep drug = 
        let df : Kind = KRelSet drug_preparation_CN (DrugToSet drug) 
  in 
      basicSing df ;

-----

PQName drug = 
    let 
         df : CN = KRelSet name_N (DrugToSet drug) 
   in 
     basicSing df ;


PQNameApp applicant = 
        let   pt2 : Set = SIndef (KRelSet  patent_with_N (SThe (KRelSet applicant_CN applicant))) ;
              df : Kind = KRelSet drug_N pt2 
   in 
     basicSing df ; 

----
 
PQMethods patent = 
        let  pt1 : Kind = KProp (use_prop_V2 (PatentToSet patent)) (KRel method_N) ;
             pt2 : Kind = KRelSet method_N (PatentToSet patent) ;
             pt : Kind = pt1 | pt2               
   in 
    basicPlur pt ; 


PQDateMeth date  =  
       let pdate : Set = SAll (KAct (expire_V date) (KRel patent_N)) ;
            pt1 : Kind = KAct  (use_V2 pdate) (KRel method_N) ;
            pt2 : Kind = KProp (use_prop_V2 pdate) (KRel method_N) ;
            pt3 : Kind = KRelSet method_N pdate ;
             pt : Kind = pt1 | pt2 | pt3              
   in 
    basicPlur pt ;

 
PQMethNo appno = 
        let pdate : Set = SThe (KRelSet patent_with_N (SThe (KRelSet application_number_no_CN appno))) ;
           pt1 : Kind = KProp (use_prop_V2 (SThe (KRel patent_N))) (KRel method_N) ;
           pt2 : Kind = KRelSet method_N (SThe (KRel patent_N)) ;
           pt : Kind = pt1 | pt2               
   in 
     basicPlur pt ;

----

PQUse patent =   
   let df : Kind = KRelSet use_N (PatentToSet patent) 
  in 
    basicSing df ;   


PQUseDate date = 
       let pdate : Set =  SThe (KAct (approve_V2 date) (KRel patent_N))  ;
           pt : Kind = KRelSet use_N pdate              
   in 
     basicSing pt ;

PQDateUse date =
      let  patent : Kind = KRel patent_N ;
           pdate : Set = SAll (KProp (approve_prop_V2 date) patent) ;
           pt : Kind = KRelSet use_N pdate 
              
   in 
     basicPlur pt ;


PQUseDrug drug = 
    let df : Kind = KRelSet use_N (DrugToSet drug) 
   in 
      basicSing df  ;


PQUseChem chem = 
   let  drug : Kind = KAct (contain_V2 chem) (KRel drug_N) ;
        drugs : Set = SAll drug ;
        df : Kind = KRelSet use_N drugs         
   in 
     basicSing df  ;    


PQUseForm uform = 
   let  drug : Kind = KRelSet usage_form_CN (UsageToSet uform) ;
        drugs : Set = SAll drug ;
        df : Kind = KRelSet use_N drugs 
   in 
      basicSing df  ;

---

PQStrength drug =
    let df : Kind = KRelSet strength_N (DrugToSet drug) 
   in 
      basicSing df  ;
      

PQStrengthChem chem = 
   let  drug : Kind = KAct (contain_V2 chem) (KRel drug_N) ;
        drugs : Set = SAll drug ;
        df : Kind = KRelSet strength_N (DrugToSet drugs) 
  in 
     basicSing df  ; 

---

PQClaims  drug = 
       let cc : Kind =  KAct (mention_V2 drug) (mkCN claim_N) 
            in 
       basicPlur cc ;



--------------------------------------------------------------------------------
 oper basicSing : CN -> Utt =
    \df -> 
       let  sg_df : NP = SThe df ;
            massdf : NP = SMassSg df 
     in 
      QSet sg_df
   | QMass massdf
   | QMass sg_df ;
   

oper basicPlur : CN -> Utt = 
    \df -> 
       let  sg_df : NP = SAll df ;
            massdf : NP = SPlural df
     in 
      QInfo sg_df
   | QMass massdf
   | QMass sg_df ;
   

oper basicBoth : CN -> Utt = 
  \df ->
     let sg_df : NP = SThe df ;
          the_df : NP = SAll df ; 
          mass_sg_df : NP = SMassSg df ;
          mass_pl_df : NP = SPlural df
   in
     QInfo the_df 
   | QInfo sg_df
   | QMass mass_sg_df
   | QMass sg_df
   | QMass mass_pl_df
   | QMass the_df ;

--------------------------------------------------------------------------
-- coercions

lin DrugToSet d = d ; 
lin PatentToSet d = d ;
lin ChemToSet d = d ;
lin UsageToSet d = d ;
lin PatNumToSet d = d ; 
lin AppToSet d = d ;
lin AppNumToSet d = d ;
--lin DateToSet : PatsDate -> Set ;



 OnDate d = mkPatsDate on_Prep ;
 BeforeDate d = mkPatsDate before_Prep ;
 AfterDate d = mkPatsDate after_Prep ;

 oper mkPatsDate : Prep -> Adv = \prep -> SyntaxEng.mkAdv prep (mkNP (mkPN "DATE")) ;




-- lexicon

oper mkDrug : Str -> NP = 
    \p -> SyntaxEng.mkNP  (mkPN p) ;

oper mkPatents : Str -> NP = 
   \p -> SyntaxEng.mkNP (mkPN p) ;

oper mkChemicalSubstance : Str -> NP = 
   \p -> SyntaxEng.mkNP (mkPN p) ;

oper mkDrugUsageForm : Str -> NP =
   \p -> SyntaxEng.mkNP (mkPN p) ;

oper  mkPatentNumber : Str -> NP = 
   \p -> SyntaxEng.mkNP (mkPN p) ;

oper  mkApplicant : Str -> NP = 
   \p -> SyntaxEng.mkNP (mkPN p) ;

oper  mkApplicationNumber : Str -> NP = 
   \p -> SyntaxEng.mkNP (mkPN p);




lin

Aspirin = mkDrug "DRUG" ;

Pats1230 = mkPatents "PATENT" ;

Hydrogen = mkChemicalSubstance "CHEMICAL_SUBSTANCE" ;

Inhalation = mkDrugUsageForm "DRUG_USAGE_FORM" ;

P123 = mkPatentNumber "PATENT_NUMBER" ;

JohnDoe = mkApplicant "APPLICANT" ;

A123 = mkApplicationNumber "APPLICATION_NUMBER" ;


}