Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: LEXAM

LEXAM.m

Go to the documentation of this file.
  1. LEXAM ;ISL/KER - Look-up Misc (Setup/Parse) ;04/21/2014
  1. ;;2.0;LEXICON UTILITY;**80**;Sep 23, 1996;Build 10
  1. ;
  1. ; Global Variables
  1. ; ^DD( ICR 345
  1. ; ^DIC( ICR 916
  1. ; ^TMP("LEXFND" SACC 2.3.2.5.1
  1. ; ^TMP("LEXHIT" SACC 2.3.2.5.1
  1. ; ^TMP("LEXSCH" SACC 2.3.2.5.1
  1. ; ^TMP("LEXTKN") SACC 2.3.2.5.1
  1. ;
  1. ; External References
  1. ; None
  1. ;
  1. SETUP(LEXSUB) ; Set up search variables
  1. I '$L($G(LEXSUB)) D Q
  1. . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1
  1. . S LEX("ERR",LEX("ERR",0))="Default Vocabulary missing or invalid"
  1. S ^TMP("LEXSCH",$J,"VOC",0)=LEXSUB
  1. I '$D(^LEXT(757.2,"AA",^TMP("LEXSCH",$J,"VOC",0))) D Q
  1. . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1
  1. . S LEX("ERR",LEX("ERR",0))="Default Vocabulary missing or invalid"
  1. N LEXSUBS S LEXSUBS=$O(^LEXT(757.2,"AA",^TMP("LEXSCH",$J,"VOC",0),0))
  1. S ^TMP("LEXSCH",$J,"IDX",0)="A"_^TMP("LEXSCH",$J,"VOC",0)
  1. I $D(^LEXT(757.2,LEXSUBS,1)) D
  1. . S ^TMP("LEXSCH",$J,"GBL",0)=^LEXT(757.2,LEXSUBS,1)
  1. . S ^TMP("LEXSCH",$J,"FLN",0)=+($P(^TMP("LEXSCH",$J,"GBL",0),"(",2))
  1. . I +^TMP("LEXSCH",$J,"FLN",0)=0!('$D(^DD(+^TMP("LEXSCH",$J,"FLN",0)))) D Q
  1. . . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1
  1. . . S LEX("ERR",LEX("ERR",0))="File Number missing or invalid"
  1. . I '$D(^DIC(^TMP("LEXSCH",$J,"FLN",0),0,"GL")) D Q
  1. . . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1
  1. . . S LEX("ERR",LEX("ERR",0))="Global Location missing or invalid"
  1. . I $G(^DIC(^TMP("LEXSCH",$J,"FLN",0),0,"GL"))'=^TMP("LEXSCH",$J,"GBL",0) D Q
  1. . . S LEX("ERR",0)=+($G(LEX("ERR",0)))+1
  1. . . S LEX("ERR",LEX("ERR",0))="Global Location missing or invalid"
  1. . I $D(^TMP("LEXFND",$J)) D
  1. . . N LEXI,LEXE S LEXI=-999999999,^TMP("LEXSCH",$J,"EXM",0)=""
  1. . . F S LEXI=$O(^TMP("LEXFND",$J,LEXI)) Q:LEXI=0!(^TMP("LEXSCH",$J,"EXM",0)'="") D
  1. . . . S ^TMP("LEXSCH",$J,"EXM",0)=$O(^TMP("LEXFND",$J,LEXI,0)) S:+(^TMP("LEXSCH",$J,"EXM",0))=0 ^TMP("LEXSCH",$J,"EXM",0)=""
  1. Q
  1. ;
  1. ; Entry D TOLKEN^LEXAM("USER INPUT")
  1. ; Returns LEXTKN(#)=TOLKEN LIST
  1. ;
  1. ; LEXFOC( Array by frequency of occurance
  1. ; LEXTKN( Array by frequency
  1. ; LEXTKNS( Array by input
  1. ;
  1. ; LEXLOOK Flag for PTX^LEXTOKN indicating parse for look-up
  1. ; LEXI Incremental counter
  1. ; LEXF Frequency of occurance
  1. ; LEXKEY Key for spell check
  1. ; LEXK Tolken
  1. ; LEXKF Tolken found
  1. ; LEXNK Next tolken
  1. ;
  1. TOKEN(LEXX) ; Return list of tokens in ascending order of usage
  1. Q:'$L($G(LEXX)) D PARSE,ORD K ^TMP("LEXTKN",$J) Q
  1. PARSE ; Parse user input into tolkens
  1. K ^TMP("LEXTKN",$J) N X,LEXLOOK S X=LEXX,LEXLOOK="" D PTX^LEXTOKN Q
  1. ORD ; tolken list in frequency order
  1. Q:'$D(^TMP("LEXTKN",$J,0)) K LEXFOC,LEXTKN N LEXKEY,LEXI,LEXF,LEXK,LEXCT
  1. ; Get possible key
  1. S (LEXCT,LEXI)=0 F S LEXI=$O(^TMP("LEXTKN",$J,LEXI)) Q:+LEXI=0 D
  1. . S LEXK=$O(^TMP("LEXTKN",$J,LEXI,""))
  1. . I $D(^LEX(757.01,"ASL",LEXK)) S LEXF=$O(^LEX(757.01,"ASL",LEXK,0)),LEXKEY(LEXF)=LEXK
  1. I $D(LEXKEY) N LEXKF S LEXKF=$O(LEXKEY(0)),LEXKF=LEXKEY(LEXKF) K LEXKEY S LEXKEY=LEXKF
  1. S:'$D(LEXKEY) LEXKEY=""
  1. ; Order by frequency
  1. S (LEXCT,LEXI)=0 F S LEXI=$O(^TMP("LEXTKN",$J,LEXI)) Q:+LEXI=0 D
  1. . S LEXK=$O(^TMP("LEXTKN",$J,LEXI,""))
  1. . I $D(^LEX(757.01,"ASL",LEXK)) D
  1. . . N LEXNK S LEXNK=$$EXP^LEXAS6(LEXK)
  1. . . I $D(^LEX(757.01,"ASL",LEXNK)),LEXNK[LEXK,$L(LEXNK)>$L(LEXK) S LEXK=LEXNK
  1. . . S LEXCT=LEXCT+1,LEXF=$O(^LEX(757.01,"ASL",LEXK,0))
  1. . . S LEXTKNS(LEXCT)=LEXK,LEXFOC(LEXF,LEXK)=""
  1. . . S LEXTKNS(0)=LEXCT
  1. . I '$D(^LEX(757.01,"ASL",LEXK)),$D(^LEX(757.01,"AWRD",LEXK)) D FRQ(LEXK) Q
  1. . I '$D(^LEX(757.01,"ASL",LEXK)),'$D(^LEX(757.01,"AWRD",LEXK)) D
  1. . . S LEXK=$$SPL^LEXAS(LEXK)
  1. . . I LEXK["^" D Q
  1. . . . N LEXF,LEXT S LEXF=$P(LEXK,"^",1),LEXT=$P(LEXK,"^",2)
  1. . . . D FRQ(LEXF),FRQ(LEXT)
  1. . . D FRQ(LEXK)
  1. K ^TMP("LEXTKN",$J) Q:'$D(LEXFOC) S LEXI=-999999999,LEXF=0
  1. F S LEXI=$O(LEXFOC(LEXI)) Q:+LEXI=0 D
  1. . S LEXK="" F S LEXK=$O(LEXFOC(LEXI,LEXK)) Q:LEXK="" D
  1. . . S LEXF=LEXF+1,LEXTKN(LEXF)=LEXK K LEXFOC(LEXI,LEXK)
  1. S:LEXF>0 LEXTKN(0)=LEXF
  1. Q
  1. FRQ(LEXK) ; Frequency
  1. I $D(^LEX(757.01,"ASL",LEXK)) D
  1. . S LEXCT=LEXCT+1,LEXF=$O(^LEX(757.01,"ASL",LEXK,0))
  1. . S LEXTKNS(LEXCT)=LEXK,LEXFOC(LEXF,LEXK)=""
  1. . S LEXTKNS(0)=LEXCT
  1. I '$D(^LEX(757.01,"ASL",LEXK)),$D(^LEX(757.01,"AWRD",LEXK)) D
  1. . S LEXCT=LEXCT+1 N LEXC,LEXI S (LEXC,LEXI)=0
  1. . F S LEXI=$O(^LEX(757.01,"AWRD",LEXK,LEXI)) Q:+LEXI=0 S LEXC=LEXC+1
  1. . S LEXF=LEXC,LEXTKNS(LEXCT)=LEXK,LEXFOC(LEXF,LEXK)=""
  1. . S LEXTKNS(0)=LEXCT
  1. Q