summaryrefslogtreecommitdiff
path: root/examples/query/small/patentsQuery/QueryPatsFre.gf
blob: f4808fbf10bc58a0ed9e9c381a226f5fca2f7904 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
--# -path=.:..:alltenses

concrete QueryPatsFre of QueryPats = QueryFre ** open
    LexQueryPatsFre,
    ParadigmsFre,
    IrregFre,
    SyntaxFre,
    ExtraFre,
    (L=LangFre),
    Prelude
in {


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

lin

 SThe k = SyntaxFre.mkNP the_Det k ; 

 SMassSg k = SyntaxFre.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 (SyntaxFre.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) (SyntaxFre.mkAdv for_Prep patent)))) 
--   | mkUtt (mkQS pastTense (mkQCl whoSg_IP (mkVP (mkVP apply_V) (SyntaxFre.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 -> SyntaxFre.mkAdv prep (mkNP (mkPN "DATE")) ;




-- lexicon

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

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

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

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

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

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

oper  mkApplicationNumber : Str -> NP = 
   \p -> 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" ;


}