Text comparator with counters for indicating positions of correctly decoding text elements within an ordered sequence of text elements5119327Abstract A text comparator which includes a decoded data memory (13) which contains a plurality of shift registers (SR2.0.-SR7F), one shift register for each one of the plurality of different symbols forming the data base stored within the mass storage device (11). The decoded signal is applied to the input lead of the shift register associated with that character, and a clock signal applied to each shift register of the decoded data memory. In this manner, the decoded data memory will provide signals on the output leads of each shift register indicative of the most recently received character, as well as each of the preceding K characters received from the mass storage device and decoded, where K is the number of bits contained in each shift register of the decoded data memory. The output lead of the shift registers are connected to the input leads of a variety of logical gates, such as AND gates and OR gates, in order to provide an output signal indicating when the desired textual phrase has been located on the disk. In addition, word counters, paragraph counters, and other devices are employed as desired to provide special text comparison functions. Claims I claim: Description RELATED APPLICATIONS
TABLE 1
______________________________________
ASCII
ASCII Code
Code (Hexi-
Character (Binary) decimal)
______________________________________
blank 00100000 2.0.
! 00100001 21
" 00100010 22
# 00100011 23
$ 00100100 24
% 00100101 25
& 00100110 26
' 00100111 27
( 00101000 28
) 00101001 29
* 00101010 2A
+ 00101011 2B
, 00101100 2C
- 00101101 2D
. 00101110 2E
/ 00101111 2F
.0. 00110000 3.0.
1 00110001 31
2 00110010 32
3 00110011 33
4 00110100 34
5 00110101 35
6 00110110 36
7 00110111 37
8 00111000 38
9 00111001 39
: 00111010 3A
; 00111011 3B
< 00111100 3C
= 00111101 3D
> 00111110 3E
? 00111111 3F
@ 01000000 4.0.
A 01000001 41
B 01000010 42
C 01000011 43
D 01000100 44
E 01000101 45
F 01000110 46
G 01000111 47
H 01001000 48
I 01001001 49
J 01001010 4A
K 01001011 4B
L 01001100 4C
M 01001101 4D
N 01001110 4E
O 01001111 4F
P 01010000 5.0.
Q 01010001 51
R 01010010 52
S 01010011 53
T 01010100 54
U 01010101 55
V 01010110 56
W 01010111 57
X 01011000 58
Y 01011001 59
Z 01011010 5A
[ 01011011 5B
01011100 5C
] 01011101 5D
or 01011110 5E
- 01011111 5F
` 01100000 6.0.
a 01100001 61
b 01100010 62
c 01100011 63
d 01100100 64
e 01100101 65
f 01100110 66
g 01100111 67
h 01101000 68
i 01101001 69
j 01101010 6A
k 01101011 6B
l 01101100 6C
m 01101101 6D
n 01101110 6E
o 01101111 6F
p 01110000 7.0.
q 01110001 71
r 01110010 72
s 01110011 73
t 01110100 74
u 01110101 75
v 01110110 76
w 01110111 77
x 01111000 78
y 01111001 79
z 01111010 7A
{ 01111011 7B
01111100 7C
} 01111101 7D
.about. 01111110 7E
DEL 01111111 7F
______________________________________
A detailed view of the output leads of the shift registers of decoded data memory 13 is shown in FIG. 4. Shift register SRnm, corresponding to the shift register at the intersection of row n and column m, has a plurality of K output leads for examining the K bits stored within shift register SRnm. Thus, the least significant bit stored within shift register SRnm is available on lead nm1, the next to the least significant bit is available on lead nm2, and the most significant bit is available on lead nmK. Logical Operator Section 14 Logical operator section 14 comprises one or more logical gates which may be hard wired to decoded data memory 13, or alternatively programmably connected under computer control, as described later. One embodiment of logical operator section 14 (FIG. 1) is shown in FIG. 5a. Here, NOR gate 761a is connected so as to provide a logical one signal on output lead 762a when the character string "Work" has been located in mass storage device 11 (FIG. 1). When the character string "Work" has been received, the fourth least significant bit of shift register SR57 (as provided on lead 574), the third least significant bit of shift register SR6F (as provided on lead 6F3), the second least significant bit of shift register SR72 (as provided on lead 722), and the least significant bit of shift register SR6B (as provided on lead 6B1), will all be equal to logical zeros. Thus, upon receipt of the character string "Work", the output signal on lead 762a of NOR gate 761 (having its input leads connected to leads 574, 6F3, 722 and 6B1) will be a logical one, in contrast to the logical low signal present on lead 762a at all other times. Because the character string "Work" will be detected by NOR gate 761a upon decoding of the first four letters of the word "Working" as well as for the word "Work", when seeking to locate a character string equivalent to the word "Work", and not any variations thereof, the logical operator section 14 (FIG. 1) is programmed to locate the character string "Workb" (where b is a blank character). This is depicted in FIG. 5b, where NOR gate 761b requires the fifth least significant bit of shift register SR57 (on lead 575), the fourth least significant bit of shift register SR6F (on lead 6F4), the third least significant bit of shift register SR72 (on lead 723), the second least significant bit of shift register SR6B (on lead 6B2), and the least significant bit of shift register SR2.0. (on lead 2.0.1) to all be logical zeros in order for the signal on lead 762a to be a logical one, indicating receipt of the character string "Workb". By the appropriate connection of additional gates, logical operator section 14 may perform other search functions. For example, if it is desired to locate within mass storage device 11 all occurrences of either the word "Workb" or "workb", the circuit of FIG. 5c will serve as logical operator section 14. Here, the input leads of AND gate 760 are connected to leads 575 (from shift register 57 corresponding to the capital letter "W") and 775 (from shift register 77 corresponding to the lower case letter "w"). Thus, a logical low on either lead 575 or lead 775 will provide a logical low signal on lead 760-1, which in turn is connected to an input lead of NOR gate 761C. The remaining input leads of NOR gate 761C are connected to leads 6F4, 723, 6B2, and 1.0.1, as in the embodiment of FIG. 5b. In this manner, a logical high output signal is provided on lead 762C when either of the desired words "Workb" or "workb" are located. In many data base systems, additional symbols are used to indicated the end of a word (EOW), the end of a sentence (EOS), the end of a paragraph (EOP), and the end of a document (EOD). These additional symbols may comprise eight bit bytes which do not form one of the 96 ASCII characters (i.e. comprise .0..0. through .0.F or 8.0. through 8F). Alternatively, these additional symbols may comprise one or more ASCII characters. For example, the end of sentence signal (EOS) may comprise a period followed by two blanks. Additional shift registers are utilized to serve as word counters, sentence counters, and paragraph counters. An example of a word counter, which indicates which word within a sentence is being decoded, is shown in FIG. 6a. Shift register SR-EOW may comprise a 74164 8-bit serial-in, parallel-out shift register, as has been previously described for the shift registers of decoded data memory 13. Alternatively, a plurality of 8-bit shift registers may be connected serially, thus providing shift register SR-EOW which is capable of storing greater than 8 bits. As shown in FIG. 6a, shift register SR-EOW is provided a clock signal by the end of word (EOW) signal. Thus, shift register SR-EOW is clocked upon receipt of an EOW signal, thereby shifting data on input lead 876a into shift register SR-EOW and shifting data stored in the shift register to the next most significant bit. Input lead 876a is connected to the output lead of SR flip flop 999 (which may comprise a 74LS279 device manufactured by Signetics). On receipt of a high EOS signal indicating the end of a sentence, a logical low EOS signal is generated by inverter 998 (e.g. a 7404 device) and applied to the clear input lead of shift register SR-EOW, thus clearing shift register SR-EOW (i.e. shift register SR-EOW stores all zeroes when clear). This low EOS signal also causes flip flop 999 to provide a high output signal on lead 876a. Upon the receipt of a high EOW signal, indicating the end of a word, the high output signal on lead 876a is clocked into the least significant bit of shift register SR-EOW. Also, upon receipt of a high EOW signal, inverter 997 provides a low R signal to reset flip flop 999, thus causing flip flop 999 to provide a low output signal. This low output signal is input to shift register SR-EOW by the operation of subsequent EOW signals applied to the clock input lead of shift register SR-EOW, thereby shifting the low Q signal on the output lead of flip flop 999 into the least significant bit of shift register SR-EOW, and shifting the data stored in each bit of shift register SR-EOW to the next significant bit. Thus, the signal initially stored within the least significant bit of shift register SR-EOW in response to a high EOS signal is shifted to the left (i.e. the next most significant bit) upon receipt of each EOW signal. In this manner, the signal on leads EOW-1 through EOW-j, where j is the number of bits stored within shift register SR-EOW, indicate which word within the sentence is being decoded. Thus, for example, if a logical one is present on lead EOW-1, the first word in the sentence is being decoded. Similarly, where a logical one is present on lead EOW-2, the second word of the sentence is being decoded. Of importance, only a single logical one will be present on leads EOW-1 through EOW-j. This is accomplished by applying a high signal to the "clear" input lead of shift register SR-EOW upon receipt of a high EOS signal, thus resetting all bits stored in shift register SR-EOW to logical zeros immediately prior to the storage of a logical one in the least significant bit of shift register SR-EOW when a high (End of Sentence) signal is applied to input lead 876. A sentence counter is shown in FIG. 6b. The sentence counter, comprising shift register SR-EOS having output leads EOS-1 through EOS-j, operates in a similar manner as the word counter of FIG. 6a. However, RS flip flop 989 has its input lead connected to the (End of Paragraph) signal, thereby clearing shift register SR-EOS and setting flip flop 989 high upon receipt of each EOP signal. Upon the receipt of a high EOS signal, shift register SR-EOS is clocked in a similar manner as SR-EOW (FIG. 6a), thereby storing a logical one in the least significant bit of shift register SR-EOS upon receipt of the first sentence of each paragraph, and clocking this logical one to the next significant bit upon receipt of each sentence. Thus, the presence of a logical one on a unique one of leads of EOS-1 through EOS-j indicates which sentence in a paragraph is being decoded. A paragraph counter is shown in FIG. 6c. The paragraph counter, comprising shift register SR-EOP having output leads EOP-1 through EOP-j, operates in a similar manner as the word counter of FIG. 6a and the sentence counter of FIG. 6b. However, the EOP signal provides a clock signal to the paragraph counter SR-EOP. The input lead 876c of the paragraph counter is connected to the output lead of RS flip flop 979, which is set by the (End of Document) signal. The clear input lead is activated upon receipt of a high EOD signal. In this manner, the logical one appearing on a unique one of output leads EOP-1 through EOP-j indicates which paragraph within the document is being decoded. Utilizing the word counter, sentence counter, paragraph counter, and decoded data memory 13, complex fulltext searching may be accomplished. For example, if it is desired to locate a document stored within mass storage device 11 in which the word "Workb" appears in the third word of the fourth sentence of the second paragraph, the circuit of FIG. 5d is used. The circuit of FIG. 5d comprises AND gate 901 having one input lead connected to output lead 762b of the circuit of FIG. 5b. Thus, a logical high signal will be input to AND gate 901 on lead 762b when the character string "Workb" is decoded. Similarly, a logical high signal will be input to AND gate 901 when the third least significant bit of the word counter is a logical one, indicating that the third word is being decoded. This high signal will be available on lead EOW-3. In a similar manner, when the fourth sentence of the paragraph is being decoded, a logical high will be applied at an input signal to AND gate 901 on lead EOS-4, and when the second paragraph of a document is being decoded, a high input signal will be applied to AND gate 901 on lead EOP-2. Thus, a logical high signal will be present on output lead 901-1 only when the word "Workb" is decoded as the third word of the fourth sentence of the second paragraph of a document. In accordance with this invention, full text searching is accomplished to locate documents in which a plurality of desired words occur within the same sentence. For example, one embodiment of a logical operator section 14 which may be utilized to locate text which includes the word "batb" and "ballb" in the same sentence is shown in FIG. 5e. NOR gate 976 has its input leads connected to leads 624, 613, 741 and 2.0.1 of decoded data memory 13, thus providing a logical high output signal on lead 976-1 when the word "batb" has been decoded. Similarly, NOR gate 977 has its input leads connected to leads 625, 614, 6C3, 6C2 and 2.0.1 of decoded data memory 13, thus providing a logical high on output lead 977-1 when the word "ballb" is decoded. Lead 976-1 is connected to the S input of SR flip-flop 978, thus providing a logical high on the Q.sub.1 output lead 978-1 when the word "batb" has been decoded. Similarly, lead 977-1 is connected to the S input lead of SR flip-flop 979, thus providing a high signal on the Q.sub.2 output lead 979-1 when the word "ballb" has been decoded. Flip-flops 978 and 979 are reset by a low EOS signal, which is applied to the R input leads of the flip-flops. Thus, at the end of each sentence, flip-flops 978 and 979 are reset (Q.sub.1 and Q.sub.2 reset to logical zero), thus indicating that the words "batb" and "ballb" have not been decoded within the next sentence. The output leads 978-1 and 979-1 from the flip-flops are connected to the input of AND gate 980, thus providing a logical high on output lead 980-1 when the words "batb" and "ballb" have been decoded within the same sentence (i.e. Q.sub.1 output lead of flip flop 978 and Q.sub.2 output lead of flip flop 979 both high). By utilizing the end of paragraph (EOP) or the end of document (EOD) signal in place of the end of sentence (EOS) signal in the logical operator section depicted in FIG. 5e, documents may be located in which the words "batb" and "ballb" are located within the same paragraph, or document, respectively. It is often desired to find the location within the data base where a first desired word appears within a selected number of words of a second desired word. For example, it may be desirable to locate instances where the word "ball" appears within four words of the word "bat", in order to locate portions of the data base referring to baseball, while not locating portions of the data base referring to any other type of ball (e.g. golf ball, etc.) and any other type of bat (e.g. flying mammals). One embodiment of logical operator section 14 which may accomplish this task of locating portions of the data base wherein the word "bat" appears within four words of the word "ball" is shown in the schematic diagrams of FIGS. 7a and 7b. Logical operator section 14 of FIG. 7a includes NOR gate 976 and NOR gate 977, which are connected in the same manner as NOR gates 976 and 977, respectively, of FIG. 5e. Accordingly, a high output signal from NOR gate 976 indicates that the word "batb" has just been located. Similarly, a high output signal from NOR gate 977 indicates that the word "ballb" has just been located. Inverters 831 and 832 invert the output signal from NOR gates 976 and 977, respectively. Thus, upon detection of the word "batb", the output signal from inverter 831 is low, thus setting SR flip flop 833 to have a high Q output signal. Similarly, upon detection of the word "ballb", the output signal from inverter 832 is low, thus setting SR flip flop 834 such that its Q output signal is high. The Q output signals from SR flip flops 833 and 834 are clocked into the least significant bit of shift registers 834 and 836, respectively, upon receipt of a low EOW signal which is applied to the clock input leads of shift registers 835 and 836. SR flip flops 833 and 834 are required in order to preserve the signal indicating that the desired words have been decoded, until the receipt of the EOW signal which clocks that data into shift registers 835 and 836, respectively. If SR flip flops 833 and 834 were not used, the signal indicating that the desired words had been detected would, be lost prior to being clocked into shift registers 835 and 836, respectively. Of importance, when the EOW signal comprises a blank character (which appears at the end of every word), and the desired word being detected includes the blank character and the end of the word (e.g. "batb" and "ballb") shift registers 833 and 834 (and thus inverters 831 and 832) are not required, because the EOW signal appears simultaneously with the high output signal from either NOR gate 976 or NOR gate 977 indicating that the desired word has been decoded. Upon detection of the word "batb" and receipt of the EOW signal, a logical one is clocked into the least significant bit of shift register 835. After the data from flip flops 833 and 834 have been clocked into shift registers 835 and 836, respectively, upon the receipt of an EOW signal, a low signal is applied to terminal 841 which is connected to the reset (R) input leads of flip flops 33 and 834, thus resetting the Q output signals of flip flops 833 and 834 low. This reset signal applied to terminal 841 may comprise, for example, a signal EOW', which is derived from but delayed by approximately 75 microseconds from the EOW signal, thus resetting flip flops 833 and 834 after the data appearing on their Q output leads have been clocked into shift registers 835 and 836, respectively, upon receipt of a low EOW signal. At the beginning of a search, a logical low signal is applied in a well known manner to node 840a which is connected to the reset (R) input leads of shift registers 835 and 836, thus resetting each bit within shift registers 835 and 836 to logical zeros. Upon each subsequent EOW signal, the data in shift registers 835 and 836 is shifted to the next most significant bit, with output data from SR flip flops 833 and 834 being input to the least significant bits of shift registers 835 and 836, respectively. Accordingly, the signals appearing on output leads T1 through Tj of shift register 835 indicate which one or ones of the previous j, words decoded was equal to "batb", and the signals on the output leads Pl through Pj of shift register 836 indicates which one of the previous j words decoded was equal to "ballb". In this example, it is desired to locate occurrences of the word "batb" within four words of the word "ballb". Accordingly, the four least significant output leads of shift registers 835 and 836 are connected to the input leads of NOR gate 837 and 838, respectively. Thus, NOR gate 837 generates a low output signal when the word "batb" is one of the four most recently decoded words, and similarly, NOR gate 838 provides a low output signal when the word "ballb" has been one of the four most recently decoded words. The output leads of NOR gates 837 and 838 are connected to the input leads of NOR gate 839, thus providing a high output signal from NOR gate 839 which is available on node 840 when both the words "batb" and "ballb" have been decoded within four words of each other. The shift registers 835 and 836 are reset in a number of desired ways. First, as previously described, on beginning a search, shift registers 835 and 836 are cleared. Shift registers 835 and 836 are also cleared upon receipt of a high output signal from NOR gate 839, thus indicating that the desired words have been decoded within four words of each other. This reset procedure is designed to prevent erroneous multiple high signals on the output lead of NOR gate 839 under certain circumstances when the desired words have been decoded. For example, if the desired words are adjacent to each other, and shift registers 834 and 836 are not reset upon their first detection, NOR gate 839 will provide a high output signal when the desired words are the two most recently decoded words, the second and third most recently decoded words, and the third and fourth most recently decoded words, thus providing three signals for the same occurrence of the two desired words. Thus, by resetting shift registers 835 and 836 upon receipt of a high output signal from NOR gate 839, such erroneous multiple signals will be prevented. Finally, shift registers 835 and 836 may, if desired, be reset upon receipt of an EOS signal, thus requiring the desired words to appear in the same sentence. Alternatively, shift registers 835 and 836 may be reset by the EOP signal or the EOD signal, thus requiring the desired words to be located within the same paragraph, or the same document, respectively. FIG. 7b shows NOR gate 870 having its input leads connected to the EOS signal, the output signal from NOR gate 839 appearing on terminal 840, and a signal labelled as "begin search", which is high when a search is to begin. Accordingly, NOR gate 870 will provide a low output signal which is connected to terminate 840a of FIG. 7a to reset shift registers 835 and 836 at the beginning of each search, at the end of each sentence, and upon detection of the desired words and their desired relationship by receipt of a high signal on terminal 840. Those of ordinary skill in the art, in light of the teachings of this invention, are also able to construct a logical operation section 14 may also be constructed which will detect the occurrence of a first desired word within a fixed number of sentences of a second desired word Logical operator section 14 of FIG. 7a may be used for this purpose with but a few modifications. For example, shift registers 835 and 836 will, in this instance, receive their clock signals from the EOS signal, and flip flops 833 and 834 will be reset by a delayed EOS' signal applied to terminal 841. Furthermore, the NAND gate 870 of FIG. 7b will receive as its input signals the EOP signal in place of the EOS signal, if it is desired that the two words appear within the same paragraph. Alternatively, the EOS signal applied to NOR gate 870 of FIG. 7b is replaced by the EOD signal, when it is desired that the two desired words appear in the same document. Furthermore, it is to be understood that the decoder 12 and decoded data memory 13 (FIG. 1) can be used with logical operator section 14 other than those specific embodiments provided in this specification. Similarly, the logical operator section 14 need not be used with the specific embodiments of decoder 12 and decoded data memory 13 provided in this specification. The logical operator section 14 (FIG. 1) can comprise hardwired logical gates which serve to search for desired character strings. Alternatively, logical operator section 14 may comprise a large number of logical gates, including AND gates, OR gates, NOR gates, flip-flops, and the like, which may be programmably connected in order to provide the desired character search, in order to be highly flexible in performing searches. The use of crosspoint switch arrays, and particularly such arrays implemented as integrated circuits, will be useful in the construction of logical operator section 14. One such 256 by 256 cross-point switching array is described in an article entitled "Cross-Point Array IC Handles 256 Voice and Data Channels", written by Lloyd Reaume and appearing in Electronics Magazine, Oct. 6, 1981, pages 133-135. Such a cross-point switch array is useful for connecting the plurality of output leads from the shift registers of decoded data memory 13 contained within bus 13a, the EOW, EOS, EOP, and EOD signals, as well as providing interconnections between the logical gates of logical operators section 14. Utilizing a suitable computer program, the operation of such cross-point switch arrays within logical operators section 14 may be accomplished as a result of simple commands describing the desired search. The computer is programmed to receive the commands and operate the cross-point switch array in such a manner as to provide proper connection between the leads, within bus 13a, the EOW, EOS, EOP and EOD leads, and the logical gates within logical operator, section 14. As previously described, upon the decoding of the desired character string, logical operator section 14 generates a signal on bus 14a, which is connected to central processing unit (CPU) 15 (FIG. 1). CPU 15 then operates as programmed, for example, to store the document number containing the desired character string, print the sentence containing the desired character string, and the like. SECOND EMBODIMENT System Overview A second embodiment of a text comparator constructed in accordance with this invention is depicted in the block diagram of FIG. 8. Text comparator 80 includes mass storage device 111 which, as previously described in conjunction with the first embodiment of this invention, stores a large amount of textual data, often referred to as the "data base." Data stored in mass storage device 111 is transferred via bus 111a and made available to word logic 112, delimiter logic 113, set logic 114, set combination logic 115, proximity logic 117, and programming logic 116, as is fully described below. Delimiter logic 113 serves to monitor the characters transferred from mass storage device 111 on bus 111a and provides discrete signals depicting whether the character being transferred is a predefined delimiter character. Such delimiter characters include, for example, special characters or groups of characters denoting the end of a word (EOW), end of a paragraph (EOP), end of a sentence (EOS), end of a document (EOD), end of a chapter (EOC), and the end of a title (EOT). The delimiter signals provided by delimiter logic 113 are required in order to allow the text comparator 80 to determine, for example, when two specified words occur within the same sentence or within the same paragraph, as is fully described below. Word logic 112 serves to store data regarding predefined words (i.e., strings of characters) which are to be located within the text stored in mass storage device 111. Word logic 112 then provides output word signals on bus 112a indicating when such predefined words have been located in the character string being transferred from mass storage device 111 via bus 111a. These word signals are transferred via bus 112a to set logic 114 and proximity logic 117. Set logic 114 receives the delimiter signals from delimiter logic 113 via bus 113a and word signals from word logic 112 via bus 112a and determines when selected words are located in the same sentence, same paragraph, etc., as desired, and provides output signals on bus 114a indicating when predefined words or strings of characters have been so located. The output signals from set logic 114 are applied to set combination logic 115, which serves to combine the signals from set logic 114 in order to generate output signals on output bus 115a indicating when the textual information transferred from mass storage device 111 on bus 111a meets the desired search strategy selected by the user. Proximity logic 117 receives input signals from buses 111a, 112a, 113a, and 114a and combines this information in order to provide output signals indicating when predefined words detected by word logic 112, or predefined set of words, as detected by set logic 114, or a combination of this information, occurs within a predefined proximity. For example, proximity logic 117 will determine if a first selected word occurs within N (where N is a selected integer) words of a second preselected word. Programming logic 116 serves to receive search strategy instructions from the user and in response thereto provide the proper timing, addressing, and data signals via bus 111a to word logic 112, delimiter logic 113, set logic 114, set combination logic 115, and proximity logic 117 to cause to be stored within these elements the information required to perform the desired search strategy. While for ease and understanding word logic 112, delimiter logic 113, set logic 114, set combination logic 115, and proximity logic 117 will now be described in separate subsections of this specification, it is to be understood that each of these elements is, if required, programmed by programming logic 116 prior to the execution of a user defined textual search strategy. Delimiter Logic 113 FIG. 9 depicts the relationship between FIGS. 9a through 9c which in turn form a schematic diagram of one embodiment of delimiter logic 113. Delimiter logic 113 provides on its output leads 9-6a, 9-7a, 9-8a, 9-10a, 9-12a, and 9-14a, delimiter signals indicating, for example, the end of a word, end of a paragraph, end of a document, etc. These output leads 9-6a, 9-7a, 9-8a, 9-10a, 9-12a and 9-14a form bus 113a of FIG. 8. In many textual data base, the end of a word (EOW) is indicated by a non-blank character followed by a blank. This is preferred over the technique used by some textual data bases where the end of a word is indicated simply by a blank character, because at the end of a sentence and at the end of a paragraph numerous blanks may occur in sequence, providing a corresponding plurality of undesired end of word signals. Similarly, an end of a sentence is often indicated by a period followed by two blanks, and an end of paragraph is indicated by a period followed by three blanks. The portion of the delimiter logic 113 shown in FIG. 9a serves to detect the occurrence of a blank, a non-blank character, and a period, and also combines these three characters in order to provide EOW, EOS and EOP signals on output leads 9-6a through 9-8a, respectively. The eight bit data word comprising bits D0 through D7 is latched into latch 9-1 upon receipt of a clock signal (CLK) which is provided by mass storage device 111 on bus 111a to indicate that a valid data word is present on bus 111a. Latch 9-1 comprises, for example, a 74373 device manufactured by National Semiconductor Corporation (hereinafter referred to as "National"). Latch 9-1 serves to store data received on bus 111a and provide this data to the remainder of delimiter logic 113 until the next data word has been set onto bus 111a. Thus latch 9-1 provides bits D0 through D7 on leads 9-1a through 9-1h. Each bit D0 through D7 is uniquely applied to one input lead of exclusive OR gates 9-2a1 through 9-2a8, and are also uniquely applied to one input lead of exclusive OR gates 9-2b1 through 9-2b8. The remaining input leads of exclusive OR gates. 9-2a1 through 9-2a8 are connected either to a logical zero signal (typically zero volts) or a logical one signal (typically 5 volts) in order to program exclusive OR gates 9-2a1 through 9-2a8 so as to detect when a blank character is transmitted on bus 111a. Similarly, the remaining input leads of exclusive OR gates 9-2b1 through 9-2b8 are connected either to a logical zero signal or a logical one signal in order to program exclusive OR gates 9-2b1 through 9-2b8 so as to detect when a period is transmitted on bus 111a. Referring to table 1, it is seen that in ASCII, a blank is a hexadecimal 20 (binary 00100000). Accordingly, the program leads of exclusive OR gates 9-2a1 through 9-2a8 (i.e., those leads not connected to data bits D0 through D7 provided by leads 9-1a through 9-1h, respectively) are programmed to the binary signal corresponding to the inverse of the binary signal representing a blank. Thus, the program leads of exclusive OR gates 9-2a1 through 9-2a8 are programmed to binary 11011111, respectively. In this manner, when a blank signal is transmitted on bus 111a and stored in latch 9-1, the D0 through D7 signals applied to each exclusive OR gate 9-2a1 through 9-2a8 are opposite the program signal applied to these exclusive OR gates, and each exclusive OR gate 9-2a1 through 9-2a8 provides a logical one output signal on its output lead. The output signals from exclusive OR gates 9-2a1 through 9-2a8 are applied to the input leads of NAND gate 9-3a. Thus, when a blank character is transmitted on bus 111a, each input signal to NAND gate 9-3a is a logical one, and the blank output signal from NAND gate 9-3a is a logical zero, indicating that a blank character has been transmitted. Conversely, when a nonblank character is transmitted on bus 111a and stored in latch 9-1, at least one exclusive OR gate 9-2a1 through 9-2a8 receives a data signal D0 through D7 which is identical to the programming signal applied to that exclusive OR gate, and the output signal from that exclusive OR gate is a logical zero. Thus, the blank output signal from NAND gate 9-31 is a logical one, indicating that a nonblank character has been transmitted. The output signal from NAND gate 9-3a is applied to the D input lead of D type flip-flop 9-4a. The Q output lead of flip-flop 9-4a is connected to the D input lead of D-type flip-flop 9-4b, whose Q output lead is in turn connected to the D input lead of D-type flip-flop 9-4c. Flip-flops 9-5a through 9-5d thereby providing signals indicating whether each of the last three characters transmitted was a blank or a nonblank character. D-type flip-flops 9-4a through 9-4c comprise, for example, one flip-flop of a 74175 quad D-type flip-flop manufactured by National. Flip flops 9-4a through 9-4c each receive their clock signals from the Valid Data signal provided by mass storage device 111 (FIG. 8) indicating that valid data is available on bus 11a. Again referring to table 1, it is seen that in ASCII, a period is a hexadecimal 2E (binary 00101110). Accordingly, the program leads of exclusive OR gates 9-2b1 through 9-2b8 (i.e., those leads not connected to data bits D0 through D7 provided by leads 9-1a through 9-1h, respectively) are programmed to the binary signal corresponding to the inverse of the binary signal representing a period. Thus, the program leads of exclusive OR gates 9-2b1 through 9-2b8 are programmed to binary 11010001, respectively. In this manner, when a period signal is transmitted on bus 111a and stored in latch 9-1, the D0 through D7 signals applied to each exclusive OR gate 9-2b1 through 9-2b8 are opposite the program signal applied to these exclusive OR gates, and each exclusive OR gate 9-2b1 through 9-2b8 provides a logical one output signal on its output lead. The output signals from exclusive OR gates 9-2b1 through 9-2b8 are applied to the input leads of NAND gate 9-3b. Thus, when a blank character is transmitted on bus 111a, each input signal to NAND gate 9-3b is a logical one, and the . output signal from NAND gate 9-3b is a logical zero, indicating that the period has been transmitted. Conversely, when a nonperiod character is transmitted on bus 111a and stored in latch 9-1, at least one exclusive OR gate 9-2b1 through 9-2b8 receives a data signal DO through D7 which is identical to the programming signal applied to that exclusive OR gate, and the output signal from that exclusive OR gate is a logical zero. Thus, the . output signal from NAND gate 9-3b is a logical one, indicating that a non-period character has been transmitted. The output signal from NAND gate 9-3b is applied to the D input, lead of D type flip-flop 9-5a. The Q output lead of flip-flop 9-5a is connected to the D input lead of D-type flip-flop 9-5b, whose Q output lead is in turn connected to the D input lead of D-type flip-flop 9-5c, whose Q output lead is in turn connected to the D input lead of D-type flip-flop 9-5d, flip-flopts 9-5a through 9-5d, D-type flip-flops 9-5a through 9-5d comprise, for example, one flip-flop of a 74175 quad D-type flip-flop manufactured by National. Flip-flops 9-5a through 9-5d, each receive their clock signals from the Valid Data signal provided by mass storage device 111 (FIG. 8) indicating that valid data is available on bus 111a. Because the end of a word is indicated by a nonblank character followed by a blank character, one input lead of NAND gate 9-6 is connected to the Q output lead of flip-flop 9-4b and one input lead of NAND gate 9-6 is connected to the Q ouput lead of flip-flop 9-4a. Thus, when the character most recently transmitted on bus 111a is a blank, the Q output signal from flip flop 9-4a is a logical one. Similarly, when the preceding character transmitted on bus 111a is a nonblank character, the Q output signal from flip-flop 9-4b is a logical one. With both input leads of NAND gate 9-6 receiving logical one signals, the EOW output signal generated by NAND gate 9-6 and available on output lead 9-6a is a logical zero, indicating that the end of a word has been detected. At all other times, either the Q output lead of flip flop 9-4a will provide a logical zero signal (indicating that the character most recently transmitted on bus 111a is a nonblank character) or the Q output lead from flip flop 9-4b will provide a logical zero signal, indicating that the previously received character was not a nonblank character, or both, thereby causing NAND gate 9-6 to generate a logical one EOW signal. Similarly, because the end of a sentence is indicated by a period followed by two blanks, NAND gate 9-7, which generates a EOS signal on its output lead 9-7a, has one of its three input leads connected to each of the Q output leads of flip-flops 9-4a, 9-4b, and 9-5c. In this manner, when the two most recently received characters are blanks, flip-flops 9-4a and 9-4b provide logical one Q output signals, and when the character preceding these two blank characters is a period, flip-flop 9-5c provides a logical one Q output signal, thereby causing NAND gate 9-7 to generate a logical zero EOS signal on output lead 9-7a. In a similar manner, the end of a paragrah is indicated by a period followed by three blanks. Thus, NAND gate 9-8 has one of its input leads connected to each of the Q output leads of flip-flops 9-4a, 9-4b, 9-4c, and 9-5d. In this manner, when the three most recently received characters are all blanks, flip flops 9-4a through 9-4c will provide logical one Q output signals to three input leads of NAND gate 9-8. When the character preceding these three blanks is a period, flip flop 9-5d will provide a logical one Q output signal to the remaining input lead of NAND gate 9-8, thereby causing NAND gate 9-8 to generate a logical zero EOP signal on output lead 9-8a. Conversely, when the four characters most recently transmitted on bus 111a are not a period followed by three blanks, at least one Q output signal from flip-flops 9-4a, 9-4b, 9-4c, and 9-5b will be a logical zero, thereby causing NAND gate 9-8 to generate a logical one EOP signal on output lead 9-8a indicating that the end of a paragraph has not been detected. Because the EOW, EOS and EOP signals are rather universally indicated by a non-blank character followed by a blank, a period followed by two blanks, and by a period followed by three blanks, respectively, it is preferable to utilize arrays of exclusive OR gates 9-2a and 9-2b, each exclusive OR gate having a programming lead hard wired to a logical zero or logical one potential, in order to detect the end of a word, end of a sentence, and end of a paragraph. However, the EOD, EOC, and EOT signals oftentimes stored within mass memory device 111 utilizing a variety of special characters, depending on the database used. For example, one system might store an EOD signal in mass memory device 111 as a hexadecimal FF, while another system might store an EOD signal in mass storage device 111 as a hexadecimal FA. Accordingly, it is desirable to provide delimiter logic 113 with the ability to be programmed in a manner that will allow delimiter logic 113 to detect the presence of the EOD, EOC and EOT signals, regardless of how those signals are stored in the mass storage device 111 of the particular system being used. The remainder of the delimiter logic 113 shown in FIG. 9 is capable of being programmed to detect any three desired characters stored within mass storage device 111. In this embodiment, these three characters detected by the circuit of FIG. 9 are the characters which are used to indicate the end of a document (EOD), the end of a chapter (EOC) and the end of a title (EOT). The programming of delimiter logic 113 occurs prior to the transfer of data from mass storage device 111 to bus 111a for comparison. Prior to such transfer, programming logic 116 (FIG. 8) provides signals on bus 111a which serves to pre-program delimiter logic 113 as to the characters stored in mass storage device 111 which serve as the EOD, EOC and EOT delimiters. For example, programming logic 116 will first cause latch 9-9 (which comprises, for example a 74374 device manufactured by National) to store the inverse of the binary signal corresponding to the EOD delimiter character stored in mass storage device 111. Thus, for example, if the EOD delimiter characters stored in mass storage device 111 is a hexadecimal FF (binary 11111111) its inverse (binary 00000000) is stored in latch 9-9. This storage is performed by programming logic 116 providing on bus 111a data bits D0 through D7 equal to 00000000 and a suitable clock signal CLK to cause this data to be stored in latch 9-1. Programming logic 116 also provides an address signal of 000 on address leads A0 through A2, respectively, of bus 111a. The address signal 000 is applied to the address input leads of decoder 9-18 (which comprises, for example, a 74138 manufactured by National). Programming logic 116 also provides appropriate chip enable signals E1 through E3 to decoder 9-18, thereby enabling decoder 9-18. In response to these input signals, decoder 9-18 provides a positive going clock signal CLK 9-0 which is applied to latch 9-9. This positive going clock signal CLK 9-0 causes the data present on leads 9-1a through 9-1h (i.e., the data stored in latch 9-1 by programming logic 116) to be stored within latch 9-9. This data is stored in latch 9-9 until programming logic 116 stores another eight bit word in latch 9-9. Generally, because a given data base will not change the delimiter character such as EOD, this data need be loaded into latch 9-9 only once upon installation of the equipment. However, in order to insure reliable operation of the delimiter logic 113, it may be desirable to periodically reload latch 9-9 with a binary 00000000 in order to insure that the proper data is stored in latch 9-9 despite any incipient failures which would cause the data stored within latch 9-9 to deviate from its intended value. During the operation of the text comparator, character data is transferred from mass storage device 111 (FIG. 8) to bus 111a and, in addition to being compared by exclusive OR gate arrays 9-2a and 9-2b, is simultaneously compared with the data stored in latch 9-9 by exclusive OR gate array 9-2c to determine whether an EOD character has been transmitted on bus 111a. Thus, when an EOD character (hex FF) is transmitted on bus 111a, a logical one signal will be applied to one input lead of each exclusive OR gate 9-2c1 through 9-2c8 of exclusive OR gate array 9-2c. The data stored within latch 9-9 is continuously applied to the other input leads of exclusive OR gates 9-2c1 through 9-2c8. Thus, when an EOD character is transmitted on bus 111a, the data signals D0 through D7 applied to one input lead of exclusive OR gates 9-2c1 through 9-2c8 will be the inverse of the data which is applied by latch 9-9 to the other input lead of exclusive OR gates 9-2c1 through 9-2c8, thereby causing each exclusive OR gate 9-2c1 through 9-2 c8 to provide a logical one signal on its output lead. These output signals are in turn applied to the input leads of NAND gate 9-10, thus causing NAND gate 9-10 to provide a logical zero EOD signal on output lead 9-10a, indicating that an EOD character is present on bus 111a. Conversely, if a character other than an EOD character is transferred on bus 111a, at least one exclusive OR gate 9-2c1 through 9-2c8 receives a data signal D0 through D7 which is identical to the data which that exclusive OR gate receives from latch 9-9, and the output signal from that exclusive OR gate is a logical zero, thus causing the EOD signal from NAND gate 9-10 to be a logical one, indicating that an EOD character has not been transferred on bus 111a. In a similar manner, latch 9-11, exclusive OR array 9-2d, and NAND gate 9-12 provide an EOC signal on terminal 9-12a which indicates whether an end of chapter (EOC) character has been transferred on bus 111a. Thus, for example, if an EOC character is hexadecimal FE (binary 1111110), prior to the textual comparison process, programming logic 116 provides a data signal D7 through D0 equal to 00000001, and causes this signal to be stored in latch 9-11 by providing an A2 through A0 address signal of 001 which, together with appropriate enabling signals E1 through E3, in turn is applied to decoder 9-18, which in turn provides a positive going CLK 9-1 signal which is applied to latch 9-11. In this manner, when textual data is transferred from mass storage device 111 (FIG. 8) to bus 111a, each textual character is compared by exclusive OR gate array 9-2d with the data stored in latch 9-11, and an EOC signal is made available on output terminal 9-12a indicating whether an EOC character has been transmitted on bus 111a. In a similar manner, latch 9-13, exclusive OR array 9-2e, and NAND gate 9-14 provide an EOT signal on terminal 9-14a which indicates whether an end of chapter (EOT) character has been transferred on bus 111a. Thus, for example, if an EOT character is hexadecimal FD (binary 11111101), prior to the textual comparison process, programming logic 116 provides a data signal D7 through D0 equal to 00000010, and causes this signal to be stored in latch 9-13 by providing an A2 through A0 address signal of 010 which, together with appropriate enabling signals E1 through E3, in turn is applied to decoder 9-18, which in turn provides a positive going CLK 9-2 signal which is applied to latch 9-13. In this manner, when textual data is transferred from mass storage device 111 (FIG. 8) to bus 111a, each textual character is compared by exclusive OR gate array 9-2e and and EOT signal is made available on output terminal 9-14a indicating whether an EOT character has been transmitted on bus 111a. Naturally, for data base systems which utilize special characters to indicate EOW, EOS, and EOP, circuitry analogous to latch 9-9, exclusive OR gate array 9-2c, and NAND gate 9-10 may be used in a similar manner as these circuit elements are used to detect an EOD character. Furthermore, the programming leads of exclusive OR gate arrays 9-2a and 9-2b need not be hard wired to logical zero or logical one signals, but rather could be wired to output signals available from a memory device, if desired. Still further, one or more of latches 9-9, 9-11, and 9-13 can be replaced by hard wiring the programming input leads of exclusive OR gate arrays 9-2c, 9-2d, and 9-2e, respectively, to appropriate logical zero and logical one signals, although, as previously described, by utilizing latches 9-9, 9-11, and 9-13, the delimiter logic 113 of FIG. 9 can be utilized with any data base, regardless of the specific character which that data base uses as an EOD, EOC, and EOT character. Word Logic 112 Referring to FIG. 12, the operation of word logic 112 will now be described. FIG. 12 depicts a portion of word logic 112 which is capable of detecting a predefined string of up to eight characters. Although not shown in FIG. 12, word logic 112 includes a latch (such as a 74373 device manufactured by National) provided between mass storage device 111 (FIG. 8) and bus 111a, in order to store data output from mass storage device 111 and provide this data to the remainder of word logic 112 until the next data word has been made available by mass storage device 111. Naturally, other embodiments of this invention will become readily apparent to those of ordinary skill in the art in light of the teachings of this specification which will allow character strings of more than (or, if desired, less than eight characters to be detected. It is also to be understood that word logic 112 typically comprises a plurality of the type of circuits shown in FIG. 12, in order that a plurality of character strings may be detected simultaneously. Thus, for example, in this embodiment word logic 112 contains a plurality of sixteen circuits of the type shown in FIG. 12, and thus a plurality of sixteen separate character strings, each character string comprising as many as eight characters, may be detected simultaneously as character data is transferred from mass storage device 111 on bus 111a. Since each such circuit contained within word logic 112 is identical, the description of one such circuit as shown in FIG. 12 will fully describe the operation of word logic 112. By way of example, assume that it is desired to locate each occurrence of the word "knife" within the character data stored in mass storage device 111 (FIG. 8). Because this embodiment of word logic 112 is capable of detecting up to sixteen character strings simulaneously, "knife" will be referred to as word .0. or W.0. to distinguish from other words being detected. First, the circuit of FIG. 12 is programmed in order to be able to detect each occurrence of the word "knife." To do this, programming logic 116 (FIG. 8) sequentially stores within each character latch 17-0 through 17-7 a binary signal corresponding to the inverse of the binary signal representing each letter of the word "knife." Thus, programming logic 116 provides on bus 111a address signals A4 through A0 of 0000, together with suitable enabling signals (not shown) to enable decoder 16. These address signals are applied to decoder 16 which comprises, for example, a 74154 manufactured by National. In response to this 0000 address signal, decoder 16 provides a positive going chip enable 0 (CE0) signal, which is applied to character latch 17-0, thus causing the data bits D7 through D0 provided on bus 111a by programming logic 116 to be stored in latch 17-0. Because the letter "k" is depicted in ASCII as a binary 01101011, programming logic 116 provides a D0 through D7 signal on bus 111a of 10010100, which is stored in character latch 17-0. Next, programming logic 116 provides an address signal A4 through A0 of 0001, which, together with suitable enabling signals, cause decoder 116 to provide a positive going CE1 signal which is applied to character latch 17-1, thus causing character latch 17-1 to store the D7 through D0 signal provided by programming logic 116. At this time, programming logic 116 provides a D7 through D0 signal of 10010001, the inverse of the binary signal 01101110 which denotes the letter "n" in ASCII. In a similar manner, programming logic 116 sequentially generates address signals which, together with suitable enabling signals, cause decoder 16 to provide positive going CE2 through CE7 signals, thereby causing data words provided by programming logic 116 to be stored in character latches 17-2 through 17-7, respectively. Since the selected word is "knife",, the data which is stored in character latch 17-2 is a binary 10010110, corresponding to the inverse of the binary representation of the ASCII letter "i". The data stored within character latch 17-3 is a binary 10011001, (the inverse of the letter "f"), and the data stored within character latch 17-4 is a binary 10011010 (the inverse of the letter "e"). Because the word "knife" contains only five letters, it is unimportant what is stored in character latches 17-5 through 17-7, as the presence or absence of the characters detected by character latches 17-5 through 17-7 and their associated components will be masked by NAND gates 22-5 through 22-7, respectively, in order to have no effect on the WORD.0. output signal provided on output lead 112a-0. Output lead 112a-.0.0 comprises one of the sixteen leads (leads 112a-1 through 112a-15 not shown) forming bus 112a. Leads 112a-0 through 112a-15 provide word signals WORD.0. (W.0.) through WORD15 (W15), respectively. The masking of unneeded characters is provided as follows. After loading the required data into latches 17-0 through 17-7, programming logic 116 sets onto bus 111a an eight bit data word which defines which characters are to be masked by NAND gates 22-0 through 22-7. This eight bit mask word is stored in latch 20 (which may comprise, for example, a 74374 manufactured by National) upon receipt of a clock signal provided by decoder 21 in response to the CE8 signal from decoder 16, which is generated in response to appropriate signals from programming logic 116. Decoder 21 comprises, for example, a 74138 manufactured by National. Because "knife" contains only five characters, the eight bit mask provided by programming logic 116 and stored in latch 20 is a binary 00011111, indicating that the three characters detected by character latches 17-5 through 17-7 and their associated components are to be masked. After the programming of the character latches 17-0 through 17-7 and the masking latch 20 of the WORD.0. circuit of FIG. 12, the character latches and masking latches of the WORD1 through WORD15 circuits are programmed in a similar manner in order to allow these WORD1 through WORD15 circuits to detect additional words simultaneously with the WORD.0. circuit detecting occurrences of the word "knife". Mass storage device 111 then transfers its contents on a character-by-character basis to bus 111a. Each data bit D7 through D0 of each character transferred onto bus 111a is applied to one input lead of a plurality of eight exclusive OR gates, each such exclusive OR gate being associated with one character latch 17-0 through 17-7. Thus, the D0 bit is applied to one input lead of exclusive OR gate 18-0a associated with character latch 17-0, one input lead of exclusive OR gate 18-1a associated with character latch 17-1, . . . and one input lead of exclusive OR gate 18-7a associated with character latch 17-7. The remaining input lead of each exclusive OR gate receives the appropriate bit from its associated character latch 17-0 through 17-7. Thus, exclusive OR gate 18-0a receives the D0 signal from bus 111a and the least significant bit stored in character latch 17-0. Similarly, exclusive OR gate 18-0b receives the D1 signal from bus 111a, and the second least significant bit stored in character latch 17-0, etc. Because character latch 17-0 stores the binary inverse of the first character "k" to be detected, when the character "k" is set onto bus 111a, each exclusive OR gate 18-0a through 18-0h receives complementary input signals (i.e., one input signal is high, and the other input signals is low), and thus the output signal from each exclusive OR gate 18-0a through 18-0h is a logical one, which are in turn applied to the input leads of NAND gate 19-0, thus providing a logical zero k output signal from NAND ,gate 19-0. Conversely, if a character other than a "k" is set onto bus 111 a, at least one exclusive OR gate 18-0a through 18-0h receives identical signals on its input leads i.e. either both logical zero or both logical one), and thus that exclusive OR gate generates a logical zero output signal which causes NAND gate 19-0 to provide a logical one k output signal, indicating that the character "k" has not been detected. In a similar manner, the remaining character latches 17-1 through 17-4, and their associated exclusive OR gates and NAND gates, provide logical zero n, i, f and e signals on the output lead of NAND gates 19-1 through 19-4 when the characters "n", "i", "f", and "e", respectively, are detected. At all other times, the signals on the output lead of NAND gates 19-1 through 19-4 are logical one. The output signals from NAND gates 19-0 through 19-7 are applied to one input lead of masking NAND gates 22-0 through 22-7, respectively. Masking NAND gates 22-0 through 22-7 mask the detected character signals provided by NAND gates 19-0 through 19-7 in accordance with the masking word stored within masking latch 20. The least significant bit stored in masking latch 20 is applied to the other input lead of NAND gate 22-0, the second least significant bit stored within that masking latch 20 is applied to the other input lead of NAND gate 22-1, etc., and the most significant bit stored in masking latch 20 is applied to the other input lead of NAND gate 22-7. Because the three most significant bits stored in masking latch 20 are zeroes, and these logical zeroes are applied to one input lead of NAND gates 22-5 through 22-7, NAND gates 22-5 through 22-7 always provide logical one signals on their output leads. Thus, even though the output signals from NAND gates 19-5 through 19-7 are applied to one input lead of NAND gates 22-5 through 22-7, respectively, these signals from NAND gates 19-5 through 19-7 have no effect on the output, signals provided by NAND gates 19-5 through 19-7. Conversely, because the five least significant bits stored in masking latch 20 are logical ones, the output signals provided by NAND gates 22-0 through 22-4 will be the inverse of the signals provided by NAND gates 19-0 through 19-4, respectively. Thus, when the character "k" is set onto bus 111a, NAND gate 19-0 provides a logical zero k signal to one input lead of NAND gate 22-0, which in turn provides a logical one k output signal. In a similar manner, when the letter "n" is set onto bus 111a, NAND gate 22-1 provides a logical one n output signal; when the character "i" is set onto bus 111a, NAND gate 22-2 generates a logical one i output signal; when the character "f" is set onto bus 111a, NAND gate 22-4 generates a logical one f output signal; and when the character "e" is set onto bus 111a, NAND gate 22-5 generates a logical one e output signal. As previously described, NAND gates 22-5 through 22-7, corresponding to the detection of characters which are not of interest when searching for the character string "knife", always provide logical one output signals. The output signals from NAND gates 22-0 through 22-7 are applied to the input leads of shift registers 23-0 through 23-7, respectively. Shift register 23-0 is an eight bit shift register, shift register 23-1 is a seven bit shift register, shift register 23-2 is a six bit shift register, etc., and shift register 23-7 is a one bit shift register. Shift registers 23-0 through 23-7 are formed, for example, by the appropriate connection of a plurality of 74174 hex D-type flip flops manufactured by National. Shift registers 23-0 through 23-7 each receive a clock signal on input lead 23-7a which is provided by mass storage device 111 (FIG. 8) on bus 111a, indicating that a valid data character is present on bus 111 a. The signals provided by NAND gates 22-0 through 22-7 are received by shift registers 23-0 through 23-7, and the content of each shift register, 23-0 through 23-7 is shifted to the next most significant bit within that shift register upon receipt of each clock signal on lead 23-7a. In this manner, the output signals as provided by shift registers 23-0 through 23-7 depict the positional relationship of the detected characters. In order to provide a logical zero WORD.0. signal indicating when the word "knife" is detected, and provide a logical one WORD.0. signal when the word "knife" is not detected, shift registers 23-0 through 23-7 are used. In this example, the character string "knife.quadrature..quadrature..quadrature." is to be detected, where each ".quadrature." indicates a "don't care" character. To detect the character string "knife.quadrature..quadrature..quadrature.", the most recently detected character must be a "don't care" character, the second most recently detected character must also be a "don't care" character, the third most recently detected character must be a "don't care" character, the fourth most recently detected character must be the letter "e", the fifth most recently detected character must be a "f", the sixth most recently detected character must be an "i", the seventh most recently detected character must be an "n", and the eighth most recently detected character must be a "k". Accordingly, since the character "k" must be the eighth most recently detected character, the output signal from NAND gate 22-0, indicating when the character "k" has been detected, is applied to 8 bit shift register 23-0. Similarly, since the letter "n" must be the seventh most recently detected character, the output signal from NAND gate 22-1, which indicates when the letter "n" has been detected, is applied to the input lead of seven bit shift register 23-1, etc. When the proper sequence of characters have been detected which spell "knife.quadrature..quadrature..quadrature." the output signal from each shift register 23-0 through 23-7 is a logical one, which in turn is applied to the input leads of NAND gate 23-8, thus causing NAND gate 23-8 to provide a logical zero WORD.0. signal on output lead 112a-0, thus indicating that "knife" has been detected. At all other times, at least one output signal from shift registers 23-0 through 23-7 is a logical zero, thus causing NAND gate 23-8 to provide a logical one WORD.0. signal on output lead 112a-0, thus indicating that "knife" has not been detected. It is apparent to those of ordinary skill in the art in light of the teachings of this specification that, if desired, word logic 112 can be programmed such that programming latches 17-0 through 17-7 and their associated components detect the character string ".quadrature..quadrature..quadrature.knife", rather than "knife.quadrature..quadrature..quadrature." as described above. In this event, the masking word stored in masking latch 20 will be 11111000, indicating that the three characters detected by character latches 17-0 through 17-3 and their associated components are to be masked by NAND gates 22-0 through 22-3, respectively. In this embodiment, where the "don't care" characters precede the characters to be detected, the WORD.0. signal goes low upon receipt of the last character in the character string being detected, rather than j characters later, where j is the number of "don't care" characters in the character string being detected (i.e., j=3 for ".quadrature..quadrature..quadrature.knifes"). It is also apparent to those of ordinary skill in the art in light of the teachings of this specification that, if desired, word logic 112 can be programmed such that the programming latches 17-0 through 17-7 and their associated components detect the character string "efink.quadrature..quadrature..quadrature.". In this event, the masking words stored in masking latch 20 will be 00000111, indicating that the three characters detected by character latches 17-5 through 17-7 and their associated components are to be masked by NAND gates 22-5 through 22-7, respectively. In this event, however, shift register 23-0 is a one bit shift register, shift register 23-1 is a two bit shift register, shift register 23-2 is a three bit shift register, etc., and shift register 23-7 is an eight bit shift register. It is also apparent to one of ordinary skill in the art in light of the teachings of this specification that, if desired, word logic 112 can be programmed such that programming latches 17-0 through 17-7 and their associated components detect the characters string ".quadrature..quadrature..quadrature.efink". In this event, the masking word stored in masking latch 20 will be 11100000 indicating that the characters detected by character latches 17-0 through 17-2 and their associated components are to be masked by NAND gates 22-0 through 22-2, respectively. In this event, shift register 23-0 is a one bit shift register, etc., and shift register 23-7 is an eight bit shift register. If it is desired to detect the occurrence of either upper case or lower case letters, the sixth least significant bit received from mass storage device 111 is held high and the word latches 17-0 through 17-6 are loaded with data to cause the detection of upper case letters forming the desired word. Alternatively, the sixth least significant bit received from mass storage device 111 is held low, and the word latches 17-0 through 17-6 are loaded with data to cause the detection of lower case letters forming the desired word. In either event, both upper and lower case letters will be detected by latches 17-0 through 17-6 and their associated components, as the sixth least significant bit, which distinguishes between upper and lower case, is effectively masked. In another embodiment of this invention, the output signal from the sixth least significant exclusive nor gates 18-0b, 18-1b, . . . 16-6b, are held high, thereby effectively masking the sixth least significant bit and thus providing output signals when either upper or lower case letters are detected. Set Logic 114 FIGS. 10a through 10d form a schematic diagram of set logic 114. Although not shown in FIG. 10, set logic 114 includes a latch (such as a 74373 device manufactured by National) provided between mass storage device 111 (FIG. 8) and bus 11a, in order to store data output from mass storage device 111 and provide this data to the remainder of set logic 114 until the next data word has been made available by mass storage device 111. Set logic 114 serves to determine when a set of selected words are detected within the same sentence, paragraph, document, etc., as defined by the user's search strategy. For example, that portion of set logic 114 shown in FIG. 10a detects when a predefined set of words 0 through 3 (i.e., a user defined set of W0 through W3 signals generated by word logic 112 (shown in FIGS. 8 and 12) are detected within the same sentence or paragraph, etc. As previously described, the W0 through W3 signals are provided by word decode logic 112 (FIG. 12). Set logic 114 as shown in FIG. 12 is capable of receiving sixteen word signals (i.e., W0 through W15, although it is apparent to one of ordinary skill in the art in light of the teachings of this specification that set logic 114 can be constructed to operate on any desired number of words which are each detected, for example, by a unique one of an equal number of circuits as shown in FIG. 12 which form word logic 112. Furthermore, as will now be fully described, set logic 114 is capable of forming a plurality of sets, each set being generated by a plurality of four words. It is readily apparent to one of ordinary skill in the art in light of the teachings of this specification that set logic 114 can be constructed in order to form any desired number of sets, each set being generated in response to any desired number of words. Because the embodiment of set logic 114 depicted in FIG. 10 is formed of four substantially identical subcircuits (one such subcircuit being substantially shown in each of FIGS. 10a through 10d), the following description of the operation of the subcircuit of FIG. 10a is sufficient to describe the operation of the entire set logic 114 depicted in FIG. 10a through 10d. Referring to FIG. 10a, leads 9-1a through 9-1h are connected to bus 111a to receive the data signals D0 through D7, respectively. The delimiter signals (EOT, EOC, EOD, EOP, EOS, and EOW) are received from delimiter logic 113 (FIGS. 8 and 9) on bus 113a. The W0 through W3 signals are received from appropriate portions of word logic 112 (FIGS. 8 and 12) and applied to the SET 3 input leads of SR latches 10-7a through 10-7d, respectively. Latches 10-7a through 10-7d serve to store data indicating when words 0 through 3, respectively, have been detected by word logic 112. SR latches 10-7a through 10-7d each comprise, for example, one of the four latches contained within a DM74279 device manufactured by National. Multiplexer 10-3 selects the appropriate delimiter signal or ground, as will be fully described later) and, in response thereto, provides a RESETA signal which is applied to the RESET (R) input leads of latches 10-7a through 10-7d, causing latches 10-7a through 10-7d to be reset to store logical zeros when the RESETA signal is a logical zero. Multiplexer 10-3 comprises, for example, a 74151 device manufactured by National. Latch 10-1 stores information provided by programming logic 116 (FIG. 8) on bus 111 a during the programming of the text comparator prior to executing a textual search strategy. Latch 10-1 comprises, for example, a 74373 device manufactured by National. Latch 10-8 (for example a 74374 device) serves to store masking information which is provided by programming logic 116 (FIG. 8) to latch 10-8 via bus 111a during the programming of the text comparator of this invention prior to the execution of a user-defined textual comparison search strategy. Logical AND circuitry 10-36 combines the W0 through W3 signals in a logical AND and a logical NAND fashion and provides the SET1AND (S2AND) and the SET2AND (S1AND) signals on leads 10-14a and 10-16a, respectively. Similarly, the logical OR circuitry 10-37 combines the W0 through W3 signals in a logical OR and a logical NOR fashion and provides the SET1OR (S1OR) and the SET1OR (S1OR) signals on leads 10-13a and 10-15a, respectively. Logical AND circuitry 10-36 and logical OR circuitry 10-37, when masked by the masking data stored in masking latch 10-8, provide output signals which indicate whether the word 0 through 3 have been detected between two occurrences of the signal selected by decoder 10-3, thereby providing output signals indicating whether words 0 through 3 have been detected in the same sentence, for example. In order to program set logic 114, programming logic 116 (FIG. 8) first sets onto the D0 through D7 data lines of bus 111a the information which is to be stored in latch 10-1 Programming logic 116 then provides the appropriate A0 through A2 and E1 through E3 signals, thereby causing mu1tiplexer 9-18 (FIG. 9a) to generate a positive going CLK10-1 signal, which is applied to latch 10-1, thereby causing the D0 through D7 data on bus 111a to be stored within latch 10-1. The three least significant bits stored in latch 10-1 are applied to the address input leads of multiplexer 10-3, and similarly the next three least significant bits stored in latch 10-1 are applied to the address input leads of multiplexer 10-4. The three address signals applied to multiplexer 10-3 define which delimiter signal (or ground, if the input lead of multiplexer 10-3 which is connected to ground, as shown, is selected by multiplexer 10-4 in response to the address signals provided thereto by latch 10-1) are to generate the RESETA signal on the output lead of multiplexer 10-3. Ground is selected by multiplexor 10-3 in order to generate a RESETA signal when desired to reset the contents of flip-flops 10-7a through 10-7d, for example on power-up of the set logic 114. Next, programming logic 116 (FIG. 8) sets onto the D0 through D7 data leads of bus 111a the masking data which is to be stored in masking latch 10-8. Programming logic 116 then sets onto bus 111a the A0 through A2, and the E1 through E3 signals which cause demultiplexer 9-18 (FIG. 9a) to generate a positive going CLK10-2 signal, which in turn is applied to latch 10-8, thereby causing the data on leads D0 through D7 of bus 111a to be stored in latch 10-8. If required by the user defined search strategy, programming logic 116 then repeats these steps in order to program the remaining latches 10-2, 10-9, 10-10, and 10-11 of set logic 114. Assume, for example, that it is desired to locate within the textual information stored in mass storage device 111 all instances where the word "knife" (WORD0) occurs within the same sentence as the word "blood" (WORD1). Programming logic 116 programs word logic 112 as previously described, to cause WORD0 to be the word "knife" and WORD1 to be the word "blood", thus causing a low W0 signal and a low W1 signal to be generated upon detection of the words "knife" and "blood", respectively. Because it is desired to locate these two words only within the same sentence, the latches 10-7a through 10-7d must be reset upon receipt of the EOS delimiter signal. Accordingly, programming logic 116 stores within latch 10-1 three least significant bits which, when applied to the address input leads of multiplexer 10-3, cause multiplexer 10-3 to select the EOS signal applied via bus 113a to generate the RESETA signal. Furthermore, because only WORD0 and WORD1 are of interest in this particular search, programming logic 116 causes to be stored in masking latch 10-8 an eight bit mask which will cause the W2 and W3 signals to have no effect on the output signals generated by the logical AND logic circuitry 10-36. Because in this example the words "knife" and "blood" are to be combined a logical AND operation, the output signals from logical OR circuitry 10-37 are not used, and thus the value of the four most significant bits stored in masking latch 10-8 is unimportant. However, in order to cause logical, AND circuitry 10-36 to provide S1AND and S1AND output signals generated by the logical operation S1AND=(W0 AND W1) the four least significant bits (D4 through D0) provided by programming logic 116 and stored in latch 10-8 must be equal to 1100, respectively. In this manner, the least significant bit stored in masking latch 10-8 is a logical zero, which is applied to one input lead of NOR gate 10-12h. With a logical zero signal applied to one input lead of NOR gate 10-12h, the other input lead of NOR gate 10-12h, which is connected to the Q output lead of flip flop 10-7a, controls the output signal from NOR gate 10-12h. Similarly, with the second least significant bit being a logical zero, which is applied to one input lead of NOR gate 10-12g, the other input lead of NOR gate 10-12g, which is connected to the Q output lead of flip flop 10-7b, causes NOR gate 10-12g to generate its output signal in response to the W1 signal stored in flip flop 10-7b. Because the third and fourth least significant bits stored in masking latch 10-8 are logical ones and are each applied to one input lead of NOR gates 10-12f and 10-12e, respectively, NOR gates 10-12e and 10-12f always provide logical zero output signals, indicating that the W2 and W3 signals stores in latches 10-7c and 10-7d, respectively (and thus WORD2 and WORD3) are unimportant and form no part of the logical operation performed by logical AND circuitry 10-36. The output signals from NOR gates 10-12e through 10-12h are applied to the input leads of NOR gate 10-14. Because the output signals from NOR gates 10-12e and 10-12f are always a logical zero, they will have no effect on the output signal generated by NOR gate 10-14. However, only when the output signals generated by NOR gates 10-12g and 10-12h are logical zeros, indicating that logical ones are stored in both shift registers 10-7a and 10-7b (i.e., logical zero W0 and W1 signals have been received and thus logical one W0 and W1 signals stored in flip flops 10-7a and 10-7b respectively, since the last RESETA signal) will the S1AND output signal from NOR gate 10-14 be a logical one, indicating that the words "knife" and "blood" have both been located in a single sentence. As previously described, the RESETA signal is, in this example, generated by multiplexer 10-3 in response to the EOS signal. Accordingly, the data stored in latches 10-7a and 10-7d is reset to logical zeros in response to a logical zero RESETA signal. If after a logical zero RESETA signal the word "knife" is detected, a logical zero W0 signal is applied to the 3 input lead of flip-flop 10-7a, thus causing a logical one to be stored in flip flop 10-7a. This generates a logical one Q output signal from flip-flop 10-7a which is applied to one input lead of NOR gate 10-12h, thus causing NOR gate 10-12a to generate a logical zero output signal. However, because the word "blood" (WORD1) has not been detected, a logical zero is still stored in shift register 10-7b, and shift register 10-7b provides a logical zero Q output signal which is applied to one input lead of NOR gate 10-12g. This, together with the logical zero input signal applied to its other input lead from latch 10-8, causes NOR gate 10-12g to provide a logical one output signal, thus causing NOR gate 10-14 to generate a logical zero SETlAND output signal, indicating that the words "knife" and "blood" have not both detected in the same sentence. If an EOS signal is now generated prior to the detection of the word "blood", multiplexer 10-3 generates a logical zero RESETA signal and the shift registers 10-7a through 10-7d are reset to store logical zeros, thereby preventing an erroneous output signal from logical AND circuitry 10-36 should the word "blood" be detected in a subsequent sentence which does not also contain the word "knife". In a similar manner, if the search strategy requires the location of all occurrences of either the word "knife" or "blood", in the same sentence, the logical OR circuitry 10-37 is utilized. In this event, the four most significant masking bits stored in masking latch 10-8 by programming logic 116 are 0011. With the most significant bit from masking latch 10-8 being applied to one input lead of NAND gate 10-12a, NAND gate 10-12a always generates a logical one output signal, and thus the W3 signal stored in shift register 10-7d has no effect on the output signals generated by OR logic circuitry 10-37. Similarly, because the second most significant masking bit stored in masking larch 10-8 is applied to one input lead of NAND gate 10-12b, NAND gate 10-12b always generates a logical one output signal, and thus the W2 signal stored in shift register 10-7c has no effect on the output signal generated by logical OR circuitry 10-37. The third and fourth most significant masking bits stored in masking latch 10-8 are logical ones, and are applied to one input lead of NAND gates 10-12c and 10-12d, respectively. These logical one signals cause the output signals from NAND gates 10-12c and 10-12d to be generated in response to the W0 and W1 signals stored in flip-flops 10-7a and 10-7b, respectively, and applied to the other input lead of NAND gates 10-12d and 10-12c, respectively. If the word "knife" is detected, a logical zero W0 signal is generated by word logic 112, and thus a logical one W0 signal is stored in flip-flop 10-7a. This logical one W0 signal causes NAND gate 10-12d to generate a logical zero output signal which causes NAND gate 10-13 to generate a logical one SlOR signal on output lead 10-13a (and causes inverter 10-5 to generate a logical zero S1OR signal on output lead 10-15a), thus indicating that the word "knife" has been detected. Similarly, if the word "blood" is detected, a logical zero W1 signal is generated by word logic 112 and thus a logical one W1 signal is stored in flip flop 10-7b. This logical one W1 signal causes NAND gate 10-12c to generate a logical zero output signal, which in turn causes NAND gate 10-13 to generate a logical one S1OR signal on output lead 10-13a (and causes, inverter 10-15 to generate a logical zero S1OR signal on output lead 10-15a), thus indicating that the word "blood" has been detected. If neither the word "knife" or the word "blood" is detected, flip flops 10-7a through 10-7d will each store a logical zero signal, NAND gates 10-12a through 10-12d each generate logical one output signals, NAND gate 10-13 generates a logical zero S1OR signal, and inverter 10-15 generates a logical one S1OR signal), thus indicating that neither "knife" or "blood" has been detected. Set Combination Logic 115 Set combination logic 115 serves to combine the set signals provided by set logic 114 (FIG. 10) in accordance with a user defined search strategy. Although not shown in FIG. 11, set combination logic 115 includes a latch (such as a 74373 device manufactured by National) provided between mass storage device 111 (FIG. 8) and bus 111a, in order to store data output from mass storage device 111 and provide this data to the remainder of set combination logic 115 until the next data word has been made available by mass storage device 111. Set combination logic 115 includes latches 11-2 and 11-3 (which comprise, for example 74374 devices manufactured by National) which store set combination words provided by programming logic 116 in response to the user defined search strategy. Latches 11-2 and 11-3 store this information in response to the CLK11-6 and CLK11-7 signals, respectively, generated by decoder 9-17 (FIG. 9), as previously described). Set combination logic 115 also includes RS flip-flops 11-1a through 11-1h which comprise, for example, 74279 devices manufactured by National Shift registers 11-1a through 11-1h store the S0OR, S1AND through S3OR, S3AND signals provided by set logic 114 (FIG. 10). Flip-flops 11-1a through 11-1h are reset by reset signal 11a provided by programming logic 116 (FIG. 8) when a search strategy is begun. Latch 11-2 stores the masking word provided by programming logic 116, in order to cause NAND gates 11-2a through 11-2h and their associated components to combine the set signals stored in flip flops 11-1a through 11-1h in a logical OR function. For example, if it is desired to combine the S0OR and S0AND signals, programming logic 116 (FIG. 8) causes latch 11-2 to store D7 through D0 signals of 00000011, where the logical ones indicate which set signals are to be combined in the logical OR function. Thus, latch 11-2 provides logical zero signals to one input lead of NAND gates 11-2a through 11-2f, thereby causing the output signals from these NAND gates 11-2a through 11-2f to be logical ones. Latch 11-2 also provides logical one signals to one i | ||||||
