`te _
` Sp _ ee 5500920
`NUMBER
`
`UTILITY
`SERIAL
`ssoMUI
`
`
`
`NUMBER
`SERIAL NUMBER
`FILING DATE CLASS
`SUBCLASS.
`
`
`
`2308 |
`
`oS 31G, GS
`09 #0 #94
`APPLICANTS
`_
`
`
`
`
`
`*
`
`PATENT
`
`JULIAN MH. KUPIEC., CUPERTINO, CA.
`
`cstatebe
`
`*
`
`ME CORT THEI tf eit DATAkewe E # #3 SB oe okt ch i ok ds ce ch ch oe eee :
`
`THIS“ieFLEA IS A CON OF
`VERIFIED
`Meydye
`
`Go/126, 170 09/2B3493 ABN
`
`.
`
`*
`
`x
`
`
`
`
`*tPOREIGN/PCT APPLICATIONS ###%48 aaa aa
`VERIFIED
`
`Moly V0
`
`
`
`
`
`
`
`spe ee
`
`
`
` "IAEESYNeeIE
`
`|
`:
`FORETOAM FILING LICENSE GRANTED 11/04/34.
`
`
`ATTORNEY'S
`
`
`.|FILING FEE
`CLAIMS|RECEIVED
`Foreign priority claimed
`Ll yes
`QW) no
`DOCKET NO,
`
`GW no
`35 USC 119 conditions met D yes
`
`Rp}
`
`ner’s tnifiais
`
`
`
`Verified and Aetnenieases
`
`SEMANTIC CO-OCCURRENCE FILTERING FOR SPEECH RECCGN ITEOAN AND SIGNAL
`TRANSCRIPTION APPLICATIONS
`
`
`
`U.S. OEPT. of COMM.-Pat. & TM Office PTO-SI6L (rev. 10-78)
`
`
`
`
`
`
`PARTS OF APPLICATION
`TM) Von@e
`o
`FILED SEPARATELY
`|
`Co Adplicationy examine)1Y.9
`
`
`“NOTICE OF ALLOWANCE, MAILED
`CLAIMS AVLOWED
`
`,
`oe
`
`
`
`
`GAGS=|Be.MienaesA.Sheraas\PASID
`OD, Micnpes A SHOR)
`Total Claims
`Print Claim,
`2 Zz.
`Z
`a ame
`
`ISSUE FEE
`
`Oe‘ahPER
`‘|
`Nn
`x
`
`
`
`Print Fig.
`Amount Due
`Date Paid
`Sfiot
`io
`
`
`PRIMARY EXAMINER
`i
`
`GROUP 2300 issue\){/]
`
`
`BATCH
`
`Primary Examiner|NUMBER
`Label
`,
`PREPARED FOR ISSUE
`|
`Area
`
`|e
`
`:
`DRAWING
`Sheets Drwg.| Figs. Drwg.
`
`
`
`
`Form PTO-436A
`; (Rev, 8/82)
`
`WARNING:
`
`Theinformation disclosed herein may be restricted. Unauthorized disclosure may be prohibited
`by the United States Code Title 35, Sections 122, 181 and 368. Possession outside the U.S.
`Patent & Trademark Office is restricted to authorized employees and contractors only.
`
`|
`
`DISH, Exh. 1018, p. 1
`
`(RACE,
`aeee|
`
`DISH, Exh. 1018, p. 1
`
`
`
` ISSUE
`CLASSIFICATION
`
`PATENT
`
`
`
`UTILITY
`PATENT DATE
`seria J)/1 26179
`
`
`
`NUMBER
`NUMBER
`
`
` SERIAL NUMBER
` TEEN
`FPRTIE
`
`OB/126, 270
`
`go / 2B se
`
`SUBCLASS
`
`: 'i
`
`:
`
`i ‘
`
`MH. EMPIEC. CUPERTING, CA.
`
`
`
`INTINUIMG DATAS+
`Pic deka
`VERIELED
`.
`
`
`
`
`
`
`
`GRA
`
`
`
`
`
`
`rs -eeaseryeepasemreiesinaryerrors|
`
`
`INODEP,
`FILING FEE
`ATTORNEY'S
`|
`
`C yes no
`Foreign priority claimed
`| RECEIVED
`CLAIMS
`DOCKET NO,
`
`
`
`35 USE 119 conditions met a y
`& noa ferty
`
`
`
`
`
`“Exartiner’s tnitials
`Verified and Acknowledged
`
`
`
`DAVID Bh. ISLE
`TOWNSEND AND TOWNSEND KHOURIE AND CREW
`
`ETE
`3
`nH
`20TH FLOCE
`
`*
`
`:
`
`.
`
`,
`
`Ue
`
`,
`
`
`
`agreeoseoeneMEST
`
`
`
`
`
`
`
`Applications Examiner
`|” NOTICE OF ALLOWANCEMAILED
`CLAIMS ALLOWED
`Total Claims
`Print Claim
`
`PARTS OF APPLICATION
`FILED SEPARATELY
`
`4
`:
`
`.
`Assistant Examiner
`
`|
`
`
`
`
`
`DRAWING
`ISSUE FEE
`
`
`
`_
`
`Sheets Drwg.|Figs. Drwg. Print Fig.
`
`
`
`
`
`ISSUE
`BATCH
`Primary Examiner|NUMBER
`
`
`
`
`Label
`PREPARED FOR ISSUE |
`:
`nannies
`Area
`
`
`WARNING:Theinformation disclosed herein may be restricted. Unauthorized disclosure may be prohibited
`by the United States Code Title 35, Sections 122, 181 and 368. Possession outside the U.S.
`
`
`Patent & Trademark Office is restricted to authorized employees and contractors only.
`
`
`
`4
`‘orm PTO-436A
`Rev. 8/92}
`
`
`
`(FACE)
`. DISH, Exh. 1018, p. 2
`
`
`DISH, Exh. 1018, p. 2
`
`
`
`
`
`
`
`
`
`
` gts‘ye AAye
`
`
`
`
`
`
`
`14. a
`
`tgLn.
`
`6 1
`
`7. a
`
`a, |:Se
`et
`20.
`ee
`
`_
`| a
`
`oe
`
`21.
`22.
`
`23.
`
`24.
`
`25,
`
`26.
`
`27. a
`
`
`
`28.
`
`29,
`
`30.
`
`
`
`ae
`
`ee
`
`a
`
`
`31.
`a
`32,
`(FRONT)
`
`
`DISH, Exh. 1018, p. 3
`
`4 STD 170
`
`Date
`Entered
`or
`Counted
`
`
`
`
`
`
`
`papers.
`
`
`
`DISH, Exh. 1018, p. 3
`
`
`
`
`
` PATENT APPLICATION
`
`
`
`ametateRYte"SY
`
`.
`é
`&
`
`
`
`
`
`anarteieeemmeimamnsy(-emyermrnenntaanetentatnaaneaterfateennelncattiemimiratcatannettoee
`
`3
`:
`
`
`
`‘errriantataararttrerneattenttANEet SeNRRrURENnAnRinUtimiearenA cenateaaienemenmteaagampomamenegesonraneananenetaeeaeeRe
`
`
`
`
`
`‘=vemartumenreeminervenaenauteniastsanranatetansanrettntttntrttenterfteanathangsanepuntetetttPPHanRyerenteanAeacahcnamrmemeavanatamarteeeeettenarwateatnaecaretteenssaereatetetetat
`
`
`
`
`
`
`ormalDrawings (11sols) cet_{
`PIOGRAN: HAR 19 1996
`
`
`
`
`
`setemerngntsemetereeeA,
`
`
`
`
`
`
`
`\srrserertorereaanverstinmertereeetraysaaanassermtsishintsnithahNAa?Leielemaneeaieenndeammiemagamamuaeemamaeaentaetenemeaues
`
`m/3i6619 AANA
`__
`~ 08316619
` . Date ve
`
`
`
` - CONTENTS nore “tsa ~
`
`*
`
`
`
`
`
`
`
`
`i
`
`
`
`
`eermetcmnsitannehinethe/SanettitesnAestttmatatnAtitttetntantirensRenitatenetsPeereeeaetennantasNAAR‘sresremenem-motnettentnratlannetteyeti
`
`
`
`aanenaeettntenttAeeERAO hRONEERRSeetARERRterminai
`
`
`
`(FRONTS
`
`~ DISH, Exh. 1018, p. 4
`
`DISH, Exh. 1018, p. 4
`
`
`
`
`
`No. 13188-71
`Attorney Docket
`Xerox Docket No. D/93288
`
`SEMANTIC CO-OCCURRENCE FILTERING
`FOR SPEECH RECOGNITION AND SIGNAL TRANSCRIPTION APPLICATIONS
`
`Inventor:
`
`Julian Kupiec
`10079 Craft Drive
`Cupertino, California 95014
`British citizen
`
`Assignee:
`
`XEROX CORPORATION
`800 Long Ridge Road
`Stamford, Connecticut 06904
`New York corporation
`
`Entity:
`
`Large
`
`eeep
`
`TOWNSEND and TOWNSEND KHOURIE and CREW
`Steuart Street Tower, 20th Floor
`One Market Plaza
`San Francisco, California 94105
`(415) 543-9600
`°
`
`C0000
`
`DISH, Exh. 1018, p. 5
`
`DISH, Exh. 1018, p. 5
`
`
`
`The files reproduced in this appendix represent
`unpublished work that is Copyright ©1993 Xerox Corporation. All
`rights reserved. Copyright protection claimed includes all forms
`and matters of copyrightable material and information now allowed
`by statutory or judicial law or hereafter granted,
`including
`without limitation, material generated from the software programs
`which are displayed on the screen such as icons, screen display
`looks, etc.
`
`006002
`
`DISH, Exh. 1018, p. 6
`
`DISH, Exh. 1018, p. 6
`
`
`
`Attorney Docket No. 13188-71
`Xerox Docket No. D/93288
`
`SEMANTIC CO-OCCURRENCE FILTERING SOFTWARE PROGRAM
`
`SOURCE CODEFILE#1
`
`THIS FILE INCLUDES CODE FOR:
`READING IN PHONETIC INDEX FILES
`QUERY CONSTRUCTION
`SCORING
`
`906003.
`
`
`
`DISH, Exh. 1018, p. 7
`
`DISH, Exh. 1018, p. 7
`
`
`
`te3-¥*- Package: USER; Syntax: Common-Lisp; Base: 10 -*-
`
`6-Sep~-93 17:93:56 from source pnonetic-corpus
`j¢7 File converted on
`pif. Original source (dsk}<project>markov>phonetic>phonetic-corpus.;i68 created
`00:47:15
`
`giz. Copyright {c) 1989, 1992, 1993 by Xerox Corporation
`
`(provide "PHONETIC-CORPUS")
`
`(in-package "“USER")
`
`jj: Shadow, Export, Require, Use-package, and Import
`
`forms should follow here
`
`(defvar *buffer-is-a-word* nil}
`
`(defvar *interval-wd-vec* nil)
`
`(defvar *moby-hashtable* nil)
`
`(defvar *moby-to-reduced* ’(("_" "wd-sep")
`(wye-y" "skip")
`("/6/" “ae")
`("4 (ey) /" "eh" )
`("/[@Q]/" “er2")
`("/A/" "ao2")
`("fel/" “ey")
`("ses "ah2")
`("bp "sil2-b")
`("ses/" "ch")
`("d" 4sil2-d")
`("/E/" "eh")
`("fis “tiy")
`(mpm wen)
`("g" "sil2-g")
`("h® "hh2")
`("/hw/" wi}
`cM /t/" "ih2")
`("fal/" fay")
`("/dZ/" "Sh")
`(MH §sil2-k")
`qeye Wyo")
`Cm! m2")
`("/N/' "ng2")
`«"n" “n2")
`("/oi/" Soy")
`("/A/™ tao2")
`("/AU/" “awn)
`"fos" “ao2")
`("fou/" Sow")
`(fas “uw2")
`(s/o/" oh")
`(tp" "sil2-p")
`('r" "rt)
`("/s/" "“sh2")
`("s" Ms")
`cesT" "th")
`("/D/" ah")
`c"t" "si1l2-t")
`(8/@r7" Mer2")
`(ym myity
`("wit Mw}
`(ssy/" ty")
`("/2/" "sh2")
`("f2/" way
`("2" “ay
`crea" "foreign")
`("N" "foreign")
`(eRe "foreign")
`("/x/" “foreign")
`("/y/" “foreign")
`("y¥" “£oreign")
`("wt
`tw)
`
`("ae won)
`
`qeyn typ ty
`
`~
`
`;
`
`;
`
`fixable commer error
`
`fixable common error
`
`S80004
`
`DISH, Exh. 1018, p. 8
`
`DISH, Exh. 1018, p. 8
`
`
`
`("e" “eh")
`
`("a"® "ae")
`
`(Mg weg)
`
`))
`
`;
`
`fixable common error
`
`; fixable common error
`
`;
`
`/&/ fixable common error
`
`. mostly common Error
`
`(defvar
`
`(defvar
`
`(defvar
`
`*pocket-fsm* nil)
`*pocket-phone~fsm* nil)
`
`*pocket-phone-vector* nil)
`
`(defvar
`
`*pocket-vector* nil)
`
`(defvar
`
`*proximity* 10)
`
`(defvar
`
`*query-results* nil)
`
`{defvar
`
`{defvar
`
`*stop-hashtable* nil)
`
`*wds-buffer* (make-array 100 :element-type ‘string-char :fill-pointer 0
`
`:adjustable t))
`
`(defvar
`
`*any-phone* nil)
`
`(defvar
`
`*code-stream* nil)
`
`(defvar
`
`{defvar
`
`(defvar
`
`*coded-pocket-vector* nil)
`*confusion-class~fsms* nil)
`
`*confusion-mat rix-map*
`*((siy (siy :in2 sey :y))
`(:dh2 (:iy :ih2 :eh :ah2 :ae tuw2 :uh :er2 tey tr ty tn2))
`(:eh (:ih2 teh :ae :ah2 :er2 rey tay))
`(:ae (:eh tae tay saw))
`{sah2 (:ih2 :eh :ae :ah2 :uw2 tuh :a0o2 :er2 :ay soy t:aw tow 3:12
`(tuw2 (:iy :in2 suw2 sy))
`(suh (:ih2 tuh :ah2))
`(:ao2 (:ah2 :ao2 :ay taw :ow :w))
`(:er2 {({:ih2 :eh s:ah2 ser? :r)}
`(sey (:iy :ih2 seh :ey))
`{ray (:ao2 tay soy))
`(soy (roy))
`{:aw (:aw))
`(sow (:ah2 tuw2 :ao2 saw sow :12))
`(:12 (:ah2 tuw2 :ao2 sow :12 tw in2))
`(ir (:ih2 suw2 :a02 :er2 say ir tw))
`(sy (:iy ty)
`(rw (:ao2 :12 :w))
`(sm2 (:ah2 im2 in2 ing2 :sil2))
`{in2 (:ih2 san2 :12 in2 tm2 i:ng2 :sil2-b :dx :sii2))
`(ng? {in2 ingZ))
`(:ch (:ch))
`(:jh (:ch t:jn :sh))
`(:s (:s iz tsh2 :f :th))
`(rz (:s :2 tsh2 :th))
`(:sh2 (:ch :sh2)})
`(:f (:f :th))
`(iv (:n2 sf
`rv orth :8112))
`(:th (:f sth :si12))
`(:dh (:n2 tv sah t:sil2-b :sil2-d :dx :sil2))
`(rhh2 (:hh2))
`(:sil2-b (:sil2-b :sil2-p))
`(:sil2-d (:sil2-b :sil2-d :sil2-t :si12))
`{:sil2-g (:sil2-b :sil2-g))
`(:sil2-p (:hh2 :sil2-b :sil@-d :sil2-p :sil2-))
`{ssil2-t
`(:ch :jh is :sil2-d :sil2-p :sil2-t :si1i2))
`(:sil2-k (:jh ts thh2 :sil2-d :sil2-g :sil2-p :sil2-t
`(:dx (:n2 sdx))
`(:sil2 (siy :12 ty iw oim2
`
`:n2))
`
`.
`
`tn2 ing2 :s :2 :v ith :dh thh2 :dx :5i112))))
`
`:sil2-k :si12))
`
`(defvar
`
`*consonant-hashtable* nil)
`
`(defvar
`
`*consonant-letters*
`"{#\b #\c #\d ENS a\g a@\5 a\j #Nk #\l Xm B\n zip #\q \s e\t #\v
`
`#\x #\2))
`
`(defvar
`
`*debugi* nil)
`
`500005.
`
`
`
`DISH, Exh. 1018, p. 9
`
`DISH, Exh. 1018, p. 9
`
`
`
`(defvar
`
`*file~hashtable* nil)
`
`{defvar
`
`(defvar
`
`(defvar
`
`*foot~pocket* nil}
`
`*foot~pocket-code-file* "foot-pocket.codes")
`
`*foot-pocket-to-reduced* /(("p" :sil2-p)
`("t"™ :si12-t)
`("k" ssil2-k)
`("b" :s112-b)
`("d" 3:sil2-d)
`("g" tsil2-g)
`("Cc ich)
`qe tjh)
`(*s" ts)
`("S"
`tsh2)
`{"z" iz)
`("Z2"
`:sh2)
`cree :f)
`("tT") sth)
`(myn tv)
`("D"
`idh)
`(th tbh2)
`("n" 32)
`("m"
`:m2)
`("G"
`ing2)
`("N"
`sn2)
`cm" sm2)
`("L" 212)
`cmb" 412)
`(re tr)
`("tw")
`sw)
`(ty ay)
`qari
`:iy)
`("re :ih2)
`("eM seh)
`("ant
`rey)
`chee tae)
`("a" :ao02)
`cw saw)
`qeye tay)
`quan :ah2}
`("o" :a02)
`co" roy}
`(%o"
`tow)
`("0" suh)
`("um suw2)
`("R"
`:er2)
`("x" sah2y
`(hE rih2y
`("X"
`:er2)))
`
`<
`
`{defvar
`
`*foat-pocket-to~reduced~hashtable* nil)
`
`(defvar
`
`*fricative-fsm* nil)
`
`(defvar
`
`(defvar
`
`*grolier-fsm-mode* t)
`
`*group-vector™ nil)
`
`(defvar
`
`*hmm-state-hashtable* nil)
`
`-
`
`(defvar
`
`.
`
`oh
`
`rsil2-g
`
`*hmm-state-list*
`(:iy :ih2 :eh tae :ah2 :uw2 tuh :a0o2 :er2 sey :ay :oy :aw tcw 3:12
`
`tjh is tz ish2 :f sv rth :dh thh2 :b :d :¢ tp it
`
`:k sdx tsil2
`
`trosy rwoim2 in2 ing2
`:sil2~b :sil2-d
`
`:sil2-p :sil2-t :sil2-k :wd-sep)})
`
`(defvar
`
`*hypo-hashtable* nil)
`
`(defvar
`
`*letter-codes-file* "“letter.codes")
`
`(defvar
`
`(defvar
`
`*letter-count-file* “letter-count-vector.lisp")
`*letter-counts-for-states* nil)
`
`(defvar
`
`*nasal-fsm* nil)
`
`~
`
`vuGO6
`
`
`
`
`
`
`
`
`
`ie en rerenennntigtmnaten rsnnatepmmanmananaqaeaaptanantthatetAranenettitersntnnninamtteenseratteementsNhatreeertantaetapa
`
`
`
`
`
`
`
`
`
`DISH, Exh. 1018, p. 10
`
`DISH, Exh. 1018, p. 10
`
`
`
`{(defvar *nr-foreign-words* nil)
`
`{defvar *nr-format-errors* nil)
`
`(defvar *nr-grolier-wds* nil)
`{defvar *nr-hyphenations-ignored* nil)
`
`(defvar *nr-outputs* (+ 2
`
`(-
`
`(char-code #\z2)
`(char-code #\a))))
`
`(defvar *nr-states-per-phone* 2)
`
`(defvar *phone-hashtable* nil)
`
`b)
`d)
`g)
`Pp)
`t)
`k)
`:sil2)
`zssil2)
`zsil2)
`:sil2)
`:sil2)
`:sil2)
`rdx)
`sil2)
`jh)
`rch)
`
`(defvar *reduced-phones* ‘(("b" :
`ign
`("p" ‘
`("t" 3
`("ks
`("bel"
`("del"
`("gcl"
`("pel"
`("tcl"
`("kel"
`("dx"
`("g" :
`("3h
`("ch""
`("st
`("sh*
`("z"
`("zh"
`qnge
`("the
`("ve
`("dh
`("me
`("n"
`:n2)
`ing2)
`("ng"
`("em"
`tm2)
`n2)
`(ten"
`("eng"
`ing2)
`:n2)
`(nx
`:12)
`qe"
`tr)
`qtr"
`tw)
`(tye
`zy)
`(sy
`:hh2)
`(*hh"
`thh2)
`("hv
`+12)
`("elt
`tiy)
`(wiy"
`:ih2)
`("ih*"
`(“eh"
`:eh)
`sey)
`("ey"
`sae)
`(“ae"
`:ao2)
`(“aa"
`saw)
`("aw"
`("ay"
`say)
`:ah2)
`("aht
`("ao"
`:ao2)
`soy)
`("oy
`sow)
`("ow
`(*uh"
`uh)
`ruw2)
`Caw"
`fuw2)
`(“ux
`:er2)
`("er"
`sah2)
`("ax
`:ih2)
`(ix
`(“axr"
`zer2)
`(“ax-h" :ah2)
`:sil2)
`(“epi"
`:sil2)
`(“pau"
`("he
`:sil2)))
`
`(defvar *sonoranct-fsm* nil)
`
`(defvar *stop-fsm* nil)
`
`*
`
`-
`
`vuG00"
`
`arrcNleR
`
`DISH, Exh. 1018,p. 11
`
`DISH, Exh. 1018, p. 11
`
`
`
`(defvar *stop-list*
`’ {"a* "about" "above" "after" “also" Nalin "although" wan" Wand" "any" “sre” Mast "ast Wyytt
`"be" "hecause"™ "*hefore"™ "hetween" "but" "by" Hot Moan "eould" Wu Hen Neach"
`“elther"
`
`wae
`
`Won
`
`"some"
`
`“where”
`"
`"|
`
`you
`
`neu "fort “from "further" "g" wpe "have! "het
`
`ther" "here" this" "him "however"
`
`ALE" Mint Ninto"™ "is" "Eto" NES au CPPU “may" “met
`
`tmicht™ "my" "hn “now!
`°
`“of™ Non" "one" Yor "other" "our" "out" Hon qt Hy wet "she" "should" "since"
`
`"such" "t" “than" “that "the" "then" "there" "therefore" “these" “this" “those”
`"through" "thus" ftom my “"ontil" "up" *uson' &y"
`"wl Uwas! "were!" "what" ‘when
`.
`“whether"™ "which" "while" "with" "who" "will" "within" "without" "would" "x" "y"
`
`“your wot) )
`
`(defvar *tim-phone-list*
`1 (ph agn hgh "pr ee eke bel "del" "gel" "pel" "tel" "kel" "dx "gn "Sh" "ch" "st "she
`.
`Hohe wen "EA Hey ayn Hig Wy "ng" Tem! “ean "eng" toye wyu Wy Wage yt hh thy
`
`won
`
`Yalu
`
`Wiy" "ih "eh" "ey" Mae! Hagt May "ay" Nah" Hagit "oy" “ow! "yh" “uw" “ux! “ert Way
`"ix"® “axr" “ax-h" "epi" "paul "hey }
`
`(defvar *timit~to-~reduced-~phone-hashtable* nil)
`
`(defvar *use-confusion-classes* nil)
`
`*
`
`(defvar *use-nl-buf* <)
`
`(defvar *vowel-fsm* nil)
`
`(defvar *vowel-hashtabsle* nil)
`
`(defvar *vowel-phones*
`’(siy :ih2 :eh tae tan2 :uw2 t:uh :ao2 :er2 :ey :ay soy taw tow :r))
`
`(((((((
`
`(defun add-pocket-counts nil (let ((add-list ‘((:b (#\b))
`ad
`(#\d))
`g (#\g))
`Pp
`(#\p))
`t
`(#\t))
`k
`(#\K))
`ax (#\t))
`sil2 (#\b #\d #\g #\p #\t #\k)))))
`
`:
`(:
`
`some reduced phones just aren’ covered
`+7
`(dolist
`(el add~list)
`(dolist (letter (second el)}
`(dotimes (chain-index *nr~states~per-phone”*)
`(incf
`(aref *letter-counts-for-states* (char-to~op
`letter)
`
`chain-~index
`{gethash (firs = el)
`*hmm-state~hashtable*))
`
`1.0))))))
`
`{defun any-single-phone-fsm (hashtable)
`(let
`((fsm nil))
`(maphash #’ (lambda (dummy phone-fsm)
`(let nil
`(setq fsm (if fsm
`(fsm:union~fsm fsm phone-fsm)
`pnone-fsm})})
`
`hashtable)
`
`fsm) )
`
`(expr ékey (show nil))
`(defun apply-expr
`(let* ((count 0}
`(fsm (p-expr-to-fsm expr) )
`(fsm-vec (if (arrayp fsm)
`fsm
`(vector fsm))))
`{maphash #’ (lambda (key entry)
`{let
`({(found nil)
`phones~for-words}
`(setq phones-for-words (tnird entry)}
`(when show”
`(format t “~a~%" (first entry)))
`
`vo0008
`
`DISH, Exh. 1018,p. 12
`
`DISH, Exh. 1018, p. 12
`
`
`
`(1+ index)))
`(do ({index 0
`({or
`{= index (length phones-for-words) )
`found) )
`(setq found (next-word-match phones-for-words index fsm-vec
`
`key entry)))
`{when found (incf count))))
`*file~hashtable*)
`t "Nr sent hits: ~a~%$" count)))
`
`(format
`
`{defun ask~grolier (expr-list ékey (show nil)
`(show-wds t)
`(print-limit 20)
`{heap-limit 100)
`{(max~postings 5000)
`{prox 10)
`(search nil))
`
`(let* ((rval nil)
`query query~str heap conjunct-ids item doc-id nr-hits title-str title-hits)
`{setq heap (pq::make-priority-queue #’ (lambda (x y)
`(< (svref x 1)
`(svref y 1)))))
`
`(when (or
`
`(null *hmm-state-hashtable*)
`(null *grolier-fsm-mode*) }
`(setup-grolier-mode) )
`(when (null *stop-hashtable*)
`{setq *stop-hashtable* (make-hash-tas_e :test -#’ equal) )
`(mapcar #' (lambda (e1)
`(sectf
`
`(gethash el *sztop~hasntabie™)
`t)}
`
`*
`
`*stop-list*))
`(muitiple-value-setq (query-str conjunct~ids rval)
`(construct-query expr-list prox shcw show-wds) )
`(when search
`{setq query (concordance: :parse~boolean-query query-str concordance::*tdb*))}
`(format t "Searching...")
`(concordance: :phonetic-search query neap heap-limit max-postings)
`(format t "Done~%")
`(setq *the-heap* heap)
`(score=hits heap)
`{dotimes (index (pq::pq-length heap))
`{setq item (pq:pq-pop heap) )
`(setq doc-id (svref item 0))
`(setq nr-hits (svref item 1))
`(setq title-str (tdb::doc-title doc-id concordance::*tdb*))
`(setq title-hits (get-title-hits title-str))
`{format t "~&~5D: ~A Score:
`~A Title wds: ~A~%" doc-id titie-str nr-hits
`title-hits))
`(format t "Scoring...~%"))
`rval))}
`
`(print-error t))
`
`(defun char-to-op (char Soptional
`(let
`((op nil)
`(charcode (char-code char))
`(a-charcode (char-code #\a))
`(space-charcode (char-code #\Space)))
`(if (null
`(characterp char) )
`(error “ERROR: ~a not a char~%" char)
`(if (and (>= charcode a-charcode)
`(<= charcode (char-code #\z)))
`(setq op (1+ (- charcode a-charcodce))}
`(if (= charcode space-charcode)
`(setq op Q)
`(when print-error {error “ERROR: ~a is invalid char~%" char)))))
`
`op))
`
`(defun check-coverage nil
`
`(let
`
`((grolier-count 0)
`(pocket~count 0) )
`(setup-grolier-mode)
`(format t “Mapping grolier terms..~$%")
`(tdbimap-terms #’ (lambaa (word)
`(incef grolier-count)
`(let nil
`(when (= (rem grolier-count 1000)
`0)
`(format
`
`t "done ~a entries~%"
`grolier-count) )
`(when (fsm:word-to-index word
`xpocket-fsm*)
`(incf vocket-count))))
`
`concordance: :*tcab*
`
`voG009
`
`
`
`
`
`
`
`
`
`pewenene perennens creeperRitterneTntsteeitrmtataaanApinietngrttnenenetinnrpparevestatnharentalsationnuttinnantnnifatnnenreeteteamnnetnniente stringentnnerQianneSOPOT Teerent
`
`
`
`
`
`
`
`
`
`DISH, Exh. 1018,p. 13
`
`DISH, Exh. 1018, p. 13
`
`
`
`{format t "~%Nr grolier terms: ~a
`pocket-count) )
`)
`
`Nr coverea ~ar%" grolier-count
`
`(defun code~fp-word (word phones-for-word stream)
`{let nil
`(format stream "#(#(~a ~a)" (char-to-op #\Space)
`(gethash :wd-sep *hmm-state-hashtable*) )
`(phone-to-char-matches word phones-for-word stream)
`(format stream “#(~a ~a)})~%"
`(char-to-op #\Space)
`(gethash i:wd-sep *hmm~state~hashtable*))))
`
`(defun code-sentence (word-vec reduced-phones-for-sent stream)
`(let
`(word phones-for-word)
`
`777 Each word is a different obs seq
`
`(wd~index (length word-vec))
`(dotimes
`(format stream "#(#(~a ~a)" (char-to-op #\Space)
`(gethash :wd-sep *hmm-state-hashtable*))
`(setq word (filter-word (aref word-vec wd-index)))
`(setq phones~for-word (aref reduced-phones-for-sent wd-index) )
`(phone~to-char-matches word phones-for-word stream)
`(when nil
`(dotimes (char-index (length word) )
`(format stream "#(~a" (char-to-op (char word char-index)))
`.
`(dotimes (phone-index (length phones-for-word) }
`(format stream " ~a"
`(gethasn (aref phones-for-word phone-~index)
`xhmm-state-hashtable*)))
`(char-to-op #\Space)))
`(format stream ")~%"
`(Ecrmat stream "#{~a ~a))~%"
`(char-to-op #\Space)
`(gethash twd-sep *hmm-state-hashtabie*))))).)
`
`(defun code-timit nil
`
`(let
`
`*nr~states-per-phone*
`
`shmm-state-list*
`
`({state-id 0))
`(setq *hmm-state-hashtable* (make-hash-table :test #’ecual))
`(mapear #’ (lambda (el)
`(setf (gethash el *hmm-state-hashtable*)
`;State-~id)
`(incf state~id))
`*hmm-state-list*)
`(setq *timit~to-reduced-pnone-nashtable* (make-hash-table s:test
`#’ equai))
`
`(el *reduced~phones*)
`(dolist
`{setf (gethash (first ei)
`*timit-to~reduced-pnone-nashtable*)
`(second el)))
`(setgq *consonant-hashtable« (make-hash-taple :test #’equal))
`(dolist
`(el *consonant-letters*)
`{setf
`(gethash el *consonant~hashtable*)
`el})
`(setg *vowel-hashtable* (make-hash-table :test #’equai))
`(dolist
`(el *vowel-phones*)
`{setf£ (gethash el *vowe_-nashtable*)
`el})
`(setq *letter-counts-for-states* (make~array (list *nr-cutputs*”
`
`(length
`
`)
`tinitial-element 0))
`(with-open-file (*code-stream™ *letter~codes-file* :direction :output
`:if-exists inew-version)
`(maphash #’code-timit-sentence *file~hashtable*) }
`(normalize-count-vector) ))
`
`(defun code-timit-sentence (key entry)
`(let
`((word-vec (first entry))
`(phone-vec (second entry) )
`(reduced-phones~for-sent
`(make-array 0
`(dotimes (index (length phone-vec)}
`(vector-push~extend (convert-timit-phenes (aref phone-vec index) )
`reduced~phones-for-sent) )}
`for ~a ~%~+%~a~%" phone-vec
`(when *debug* (format t “Reduced phones:
`reduced-phones-for-sent) )
`(when (> (length reduced-phones-for-sent)
`a}
`
`:adiustable t :fill-pointer ©)))
`
`777 Make sure that phones do exist e.g. none for the word "a" in /makr0/sil982
`
`
`
`DISH, Exh. 1018, p. 14
`
`DISH, Exh. 1018, p. 14
`
`
`
`(fill-count-vector reduced-phones-for-sent word-vec)
`
`77 write char-to~ops to op-stream
`(code-sentence word-vec reduced-phones-for-sent *code-stream*))))
`
`(defun construct-query texpr-list proximity show show-wds)
`(let
`(lexpr-index 0)
`{conjunct-strs (make-array (length expr-list)
`sinitial-element nii))
`
`(conjunct-ids nil)
`(rval nil)
`curr-score pair word-hit score query~str stemmed-term word-present term-str count}
`{when nil
`{setq caonjunct-ids (make-array (length expr-list)
`rinitial~element
`(make-array 50 :adjustable t
`
`:fili-pointer 0))))
`
`)")
`(setq query-str *
`(if ¢hash-table-p *hypo-hashtable*)
`(celrhash *hypo-hashtable*)
`(setq *hypo-hashtable* (make-hash-table :test #’equal)))
`{dolist
`(expr expr-list)
`(when show (format t "~%expr: ~a~%" expr) )
`{setq term-str “}
`")
`(setq count 0)
`(setq word-present nil)
`(dolist
`(pair expr)
`(car pair))
`{(setq word-hit.
`(setq score (cdr pair)
`(setq stemmed-term (twol-stemmer::_ookup-stém (copy-seq word-hit)))
`(if (or
`(gethash word-hit *stop-hashtable*)
`(gethash stemmed-term *scop-hashtable*) )
`(when show (format t “~a on stcp iist -~-
`ignored~%" word-hit))
`(progn (setq word-present
`t)
`(push word-hit
`(aref conjunct-strs expr-incex) )
`(when nil
`(vector-push-extend (vector nil 0)
`; was wd-incex
`{aref conjunct-ids expr-index)))
`(setq term-str (concatenate ‘string word-nit
`
`’
`
`"
`
`“ term-str))
`
`Shouldn’t put words not recagnized by groliers in here !!!! --Must not insert nils into
`*HYPO-HASHTABLE*
`
`+
`
`(when (null stemmed-term)
`{(setq stemmed-term (copy-seq word-hit)))
`
`337 Not very good way of doing things, because word may appear in different list and get
`different
`fi; scores --+-for now keep max
`
`(setq curr-score (gethnash stemmed-term *hypo-nashctable*) )
`(if curr-score
`(when (> score curr-score)
`(setf (gethash stemmed-term *hypo-nashtable*)
`score) )
`(gethash stemmed-term *hypo-hashtable*)
`score) )
`(when (or show show-wds)
`(format t
`"~D: ~+12,3T (~D)~%" word-hit
`
`{(setf
`
`(tdb::term-freq
`
`word-hit
`
`concordance: :*tdb*) ))
`
`(inef count))))
`{when (and word-present
`(eql
`1
`(setq rval t))
`(when (> (length expr-list)
`1)
`(setq rval
`
`(length expr-list)))
`
`({ncone rval (list (if word-present
`
`nildyy))
`{setq term-str (concatenate ‘string "{
`“ term-str))
`(setq query~str
`(concatenate ‘string term-str query~str))
`{when (or show show-wds)
`(format t "Nr hits : ~a~%" count) )
`(incf expr-inaex) )
`(setq query-str (concatenate ‘string "(" (format nil "~d " proximity)
`query-str))
`
`vuGO1i
`
`DISH, Exh. 1018, p. 15
`
`DISH, Exh. 1018, p. 15
`
`
`
`= "Query : ~a~%" query-st7))
`(when show (format
`{values query-str conjunct-ids rval)))
`
`(aefun convert-foot-pocket nil (let ((state-id 0)
`(file-name "foot-pocket-no-~-markers.lisp")
`reduced~phones word)
`(format
`t "Converting Pocket Dictionary~%"}
`(when (null *foot-pocket*)
`(lead file-name) )
`{(setq *foot-pocket-to-reduced-hashtable* (make-hash-table
`stest
`#’ equal) )
`:
`
`(el *foot-pocket-to-reduced*)
`(dolist
`(setf (gethash (char (first e1)
`
`* foot-pocket-to-reduced-hashtable*)
`(second e1)))
`(setq *hmm-state-hashtable* (make-hash-table :test #’equal))
`(mapear #f (lambda (el)
`(sectf
`
`(gethash el *hmm-state~hashtable*)
`state~id)
`(incf state-~id))
`*hmm-state-list*)
`(setq *timit-to-reduced-phone-hashtable* {make-hash-table
`:
`:test
`#*ecual))
`
`(el *reduced-phones*) ,
`(dolist
`
`(setf
`(gethasr (first el)
`
`~rimit-to~reduced-pnone-hasntable*)
`(second e1)))
`(setq *consonant-nasntable* (make~hash-table :test #’equal))
`(dolist
`(el *consonant-letters*)
`(setf (gethash e: *consonant-hashtabie*)
`el))
`(setq *vowel-hasnziabie* (make-hash-table :test #' equal) )
`(dolist
`(el *vowe_l-phones*)
`(setf (gethasn el *vowel-hasntable*)
`el))
`(setq *letter-counts~for-states* (make-array (list
`
`(length
`
`»)
`rinitial-element 0))
`(with-open~file (stream *foot~pocket-code-file* :direction
`soutput
`:if-exists inew-version)
`(e_ *foot-pocket*)
`{dolist
`(setq word (filter-word (string~downcase (first
`
`(setq reduced-phones (convert-fp-werd (second
`
`(code-fp-word word reduced-phones stream)
`(fill-count-vector (vector recuced-pshones)
`{vector word))))
`
`(add~pocket-counts)
`(normalize-count-vector))}
`
`*nr-outputs*
`
`*nr~states-per-phone*
`
`*hmm-state-Llist*
`
`el))))
`
`el})}
`
`(defun convert-fp-word (fp-phones-for-word)
`(let
`(reduced-phone {reduced-phones-for-word (make-array 0
`
`O)))
`
`:adjustable t
`
`:fill-pointer
`
`(dotimes {index (length fp~phones-for-word))
`(setq reduced~phone (gethash (char fo~vhones-for-word index)
`*foot-pocket-to-reduced-hasntable*))
`
`(when (null reduced-phone)
`in hashtable~%" fp-phones-for-word
`(error "ERROR: word ~a char ~a not
`{char fp-phones~-for-word index)))
`(vector-push-extend reduced-phone reduced-phones-~for-word) }
`reduced-phones-~for-word) )
`
`(defun convert-moby-pronunciator
`
`(&key (errorstream c)
`(grolier~overlap t))}
`(let ((in-file "/project/corpora/moby-products/sronunciator/MobyPronunciator _II.cxt")
`(full-outrfile
`"/project /corpora/moby-products/pronunciator/mapped-pronunciations.txt")
`(grolier-outfile "/project/markov/phonet:ic/moby~grolier-overlap.txt")
`(error-file "/project/markov/phonetic/moby-errors.txt")
`(char-buf (make~array 100 :element-type ‘string-char :fill-pointer 0
`
`:adjustable t))
`
`a neneeetnentnestenegaarntanesintnttpentatinttntttpntteMettrentttVapinettenenpeesnntnt:sathentaetematintnmnnatintarnatten:
`
`vv001 2
`
`DISH, Exh. 1018, p. 16
`
`DISH, Exh. 1018, p. 16
`
`
`
`10
`
`t))
`
`line))
`
`(output-buf
`
`(make-array 1000 selement-type ‘string-char :fill-pe inter G
`
`:acjustable
`
`{line-number 0)
`outfile)
`(setq outfile (if grolier-overlap
`grolier-~outfile
`full-outfile})
`(fill-moby-hashtable)
`(setq *nr-format-errors* 0)
`(setq *nr-foreign-words* 0)
`(setq *nr-grolier-wds* 0)
`{(setq *nr-hyphenations-ignored* Q)
`(setq *char-buf* char-buf)
`(with-open-file (in-stream in-file :direction :input)
`(with-open-file (outstream outfile :direction :output :if-exists :new-version)
`(do ((line (read-line in-stream nil nil)
`(cread-line in-stream nil nil)))}
`((mull line))
`(read-moby~form grolier-overlap line line-number output-buf char-buf
`outstream errorstream)
`(when (= 0
`(rem line~number 1900))
`(format
`t "~a words done. Current line: ~a~%"
`
`line-number
`
`(incf line-number))))
`t "Nr total lines: ~A~%"
`line-number)
`(format
`t "Nr word format errors: ~A~%" *nx-format-errors”*)
`(format
`(format t "Nr grolier words: ~A~%" *nr-gro:ier-wds*)
`(format
`t
`"Ne hyphenations ignored: ~A~%" *nz-hypnenations-ignorea*)
`(format
`t "Nr Foreign words ignored: ~A~%" *nr-~foreiqn-words*) ))
`
`{defun convert-timit-onones (phones-for-word)
`(let
`((skipping-index 0)
`:acjustacle t :fili-sointer ¢))
`(reducec~phones-~for-word (make~array 0
`clos-posn burst-posn timit-phone reduced-chone)
`
`“
`
`.
`
`t*kel "y
`
`zy; Need tc convert Kcl followed by k to kce_-k state, and wnat about wa boundaries and
`;¢ phone that definitely don’t map to a lezter?
`(when nil
`(vector-push-~extend :wd-sep reduced-phones~for-wora) }
`(do nil
`{(= skipping-index (length phones-for-word) ))
`(setq timit-phone (aref phones~for-word skipping-index) )
`(setq reduced-phone (gethash timit-phone *timit-to-reduced-phone-nashtable*))
`(when
`(null
`reduced-phone)
`(format t "ERROR: No reduced phone for ~a~%" timit-pnone))
`(when (and (> (length phones-for-word)
`(1+ skipping-index))
`(setq clos-posn (position timit-phone ‘'("bel" "del" "gel" "pel" "tel"
`stest
`#’string=))
`(setq burst-posn (position (aref phones-for-word (1+ skipping-index) )
`f(y" wge Ng"
`"pr" wen wey
`test
`#’string=))
`(= clos-posn burst-posn) )
`(secq reduced-phone (nth clos~posn ‘(:sil2-b :sil2-d :sil2-
`:sil2-k)))
`
`q :silg-p :sil2-t
`
`{incf skipping-index))
`{incf skipping~-index)
`(vector-push-extend reduced-phone reducea-phones-for-word) )
`(when nil
`(vector-push-extend :wd-sep reduced~phones-for-word) )
`reduced-phones-for-word) )
`
`(defun decode {arg &key {name “phon"))
`{let
`(obs-vee¢ (obs-name "CURRENT-SENTENCE"} )
`(if (mull
`(setq obs-vec (rhmm:get-training-data arg)))
`(progn (setq obs-vec (make-array (+ 2
`(length arg))))
`(setf (aref obs-vec 0)
`(vector 0))
`{dotimes
`(index (length arg))
`(setf (aref obs-vec (1+ index))
`(vector
`(char-to-op (char arg index)))))
`(setf (aref obs-vec (1+ (length azg)))
`(vector 0})))
`(rhmm: set-training~data (list obs-name oos-vec)
`toverwrite t)
`(chmm:viterbi-search name obs~name)
`(dotimes (index (lengtn ops-vec) )
`(format t "~a
`~a~%"
`(op-to-char (acer {aref obs-vec index)
`O))
`
`GO00129
`
`DISH, Exh. 1018,p. 17
`
`DISH, Exh. 1018, p. 17
`
`
`
`11
`
`(nth (truncate (aref rhmm:*viterbi-states* index)
`*nr-states—-per-phone*)
`*hmm~-state~list*)))))
`
`(defun fill-count-vector (reduced~phones-for-sent word-vec)
`(let* ({attenuation 0.5)
`(center-phone-state (truncate (* 0.5 *nr-states-per-phone*) ))
`(letter-spread *nr-states~per-phone*)
`(left-spread (truncate (* 0.5 letter-spread)))
`(right-spread (- letter-spread left-spread 1))
`weight sub-phone-index word wd-len nr-phones this-phone this-phone-index
`center-wd-index low-wd-index hi-wd-index phones-for-word)
`
`¢i7¢ Right now, LETTER~SPREAD must be equal
`
`to *NR-STATES-PER~PHONE*
`
`peo
`
`otherwise there should be a map
`
`(wd-index (length reduced-phones-for-sent)}
`(dotimes
`(setq phones-for-word (aref reduced-snones-for-Sent wd-index) )
`(setq word (filter-word (aref word-vec wd~index)))
`(setq wd-len (length word) )
`(setq nr-phones (length phones-for-word) }
`(dotimes (phone-index nr-phones)
`{(setq this-phone (aref phones-for-word phone-index) )
`{setq this-phone-index (gethash this-phone *“hmm-state-hashtable*))
`(setq center-wd-index (if (= nr-phones 1)
`(round (* 0.5 (float
`(1- wd-len}})))
`(round (/
`(* (float phone-index)
`(float {l- wd-len)})
`(l- nr-phones)))))
`(setq low-wd-index (- center-wd-index left~-spread) )}
`{setq hi-wd-index (+ center-wd-index right-spread) }
`(when *debug* (format t "~a:
`"
`this-phone)}
`(de (t{index low-wd-index (1+ index)))
`({> index hi-wd-index))
`(when (and (>= index 0)
`(< index wd-len)
`(char-to-op (char word index)
`nil))
`(setq weight 1.0)
`{unless (= index center-wd-index)
`{setq weight
`(* attenuation weight) ))
`{setq sub-phone-index (+ center~phone~state (-
`
`index
`
`center-wd-index) })}
`
`index) )
`
`(when (and (>= sub-phone-incdex 0)
`(< sube-phone-index *nr-states-per-phone*) )
`(aref *“letter-counts-for-states* (char-to-op (char word
`
`(incf
`
`sub-phone-index this-phone-index)
`weight)
`(when *debug*
`(format t “~a: ~a
`weight) )))
`t "~%")))
`
`“(char word index}
`
`))
`
`)y
`
`{when *debug* (format
`
`(defun fill-moby-hashtable nil
`
`(setq *moby-hashtable* (make-hasn-table :test #’equal))
`(let nil
`(dolist
`(el *moby-to-reduced*)
`(setf (gethash (first el)
`xmoby-hashtable*)
`{second el)))))
`
`(defun fill-~phone-hmm-op-vec (model)
`(let ((nr-states (rhmm::hmm-defn-nr-stactes mode:))
`{(nr-outputs (rhmm::hmm-defn-nr-outputs model))
`this-index prob)
`ae
`
`st? don't forget
`
`:wd-sep = 1.0 op for Space
`
`000014
`
`
`
`paneeereeittreteERBa
`
`DISH, Exh. 1018, p. 18
`
`DISH, Exh. 1018, p. 18
`
`
`
`12
`
`~~ dotimes (i-state (length *hmm-state-list~))
`(dotimes (chain-index *nr-states-per-pnone*)
`(setq this-index (+ chain-index (* i~state *nr-states~per-pnone*) ))
`(dotimes (obs nr-outputs)
`(setq prob (aref *letter-counts-for-states* obs chain-incex i-state))
`(when {> 1.0E-10 prob)
`{setq prob 1.0E-10))
`(aref (aref (aref *output-matrix* 0}
`this-index)
`
`(setf
`
`obs)
`(double-float prob)}
`(when (= i-state (position :wd~sep *hmm-state-list*) )
`(setf (aref
`(aref
`(aref *output-matrix* 0)
`this-index)
`
`obs)
`(char-to-op #\Space) )
`(1£ (= obs
`(double-float 1.0)
`(double-float 0.0)))))))
`(chmm: shmm-defn-output-to-state-index model)
`(rhmm:make-output-to-state-index nr-states nr-outputs *output-matrix*)))
`
`{defun fill-phonetable (phone-vec ékey (show t))
`(let
`(this-phone phones-for-wd not-done this-fsm)
`(dotimes (wd-index (length phone-vec) )
`(setq phones-for-wd (aref phone~vec wa-incex) )
`(dotimes (ph-index (length phones-for-wd) }
`(setq this-phone (aref phones-for-wd ph-index))
`{when (null
`(gethash this-phone ‘nnone-hasntable*) )
`{setq not-done t)
`-
`t
`(when snow (format
`"NEW PHONE: ~a~%" this-phone) )
`(setq this-fsm (fsm:make-word-_Lisct-fsm (let
`({word this-ohone))
`(if not-cone
`(progn (setq not-done
`
`nil)
`
`:print-p nil))
`(setf (gethash this-«phone *phone-hashtable*)
`this-fsm}}))))
`
`word)
`
`nil))
`
`(defun filter-word (word)
`(let (ok t)
`(failure nil)
`*
`new-wd)
`(dotimes (index (length word))
`(char word index)
`(when (null
`(char-to-op
`nil))
`{unless (char= #\’
`(char word
`(setq failure t})
`(setq ok nil)))
`(when failure (format
`t
`(when (null ok)
`(setq new-wd (delete #\‘ word)))
`(if ok
`word
`new-wd) ))
`
`index))
`
`"FAILURE: ~a contains illegal chars~%" word))
`
`(defun find-group-recurrences (howmany &key (show nil)}
`(let
`((group-hashtable (make-hash-table :test +’ equal))
`key value count result group-veec start ena doc-id interval-wds (last-end -i)
`(last-wds nil)
`(last-doc-id -1))
`{(do*
`((index 0
`(1+ index)))
`((or
`(= index (length *“interval-wd-vec*}
`(null
`(svref *interval-wd-vec* index))
`(>= index howmany)})
`{setq interval-wds (svref *interval-wd-vec* index)}
`
`j3¢ There may be multiple identical words in interval vec, causing longer redundant hypothesis
`combinations (we are assuming here that words aren't repeated in the spoken query
`
`(when nil
`(setq key (copy-seq interval-wds) ))
`{(setq key (remove-duplicates interval-was :test #’string-eaual))
`{when (null key)
`"ERROR: key is mull for interval index ~A~%"
`(format t
`(setq result
`(svref *query-results* index))
`
`index) )
`