| 1 | LEXTOLKN ; ISL Parse term into words                ; 01-31-97 | 
|---|
| 2 | ;;2.0;LEXICON UTILITY;**4**;Sep 23, 1996 | 
|---|
| 3 | ; | 
|---|
| 4 | ; Returns ^TMP("LEXTKN",$J,#,WORD) containing words | 
|---|
| 5 | ; | 
|---|
| 6 | ; If LEXIDX is set, then the Excluded Words file is used to | 
|---|
| 7 | ; selectively exclude words from the indexing process.  If | 
|---|
| 8 | ; LEXLOOK is set, then the Excluded Words file is used to | 
|---|
| 9 | ; selectively exclude words from the look-up process.  If | 
|---|
| 10 | ; LEXIDX and LEXLOOK do not exist then all words are parsed | 
|---|
| 11 | ; parsed. | 
|---|
| 12 | ; | 
|---|
| 13 | PT ; Entry point where DA is defined and X is unknown | 
|---|
| 14 | Q:'$D(DA)  S X=^LEX(757.01,DA,0) | 
|---|
| 15 | PTX ; Entry point to parse string (X must exist) | 
|---|
| 16 | N LEXOK,LEXTOKS,LEXTOKS2,LEXTOKI,LEXTOKW,LEXTOLKN | 
|---|
| 17 | N LEXOKC,LEXOKN,LEXOKP | 
|---|
| 18 | K ^TMP("LEXTKN",$J) | 
|---|
| 19 | Q:'$L($G(X))  S LEXTOKS=$TR(X,"-"," ") | 
|---|
| 20 | ; Remove leading blanks from string | 
|---|
| 21 | F LEXOKP=1:1:$L(LEXTOKS) Q:$E(LEXTOKS,LEXOKP)'[" " | 
|---|
| 22 | S LEXTOKS=$E(LEXTOKS,LEXOKP,$L(LEXTOKS)) | 
|---|
| 23 | ; Remove trailing blanks from string | 
|---|
| 24 | F LEXOKP=$L(LEXTOKS):-1:1 Q:$E(LEXTOKS,LEXOKP)'[" " | 
|---|
| 25 | S LEXTOKS=$E(LEXTOKS,1,LEXOKP) | 
|---|
| 26 | ; Remove Punctuation (less slashes) | 
|---|
| 27 | S LEXTOKS=$TR(LEXTOKS,"?`~!@#$%^&*()_-+={}[]\:;,<>","                            ") | 
|---|
| 28 | ; Conditionally remove slashes | 
|---|
| 29 | S:$D(LEXIDX) LEXTOKS=$TR(LEXTOKS,"/"," ") | 
|---|
| 30 | S LEXTOKS=$TR(LEXTOKS,".","") | 
|---|
| 31 | S LEXTOKS=$TR(LEXTOKS,"""","") | 
|---|
| 32 | ; Swtich to UPPERCASE (lower case is not specified by LEXLOW) | 
|---|
| 33 | S:'$D(LEXLOW) LEXTOKS=$$UP^XLFSTR(LEXTOKS) | 
|---|
| 34 | ; Store in temporary array (based on space character) | 
|---|
| 35 | S LEXOKC=0 F LEXTOKI=1:1:$L(LEXTOKS," ") D | 
|---|
| 36 | . N LEXTOKW S LEXTOKW=$P(LEXTOKS," ",LEXTOKI) Q:LEXTOKW="" | 
|---|
| 37 | . I LEXTOKW'["/" D | 
|---|
| 38 | . . S LEXOKC=LEXOKC+1,LEXTOLKN(LEXOKC)=LEXTOKW | 
|---|
| 39 | . . S LEXTOLKN(0)=LEXOKC | 
|---|
| 40 | . I LEXTOKW["/"&('$D(^LEX(757.05,"B",LEXTOKW))) D  Q  ; PCH 4 | 
|---|
| 41 | . . N LEXP S LEXP=0 F  S LEXP=LEXP+1 Q:$P(LEXTOKW,"/",LEXP)=""  D | 
|---|
| 42 | . . . S LEXOKC=LEXOKC+1,LEXTOLKN(LEXOKC)=$P(LEXTOKW,"/",LEXP) | 
|---|
| 43 | . . . S LEXTOLKN(0)=LEXOKC | 
|---|
| 44 | . I LEXTOKW["/"&($D(^LEX(757.05,"B",LEXTOKW))) D | 
|---|
| 45 | . . N LEXOKR S LEXOKR=$O(^LEX(757.05,"B",LEXTOKW,0)) | 
|---|
| 46 | . . I $P($G(^LEX(757.05,LEXOKR,0)),U,3)="R" D | 
|---|
| 47 | . . . S LEXOKC=LEXOKC+1,LEXTOLKN(LEXOKC)=LEXTOKW | 
|---|
| 48 | . . . S LEXTOLKN(0)=LEXOKC | 
|---|
| 49 | K LEXOKC,LEXOKR | 
|---|
| 50 | I +($G(LEXTOLKN(0)))=0 K LEXTOLKN S ^TMP("LEXTKN",$J,0)=0 G EXIT | 
|---|
| 51 | S LEXTOKW="",LEXOKN=0 F LEXTOKI=1:1:LEXTOLKN(0) D | 
|---|
| 52 | . S LEXTOKW=$G(LEXTOLKN(LEXTOKI)) | 
|---|
| 53 | . ; Remove leading blanks | 
|---|
| 54 | . F LEXOKP=1:1:$L(LEXTOKW) Q:$E(LEXTOKW,LEXOKP)'[" " | 
|---|
| 55 | . S LEXTOKW=$E(LEXTOKW,LEXOKP,$L(LEXTOKW)) | 
|---|
| 56 | . ; Remove trailing blanks | 
|---|
| 57 | . F LEXOKP=$L(LEXTOKW):-1:1 Q:$E(LEXTOKW,LEXOKP)'[" " | 
|---|
| 58 | . S LEXTOKW=$E(LEXTOKW,1,LEXOKP) | 
|---|
| 59 | . ; Leading numerics or Zero | 
|---|
| 60 | . ;I +LEXTOKW>0 S LEXTOKW="" Q | 
|---|
| 61 | . I $A($E(LEXTOKW,1))=48 S LEXTOKW="" Q | 
|---|
| 62 | . ; Apostrophies and spaces | 
|---|
| 63 | . S LEXTOKW=$TR(LEXTOKW,"'",""),LEXTOKW=$TR(LEXTOKW," ","") | 
|---|
| 64 | . ; Numeric only | 
|---|
| 65 | . ;S LEXOK=0 F LEXOKP=1:1:$L(LEXTOKW) S:$E(LEXTOKW,LEXOKP)?1U LEXOK=1 Q:LEXOK=1 | 
|---|
| 66 | . ;I 'LEXOK S LEXTOKW="" Q | 
|---|
| 67 | . I $D(LEXIDX) D | 
|---|
| 68 | . . I LEXTOKW'="" S:$D(^LEX(757.04,"ACTION",LEXTOKW,"I")) LEXTOKW="" | 
|---|
| 69 | . . I LEXTOKW'="" S:$D(^LEX(757.04,"ACTION",LEXTOKW,"B")) LEXTOKW="" | 
|---|
| 70 | . I $D(LEXLOOK) D | 
|---|
| 71 | . . I LEXTOKW'="" S:$D(^LEX(757.04,"ACTION",LEXTOKW,"L")) LEXTOKW="" | 
|---|
| 72 | . . I LEXTOKW'="" S:$D(^LEX(757.04,"ACTION",LEXTOKW,"B")) LEXTOKW="" | 
|---|
| 73 | . I $D(LEXOKN),$D(LEXTOKW),LEXTOKW'="" D | 
|---|
| 74 | . . S LEXOKN=+(LEXOKN)+1,^TMP("LEXTKN",$J,LEXOKN,LEXTOKW)="" | 
|---|
| 75 | . S LEXTOKW="" | 
|---|
| 76 | S ^TMP("LEXTKN",$J,0)=LEXOKN | 
|---|
| 77 | EXIT ; Clean up and quit | 
|---|
| 78 | K LEXOK,LEXTOKI,LEXOKN,LEXOKP,LEXOKR,LEXTOKS,LEXTOKS2,LEXTOKW,LEXTOLKN | 
|---|
| 79 | Q | 
|---|