| 1 | LEXAM ; ISL Look-up Misc (Setup/Parse)           ; 09-23-96 | 
|---|
| 2 | ;;2.0;LEXICON UTILITY;;Sep 23, 1996;Build 1 | 
|---|
| 3 | ; | 
|---|
| 4 | SETUP(LEXSUB) ; Set up search variables | 
|---|
| 5 | I '$L($G(LEXSUB)) D  Q | 
|---|
| 6 | . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1 | 
|---|
| 7 | . S LEX("ERR",LEX("ERR",0))="Default Vocabulary missing or invalid" | 
|---|
| 8 | S ^TMP("LEXSCH",$J,"VOC",0)=LEXSUB | 
|---|
| 9 | I '$D(^LEXT(757.2,"AA",^TMP("LEXSCH",$J,"VOC",0))) D  Q | 
|---|
| 10 | . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1 | 
|---|
| 11 | . S LEX("ERR",LEX("ERR",0))="Default Vocabulary missing or invalid" | 
|---|
| 12 | N LEXSUBS S LEXSUBS=$O(^LEXT(757.2,"AA",^TMP("LEXSCH",$J,"VOC",0),0)) | 
|---|
| 13 | S ^TMP("LEXSCH",$J,"IDX",0)="A"_^TMP("LEXSCH",$J,"VOC",0) | 
|---|
| 14 | I $D(^LEXT(757.2,LEXSUBS,1)) D | 
|---|
| 15 | . S ^TMP("LEXSCH",$J,"GBL",0)=^LEXT(757.2,LEXSUBS,1) | 
|---|
| 16 | . S ^TMP("LEXSCH",$J,"FLN",0)=+($P(^TMP("LEXSCH",$J,"GBL",0),"(",2)) | 
|---|
| 17 | . I +^TMP("LEXSCH",$J,"FLN",0)=0!('$D(^DD(+^TMP("LEXSCH",$J,"FLN",0)))) D  Q | 
|---|
| 18 | . . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1 | 
|---|
| 19 | . . S LEX("ERR",LEX("ERR",0))="File Number missing or invalid" | 
|---|
| 20 | . I '$D(^DIC(^TMP("LEXSCH",$J,"FLN",0),0,"GL")) D  Q | 
|---|
| 21 | . . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1 | 
|---|
| 22 | . . S LEX("ERR",LEX("ERR",0))="Global Location missing or invalid" | 
|---|
| 23 | . I $G(^DIC(^TMP("LEXSCH",$J,"FLN",0),0,"GL"))'=^TMP("LEXSCH",$J,"GBL",0) D  Q | 
|---|
| 24 | . . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1 | 
|---|
| 25 | . . S LEX("ERR",LEX("ERR",0))="Global Location missing or invalid" | 
|---|
| 26 | . I $D(^TMP("LEXFND",$J)) D | 
|---|
| 27 | . . N LEXI,LEXE S LEXI=-999999999,^TMP("LEXSCH",$J,"EXM",0)="" | 
|---|
| 28 | . . F  S LEXI=$O(^TMP("LEXFND",$J,LEXI)) Q:LEXI=0!(^TMP("LEXSCH",$J,"EXM",0)'="")  D | 
|---|
| 29 | . . . S ^TMP("LEXSCH",$J,"EXM",0)=$O(^TMP("LEXFND",$J,LEXI,0)) S:+(^TMP("LEXSCH",$J,"EXM",0))=0 ^TMP("LEXSCH",$J,"EXM",0)="" | 
|---|
| 30 | Q | 
|---|
| 31 | ; | 
|---|
| 32 | ; Entry      D TOLKEN^LEXAM("USER INPUT") | 
|---|
| 33 | ; Returns    LEXTKN(#)=TOLKEN LIST | 
|---|
| 34 | ; | 
|---|
| 35 | ; LEXFOC(   Array by frequency of occurance | 
|---|
| 36 | ; LEXTKN(   Array by frequency | 
|---|
| 37 | ; LEXTKNS(  Array by input | 
|---|
| 38 | ; | 
|---|
| 39 | ; LEXLOOK   Flag for PTX^LEXTOLKN indicating parse for look-up | 
|---|
| 40 | ; LEXI      Incremental counter | 
|---|
| 41 | ; LEXF      Frequency of occurance | 
|---|
| 42 | ; LEXKEY    Key for spell check | 
|---|
| 43 | ; LEXK      Tolken | 
|---|
| 44 | ; LEXKF     Tolken found | 
|---|
| 45 | ; LEXNK     Next tolken | 
|---|
| 46 | ; | 
|---|
| 47 | TOLKEN(LEXX) ; Return list of tolkens in ascending order of usage | 
|---|
| 48 | Q:'$L($G(LEXX))  D PARSE,ORD K ^TMP("LEXTKN",$J) Q | 
|---|
| 49 | PARSE ; Parse user input into tolkens | 
|---|
| 50 | K ^TMP("LEXTKN",$J) N X,LEXLOOK S X=LEXX,LEXLOOK="" D PTX^LEXTOLKN Q | 
|---|
| 51 | ORD ; tolken list in frequency order | 
|---|
| 52 | Q:'$D(^TMP("LEXTKN",$J,0))  K LEXFOC,LEXTKN N LEXKEY,LEXI,LEXF,LEXK,LEXCT | 
|---|
| 53 | ; Get possible key | 
|---|
| 54 | S (LEXCT,LEXI)=0 F  S LEXI=$O(^TMP("LEXTKN",$J,LEXI)) Q:+LEXI=0  D | 
|---|
| 55 | . S LEXK=$O(^TMP("LEXTKN",$J,LEXI,"")) | 
|---|
| 56 | . I $D(^LEX(757.01,"ASL",LEXK)) S LEXF=$O(^LEX(757.01,"ASL",LEXK,0)),LEXKEY(LEXF)=LEXK | 
|---|
| 57 | I $D(LEXKEY) N LEXKF S LEXKF=$O(LEXKEY(0)),LEXKF=LEXKEY(LEXKF) K LEXKEY S LEXKEY=LEXKF | 
|---|
| 58 | S:'$D(LEXKEY) LEXKEY="" | 
|---|
| 59 | ; Order by frequency | 
|---|
| 60 | S (LEXCT,LEXI)=0 F  S LEXI=$O(^TMP("LEXTKN",$J,LEXI)) Q:+LEXI=0  D | 
|---|
| 61 | . S LEXK=$O(^TMP("LEXTKN",$J,LEXI,"")) | 
|---|
| 62 | . I $D(^LEX(757.01,"ASL",LEXK)) D | 
|---|
| 63 | . . N LEXNK S LEXNK=$$EXP^LEXAS6(LEXK) | 
|---|
| 64 | . . I $D(^LEX(757.01,"ASL",LEXNK)),LEXNK[LEXK,$L(LEXNK)>$L(LEXK) S LEXK=LEXNK | 
|---|
| 65 | . . S LEXCT=LEXCT+1,LEXF=$O(^LEX(757.01,"ASL",LEXK,0)) | 
|---|
| 66 | . . S LEXTKNS(LEXCT)=LEXK,LEXFOC(LEXF,LEXK)="" | 
|---|
| 67 | . . S LEXTKNS(0)=LEXCT | 
|---|
| 68 | . I '$D(^LEX(757.01,"ASL",LEXK)),$D(^LEX(757.01,"AWRD",LEXK)) D FRQ(LEXK) Q | 
|---|
| 69 | . I '$D(^LEX(757.01,"ASL",LEXK)),'$D(^LEX(757.01,"AWRD",LEXK)) D | 
|---|
| 70 | . . S LEXK=$$SPL^LEXAS(LEXK) | 
|---|
| 71 | . . I LEXK["^" D  Q | 
|---|
| 72 | . . . N LEXF,LEXT S LEXF=$P(LEXK,"^",1),LEXT=$P(LEXK,"^",2) | 
|---|
| 73 | . . . D FRQ(LEXF),FRQ(LEXT) | 
|---|
| 74 | . . D FRQ(LEXK) | 
|---|
| 75 | K ^TMP("LEXTKN",$J) Q:'$D(LEXFOC)  S LEXI=-999999999,LEXF=0 | 
|---|
| 76 | F  S LEXI=$O(LEXFOC(LEXI)) Q:+LEXI=0  D | 
|---|
| 77 | . S LEXK="" F  S LEXK=$O(LEXFOC(LEXI,LEXK)) Q:LEXK=""  D | 
|---|
| 78 | . . S LEXF=LEXF+1,LEXTKN(LEXF)=LEXK K LEXFOC(LEXI,LEXK) | 
|---|
| 79 | S:LEXF>0 LEXTKN(0)=LEXF | 
|---|
| 80 | Q | 
|---|
| 81 | FRQ(LEXK) ; Frequency | 
|---|
| 82 | I $D(^LEX(757.01,"ASL",LEXK)) D | 
|---|
| 83 | . S LEXCT=LEXCT+1,LEXF=$O(^LEX(757.01,"ASL",LEXK,0)) | 
|---|
| 84 | . S LEXTKNS(LEXCT)=LEXK,LEXFOC(LEXF,LEXK)="" | 
|---|
| 85 | . S LEXTKNS(0)=LEXCT | 
|---|
| 86 | I '$D(^LEX(757.01,"ASL",LEXK)),$D(^LEX(757.01,"AWRD",LEXK)) D | 
|---|
| 87 | . S LEXCT=LEXCT+1 N LEXC,LEXI S (LEXC,LEXI)=0 | 
|---|
| 88 | . F  S LEXI=$O(^LEX(757.01,"AWRD",LEXK,LEXI)) Q:+LEXI=0  S LEXC=LEXC+1 | 
|---|
| 89 | . S LEXF=LEXC,LEXTKNS(LEXCT)=LEXK,LEXFOC(LEXF,LEXK)="" | 
|---|
| 90 | . S LEXTKNS(0)=LEXCT | 
|---|
| 91 | Q | 
|---|