US20090126020A1 - Engine for rule based content filtering - Google Patents
Engine for rule based content filtering Download PDFInfo
- Publication number
- US20090126020A1 US20090126020A1 US12/266,362 US26636208A US2009126020A1 US 20090126020 A1 US20090126020 A1 US 20090126020A1 US 26636208 A US26636208 A US 26636208A US 2009126020 A1 US2009126020 A1 US 2009126020A1
- Authority
- US
- United States
- Prior art keywords
- content
- rule
- operator
- boolean
- container
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Abandoned
Links
- 238000001914 filtration Methods 0.000 title claims description 70
- 230000006870 function Effects 0.000 claims abstract description 28
- 230000014509 gene expression Effects 0.000 claims description 144
- 230000009471 action Effects 0.000 claims description 88
- 238000000034 method Methods 0.000 claims description 88
- 238000003780 insertion Methods 0.000 claims description 16
- 230000037431 insertion Effects 0.000 claims description 16
- 238000012423 maintenance Methods 0.000 claims description 4
- 238000012217 deletion Methods 0.000 claims description 2
- 230000037430 deletion Effects 0.000 claims description 2
- 230000006978 adaptation Effects 0.000 abstract description 29
- 230000008569 process Effects 0.000 description 46
- 230000000875 corresponding effect Effects 0.000 description 27
- 241000700605 Viruses Species 0.000 description 18
- 230000002155 anti-virotic effect Effects 0.000 description 15
- 238000012545 processing Methods 0.000 description 9
- 238000010276 construction Methods 0.000 description 6
- 238000012216 screening Methods 0.000 description 5
- 150000001875 compounds Chemical class 0.000 description 4
- 238000013479 data entry Methods 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 3
- 238000009434 installation Methods 0.000 description 3
- 230000005236 sound signal Effects 0.000 description 3
- 230000003750 conditioning effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 238000013138 pruning Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002250 progressing effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/02—Knowledge representation; Symbolic representation
- G06N5/022—Knowledge engineering; Knowledge acquisition
- G06N5/025—Extracting rules from data
Definitions
- the present invention relates to multimedia messaging services and, in particular, to an engine for rule based content filtering.
- Emerging versatile telecommunications services enable communications devices to exchange data containers each having multiple components of different types.
- a component may include data representing a text, an image, an audio signal, or a video signal.
- Sophisticated terminal devices for handling such services are evolving rapidly leading to multiple “generations” of terminal devices separated by a relatively short time.
- a terminal device transmitting a data container would generally be unaware of the characteristics and capability of the receiving terminal device (or receiving terminal devices in the case of multi-cast communications). This requires that a facility be provided to ensure proper detection of the content of the data container in its entirety or proper detection of specific components thereof, and to notify a recipient terminal device of any changes made to the original container, as described in co-pending U.S. application of Ser. No. 12/238,390, filed on Sep. 25, 2008, the contents of which are incorporated herein by reference.
- communicating multiple components each optionally having respective attachments further increases exposure to malicious insertions, such as viruses.
- the exposure of containers to intrusion necessitate that a content-filtering facility be provided.
- an engine for editing content of containers comprising:
- a network interface for receiving said containers from clients and directing each container to a respective controller from among a plurality of controllers for identifying and parsing said containers;
- a memory device for storing:
- each transcoder for applying at least one of said encoded rules to a subset of said containers.
- the engine further comprises:
- the engine further comprises a sorting module, comprising computer readable instructions stored in a computer readable storage medium, coupled to said network interface, for sorting containers into container types, each container type corresponding to a protocol according to which a container is formulated, and directing containers of a specific type to a specific controller from among said plurality of containers.
- a sorting module comprising computer readable instructions stored in a computer readable storage medium, coupled to said network interface, for sorting containers into container types, each container type corresponding to a protocol according to which a container is formulated, and directing containers of a specific type to a specific controller from among said plurality of containers.
- the engine further comprises a controller-load-balancing module, comprising computer readable instructions stored in a computer readable storage medium, coupled to said operation manager, said controller-load-balancing module comprising means for dynamic assignment of transcoders to controllers according to a time-varying flow rate of said containers.
- a controller-load-balancing module comprising computer readable instructions stored in a computer readable storage medium, coupled to said operation manager, said controller-load-balancing module comprising means for dynamic assignment of transcoders to controllers according to a time-varying flow rate of said containers.
- the engine further comprises a transcoder-load-balancing module coupled to said each controller for equitably assigning container editing requests among transcoders assigned to said each controller.
- the engine further comprises a blade server hosting said each controller and said respective subset of said transcoders, said blade server comprising:
- the engine further comprises:
- the transcoder-service module further comprises computer readable instructions stored in a computer readable storage medium, which, when executed, cause a core of said processor to:
- the program registry comprises computer readable instructions which, when executed, causes a core of said processor to:
- the program storage medium comprises:
- a method of filtering a data container having multiple components comprising:
- the method further comprises performing a further editorial function based on a single binary condition.
- the method further comprises arranging said Boolean expressions in an order according to which an indicator resulting from executing a Boolean expression conditionally precludes execution of at least one subsequent Boolean expression.
- the method as described above further comprises determining said Boolean expressions according to:
- the step of performing the editorial function comprises one of:
- a method of editing content of a data container using a computing device comprising:
- the set of descriptors comprises at least one of the following: a size of said content; a content family from among a set of predefined content families; an encoding method; and a priority designation.
- the set of operators comprises one or more of the following: unary operators; binary operators; arithmetic operators; comparison operators; logical operators; set operators; and user-defined operators.
- the method further comprises entering said set of descriptors, said set of criteria, said set of operators, and said set of Boolean expressions through a graphical user interface comprising computer readable instructions stored in a memory of said computing device.
- the method further comprises selecting said content to include a portion of said data container.
- a system for filtering content of multimedia data containers comprising:
- the system further comprises at least one of the following modules, each module comprising computer readable instructions stored in a computer readable storage medium:
- the system further comprises a module, comprising computer readable instructions stored in a computer readable storage medium, for performing the following: selecting specific rules each specifying a subset of filters comprising at most a preset number of filters; evaluating, for each of the specific rules, the Boolean expression of a subset of filters for all values of the subset of filters to produce an array of 2 ⁇ bits, ⁇ >1 being a number of filters in the subset of filters; and storing the array of bits in a memory device.
- a module comprising computer readable instructions stored in a computer readable storage medium, for performing the following: selecting specific rules each specifying a subset of filters comprising at most a preset number of filters; evaluating, for each of the specific rules, the Boolean expression of a subset of filters for all values of the subset of filters to produce an array of 2 ⁇ bits, ⁇ >1 being a number of filters in the subset of filters; and storing the array of bits in a memory device.
- the present invention provides a method of filtering content of a data container.
- the method comprises specifying a set of binary conditions, specifying a set of operators, forming a leaf vector, and forming a node vector.
- the set of binary conditions characterize the content.
- One of the operators is designated a null successor, while each other operator is designated a successor from within the set of operators.
- the leaf vector comprises N>1 leaf records. Each leaf record has a leaf operator from among the set of operators and a respective subset of the binary conditions.
- the node vector has N node records, each having a node-operator field and a node-state field.
- Each leaf operator is applied to respective binary conditions and a result is placed in the node-state field of a node record. A successor of each leaf operator is then placed in the node-operator field of the node record.
- the node vector After processing each leaf record, the node vector is processed. Node records having a common operator are identified and replaced by a combined record. The common operator is applied to entries of the node-state fields of the identified node records and the resulting state is placed in the node-state field of the combined record. A successor of the common operator is placed in the node-operator field of the combined record.
- a content index is determined as the resulting state of applying a common operator subject to the condition that the successor of the common operator is a null successor.
- the method may keep track of the number of node records of the node vector after combining node records of a common operator, and the content index is determined as the resulting state corresponding to a number of node records equal to one.
- the method further comprises a step of performing a specified editing action according to a value of the content index.
- the invention provides a method of filtering content of a data container based on predetermining a decision vector.
- the method comprises defining a set of binary conditions where each binary condition is a function of a selected descriptor of the content and a respective criterion of the descriptor; defining a set of Boolean expressions and corresponding content-filtering actions; selecting a Boolean expression of specified ⁇ binary conditions represented as a string of ⁇ bits, ⁇ >1; and evaluating the Boolean expression for each of 2 ⁇ values of the string to produce a decision vector of 2 ⁇ entries, each entry being a state of a content metric corresponding to one of the 2 ⁇ values of the string;
- values of the specified p binary conditions are determined according to content of the data container.
- the value of the resulting string of ⁇ bits is then used to index the decision vector to acquire a value of the Boolean expression which determines whether a content-filtering action need be applied.
- the Boolean expression may be acquired in an algebraic format having Boolean operators, operands, and delimiters.
- the Boolean expression is then evaluated by examining the Boolean expression to identify a simple pattern, the simple pattern enclosing a Boolean operator and two operands between two delimiters. Provided a simple pattern is found, the Boolean operator is applied to the two operands to determine a binary value of the pattern and the simple pattern, together with the two delimiters, is replaced with the binary value.
- the process of examining the Boolean expression to detect a simple pattern is repeated until the Boolean expression is reduced to a single binary value (“true” or “false”) which determines whether to apply an editing action or not.
- the Boolean expression may be acquired in a form of a tree structure having a plurality of nodes.
- the Boolean expression is then evaluated successively evaluating the nodes.
- a tree template having a plurality of records is created. Each record corresponds to a respective node and has four fields for a first operand, a second operand, a current operator, and a successor record. Starting with a first record and proceeding sequentially towards a last record, an operator of a current record is applied to respective binary values determined from a current value of the string to produce a new binary value. If the current record is a last record, the new binary value is the value of the Boolean expression. If the current record is an intermediate record, the new binary value is placed in an operand field of the successor record.
- FIG. 1 illustrates a network supporting service controllers and editing engines for filtering and adapting data containers communicated through the network, in accordance with an embodiment of the present invention
- FIG. 2 illustrates an editing engine comprising controllers and transcoders, in accordance with an embodiment of the present invention
- FIG. 3 illustrates exemplary structures of a multimedia container, content descriptors of a container component, and a content filter, in accordance with an embodiment of the present invention
- FIG. 4 illustrates algebraic forms of Boolean expressions associated with a set of rules applicable to a data container, in accordance with an embodiment of the present invention
- FIG. 5 illustrates basic components of a content-filtering process, in accordance with an embodiment of the present invention
- FIG. 6 illustrates a process of deriving descriptors of container content, in accordance with an embodiment of the present invention
- FIG. 7 illustrates a system for content filtering, in accordance with an embodiment of the present invention
- FIG. 8 illustrates a system similar to the system of FIG. 7 adapted for containers having multiple components, in accordance with an embodiment of the present invention
- FIG. 9 details a content-filtering process, in accordance with an embodiment of the present invention.
- FIG. 10 illustrates a method of evaluating a Boolean expression of a rule, in accordance with an embodiment of the present invention
- FIG. 11 illustrates a first exemplary rule-tree structure for encoding a filtering rule, in accordance with an embodiment of the present invention
- FIG. 12 illustrates a first data structure for encoding the rule-tree structure of FIG. 11 ;
- FIG. 13 illustrates a second exemplary rule-tree structure for encoding a filtering rule, in accordance with an embodiment of the present invention
- FIG. 14 illustrates the first data structure of FIG. 12 applied to the second exemplary rule-tree of FIG. 13 ;
- FIG. 15 illustrates a process of applying the first data structure exemplified in FIG. 12 and FIG. 14 , in accordance with an embodiment of the present invention
- FIG. 16 illustrates a second data structure for encoding a rule tree, in accordance with an embodiment of the present invention
- FIG. 17 illustrates a process of applying the second data structure exemplified in FIG. 16 , in accordance with an embodiment of the present invention
- FIG. 18 illustrates a process of using a rule tree to determine a rule result, in accordance with an embodiment of the present invention
- FIG. 19 details a step of forming a leaf vector associated with the process of FIG. 18 , in accordance with an embodiment of the present invention
- FIG. 20 illustrates a method of preprocessing Boolean expression for fast run-time rule execution, in accordance with an embodiment of the present invention
- FIG. 21 illustrates an exemplary implementation of the method of FIG. 20 ;
- FIG. 22 illustrates a process of data entry relevant to filter definitions and rule definitions, in accordance with an embodiment of the present invention
- FIG. 23 illustrates a process of sequential filtering of components of a multimedia container
- FIG. 24 illustrates a process of applying multiple rules for content filtering, in accordance with an embodiment of the present invention
- FIG. 25 illustrates a graph depicting interdependence of rules determining content-filtering actions, in accordance with an embodiment of the present invention
- FIG. 26 illustrates modules of an operation manager of the engine of FIG. 2 , in accordance with an embodiment of the present invention
- FIG. 27 illustrates modules of a transcoder of the engine of FIG. 2 , in accordance with an embodiment of the present invention.
- FIG. 28 illustrates modules of a transcoder of the engine of FIG. 2 , in accordance with an embodiment of the present invention.
- Multi-Media Service The term is used colloquially to refer to multi-content communication services where information contents of different forms such as text, audio signals, video signals, images, presentations, etc., are exchanged among terminals through a network. Encoded information transferred from one terminal to another is typically arranged in a single data stream with time-interleaved segments corresponding to the different information contents.
- a container is a computer file stored on a computer readable medium and transmitted over a computer network.
- the container is structured to contain various types of data.
- the container may support multiple text, audio, and video streams with synchronization information to enable coordinated play back of various streams.
- Container component A container includes sections, each comprising data encoded in a specific form, such as a text, audio data, image data, or video data.
- the term container component refers to data in one section.
- a container component may be referenced as a “component” for brevity. In a multimedia messaging system, a component is also known as “media”.
- Container screening refers to a process of examining the content of a container, including all components, to ensure absence of any undesirable insertions, especially harmful insertions.
- Container adaptation refers to a process of modifying the form of a container component found to be incompatible with the decoding capability of a respective receiver. If it is not feasible to present a container component to suit a receiver, the container component may be deleted. A container-adaptation process is receiver specific while the process of container screening is independent of the type of intended receiver.
- Container editing refers to the combined processes of container screening and container adaptation.
- Container conditioning The term may be used synonymously with “container editing”. However, container conditioning also appends an appropriate notification with a container, even when a container is not modified.
- a transcoder is a device, which performs direct digital-to-digital translation of encoded information to enable an information record of one format to be reproduced in a different format suitable for a specific receiver.
- FIG. 1 illustrates a network 140 providing a path from a transmitting device 120 to a receiving device 160 , hereinafter referenced as transmitter 120 and receiver 160 .
- Network 140 supports service controllers 103 and editing engines 106 , in addition to numerous other hardware terminal devices of different types.
- Transmitter 120 sends containers to receiver 160 , where a container may include data of different content type such as encoded text, audio signals, still images, animation (rapid display of images), and video signals.
- a container may be directed to a service controller 103 which, in turn, directs the container to an editing engine 106 for examining the container and, where needed, editing the content of the container.
- An editing process includes data screening to ensure absence of any undesirable insertions, especially harmful insertions, content modifications to meet specific requirements, and content adaptation to be compatible with the decoding capability of a respective receiver.
- FIG. 2 illustrates an editing engine 106 .
- a network interface 210 receives containers from clients through a link 204 .
- a container is directed to one of m>1 controllers 240 , individually identified as 240 ( 1 ), 240 ( 2 ), . . . , 240 ( m ).
- Controllers 240 may be implemented as a distinct hardware entity or share a computing device hosting a number of transcoders 280 as will be described below.
- Controllers 240 are protocol specific, each being programmed to handle containers formed according to a respective protocol. Controllers handling a specific protocol are said to be of the same controller type.
- the controllers may be grouped into controller groups, each controller group handling containers formulated according to the same protocol.
- An editing engine 106 may have controllers of different types. However, an entire editing engine 106 may be configured to have controllers of the same type.
- the editing engine 106 may also have a load-balancing module 290 .
- the editing engine 106 includes a number of transcoders 280 , individually identified as 280 ( 1 ), 280 ( 2 ), . . . , 280 ( n ).
- the primary function of the transcoders 280 is to perform direct digital-to-digital translation of encoded information to enable an information record of one format to be reproduced in a different format suitable for a specific receiver.
- a transcoder may also perform processes of content filtering together with content adaptation.
- a number of selected transcoders 280 is assigned to each controller 240 , together forming a control assembly. For example, in FIG. 2 , controller 240 ( 1 ) and transcoders 280 ( 1 ) to 280 ( 5 ) form one control assembly installed on a respective computing device.
- Controller 240 ( m ) and transcoders 280 ( n - 2 ) to 280 ( n ) form another control assembly installed on another computing device.
- a control assembly is preferably installed on a server unit, also called a “blade server”, which is a single circuit board supporting processors and memory devices.
- a processor 220 hosts a network interface 210 and an operation manager 230 .
- Network interface 210 receives containers from clients communicatively coupled to network 140 ( FIG. 1 ).
- An operation manager 230 comprises computer readable instructions stored in a computer readable storage medium for performing operation, administration, and maintenance functions.
- a service controller 103 may receive containers and send container editing requests to one of the editing engines 106 .
- Processor 220 also hosts a graphical user interface (not illustrated), which comprises computer readable instructions stored in a computer readable storage medium, coupled to operation manager 230 , for entering an array of encoded rules and for assigning to each controller 240 a respective subset of transcoders.
- Configuration memory device 260 stores identifiers of transcoders assigned to each controller.
- the rules governing the content filtering process may be stored as a common rule file stored in a rules memory 225 which is accessed by each transcoder 280 .
- each computing device (server unit) hosting a controller and associated transcoders may store a relevant subset of the rules file.
- FIG. 3 illustrates a container having multiple components 320 , individually identified as 320 ( 1 ), 320 ( 2 ), etc.
- a component 320 may contain a text, an audio recording, an encoded image, a video recording, and any of other content types.
- the content of a component is characterized using a set 330 of descriptors 332 individually identified as 332 ( 1 ), 332 ( 2 ), . . . 332 ( j ), and 332 (D), D being a total number of descriptors.
- Content descriptors are defined according to several attributes such as content type, identifier (name), extension, digital signature, cryptographic functions, priority, and file size. Descriptors may be added or deleted as content-filtering requirements vary with the evolving art of multimedia telecommunications.
- characteristics of the content of a container component are represented as a set of binary variables, each binary variable determining whether the content meets a specific criterion.
- the value of a content descriptor of a received container is determined by examining the content of the container. A transcoder performing this function is therefore aware of the format of the received container and implications of a protocol according to which the container is formulated.
- the value of a characterizing binary variable is determined by applying an operator 344 to two operands; a value of the content descriptor ( 342 ) and a corresponding criterion 346 entered by an installer (a user) of the content-filtering system.
- the operator 344 and the two operands 342 and 346 are said to form a filter 340 (also called a content-condition or simply a condition).
- a filter 340 also called a content-condition or simply a condition.
- the content of a container component is characterized by a set of filters, each having a value of “true” or “false”.
- Editing a container before adaptation to suit a receiver is based on a set of rules, each rule determining an editing action such as deleting the entire content, deleting malicious insertions found in the content, or removing an attachment of the content.
- a rule is a function of a respective subset of the filters. Having selected the filters to be binary variables, the function defining a rule is preferably formulated as a Boolean expression of the subset of filters.
- an installer (a user) of a system for content filtering defines a rule by a subset of filters, a Boolean expression, and an action to be performed according to an outcome executing the Boolean expression.
- FIG. 4 illustrates algebraic forms of Boolean expressions associated with a set of four rules, stored in a rule vector 420 , applicable to a component of a data container.
- the same set of rules may also be applied to at least one other component of the rule filter.
- a first rule, Rule- 1 is defined by a single filter (size>30000), where the content descriptor is the size of the component, the operator is “GREATER THAN” and the criterion is 30000 (reference numeral 440 ).
- the respective action, if the rule result is Boolean “true” is to drop the component and terminate processing of the remaining rules for the component under consideration.
- a second rule, Rule- 2 is defined by a Boolean expression 450 of two filters (size>5000) and (family ⁇ message).
- the descriptor of the first filter is “size”, the criterion is “5000”, and the operator is “GREATER THAN”.
- the descriptor of the second filter is “family”, the criterion is “message”, and the operator is “NOT EQUAL”.
- the Boolean expression contains a single operator “OR”.
- the action associated with Rule- 2 is the same as that of Rule- 1 .
- the descriptor of the first filter is “size”, the criterion is “25000”, and the operator is “GREATER THAN”.
- the descriptor of the second filter is “content-type”, the criterion is “image/wbmp”, and the operator is “EQUAL”.
- the descriptor of the third filter is “content-type”, the criterion is “image/png”, and the operator is “EQUAL”.
- the Boolean expression contains two operators “AND” and “OR”.
- the action of Rule- 3 is the same as the action of Rule- 1 . It is noted that “wbmp” refers to Wireless Bitmap (Wireless Application Protocol, WAP, graphic format), and “png” refers to “Portable Network Graphics”.
- FIG. 5 illustrates the basic components of a data acquisition sub-system incorporated in operation manager 230 of FIG. 2 and comprising a user interface 520 , a filter-creating module 530 for acquiring filter definitions, a rule-construction module 540 for acquiring rule definitions, a memory division 550 for storing filter definitions, and a memory division 560 for storing rule definitions (rule structures).
- the user interface 520 enables an installer (a user) to provide input data 512 to define a set of filters and a set of rules.
- the filter-creation module 530 comprises computer readable instructions stored in a computer readable storage medium, which, when executed, cause a processor to prompt the installer to enter content-descriptor definitions, a criterion for each definition, and an operator.
- the values of the descriptors are determined according to the content of a received container.
- the rule-construction module 540 contains computer-readable instructions stored in a computer readable storage medium, which, when executed, cause a processor to prompt the installer to enter a Boolean expression for each rule, and select an action from a set of predefined actions.
- the computer-readable instructions also cause the processor to parse the Boolean expression and determine a sequence of executing terms of the expression.
- the filter definitions are stored in a memory division 550 of a memory device, and the rule definitions are stored in a memory division 560 of the same memory device, or of any other memory device.
- FIG. 6 illustrates a process of determining values of content descriptors of a received container 612 using definitions of the content descriptors stored in memory division 550 .
- the received container 612 is parsed in step 620 to identify the components of the container.
- Each component is analyzed in step 640 and in step 650 the results are paired with content-descriptor definitions read from memory division 550 .
- FIG. 7 illustrates the overall organization of a system for content filtering in accordance with an embodiment of the present invention.
- a memory 710 stores data for all relevant filters.
- Each filter is defined by an operator from a set of operators 740 determined by module 530 of FIG. 5 , a content descriptor from a set of content descriptors 720 are determined in step 650 of FIG. 6 , and a descriptor criterion from a set of descriptor criteria 730 determined in module 530 of FIG. 5 .
- the binary value of each filter (“true” or “false) is stored in a memory device 750 for use in executing a set of rules defined in module 540 of FIG. 5 .
- Each rule is defined by a subset of filters, a Boolean expression, and an action.
- a memory 770 stores encoded Boolean expressions determined in module 540 of FIG. 5 according to system installer (user) input.
- a memory 760 stores identifiers of filters used in each rule and respective Boolean expressions.
- a memory 780 stores indications of editing actions to be performed subject to respective results of evaluating the Boolean expressions. The execution of each Boolean expression yields a binary result and a respective editing action. Upon completion of an editing action, the edited content is placed in a memory 790 .
- FIG. 7 illustrates the system for content filtering, according to an embodiment of the invention, as applied to a single component
- FIG. 8 illustrates the system for content filtering of FIG. 7 as applied to k>1 container components.
- a memory device 810 stores data of all relevant filters of each of the k container components. The data pertinent to each filter is individually identified as 812 ( 1 ) to 812 ( k ). The components of the container are processed sequentially. The results of applying the operator of each filter, for a component under considerations, are held in a memory 850 .
- a set of N>1 encoded Boolean expressions is stored in a memory 864 . The Boolean expressions are individually identified as 870 ( 1 ) to 870 (N), each associated with a respective editing action from N editing actions, individually identified as 880 ( 1 ) to 880 (N).
- FIG. 9 illustrates an exemplary process of content filtering.
- An installer (a user) of the system for content filtering of FIG. 7 or FIG. 8 has initially defined five content descriptors, individually identified as 920 ( 1 ) to 920 ( 5 ), eight descriptor criteria individually identified as 922 ( 1 ) to 922 ( 8 ), and four operators individually identified as 924 ( 1 ) to 924 ( 4 ).
- the installer has defined twelve filters, individually identified as 930 ( 1 ) to 930 ( 12 ), each filter specifying one of the content descriptors 920 , one of the criteria 922 , and one of the operators 924 .
- the binary values of the twelve filters are determined.
- the installer has defined six Boolean expressions, individually identified as 950 ( 1 ) to 950 ( 6 ), where each Boolean expression is associated with a subset of the 12 filters. For example, Boolean expression 950 ( 2 ) is associated with two filters, 930 ( 1 ) and 930 ( 6 ), and Boolean expression 950 ( 5 ) is associated with filters 930 ( 2 ), 930 ( 8 ), and 930 ( 11 ).
- the installer defined four actions individually identified as 960 ( 1 ) to 960 ( 4 ).
- the installer then defined nine rules, individually identified as 940 ( 1 ) to 940 ( 9 ), using rule-construction module 540 of FIG. 5 .
- Each rule is associated with a single Boolean expression 950 and a single action 960 .
- rule 940 ( 1 ) specifies Boolean expression 950 ( 2 ) and action 960 ( 2 )
- rule 940 ( 9 ) specifies Boolean expression 950 ( 5 ) and action 960 ( 4 ).
- a rule may be based on a single filter, where the result of the rule is the binary value of the filter.
- rule 940 ( 7 ) depends solely on filter 930 ( 11 ).
- An installer of the system for content filtering of FIG. 7 or FIG. 8 may provide a Boolean expression 950 according to conventional algebraic syntax or according to a tree structure.
- the user interface 520 of FIG. 5 comprises a first module (not illustrated) for encoding a Boolean expression presented in algebraic form and a second module (not illustrated) for encoding a Boolean expression presented as a tree structure.
- Each of the two modules provides a respective template to enable the installer to properly specify a Boolean expression.
- a Boolean expression comprises simple operations, compound operations, and complex operations.
- a simple operation is exhibited as an operator and two operands with the operator and operands bounded by two delimiters (such as two brackets). The operator and operands may be listed in any order and the two delimiters need not be distinguished from each other.
- the two operators are Boolean variables representing two filters.
- a compound operation comprises an operator and two simple operations with the operator and two simple operations bounded by two delimiters.
- a complex operation comprises an operator and two operations all bounded by two delimiters where either of the two operations may be a simple operation or a compound operation.
- the two operations constituting a complex operation may also be complex operations.
- Delimiters of a simple operation, compound operation, or complex operation may be identical.
- FIG. 10 illustrates a method of evaluating the Boolean expressions, according to an embodiment of the present invention, which requires only recognizing and performing simple operations.
- an encoded Boolean expression is parsed to identify simple operations.
- the operator of an identified simple expression is applied to the respective operands (filters) to produce a binary value of “true” or “false” (for example, represented as “1” and “0”).
- the operator, operand, and two delimiters of the identified simple operation, thus processed, are deleted and replaced by the result of the operation.
- the process continues recursively until the encoded Boolean expression reduces to a single simple operation, the result of which becoming the outcome of the Boolean expression.
- step 1012 of FIG. 10 a Boolean expression is examined to identify a simple operation. If a simple operation is found (step 1014 ), step 1016 executes the simple operation and produces a binary value. Step 1018 replaces the operator, operands, and delimiters of the simple operation by the binary value. Step 1012 is then revisited to look for another simple operation in the reduced Boolean structure. If step 1014 determines that no further simple operations are found in the current form of the Boolean expression, step 1020 examines the current form to determine if it has indeed reduced to a single binary value (“true”, false” or “1”, “0”). If so, step 1022 reports the single binary value as the result of executing the Boolean expression. If step 1020 determines that the processed Boolean expression contains more than a single binary value, step 1024 reports an indication that the Boolean expression has not been correctly formed.
- the process of FIG. 10 is preferably performed during data entry so that the user (the installer) can correct the Boolean expression.
- the user interface 520 or some other component of the editing engine may be provided with computer instructions to analyze an erroneously formed Boolean expression and locate an error.
- An alternative method of encoding and evaluation Boolean expressions relies on a graphical tree representation of a Boolean expression.
- An exemplary rule tree 1100 is illustrated in FIG. 11 , which depicts a Boolean expression of six operands (six filters) identified as Filter- 1 to Filter- 6 each being a leaf of the tree.
- Three operators, denoted ⁇ 1 , ⁇ 2 , and ⁇ 3 define three operations ⁇ Filter- 1 , ⁇ 1 , Filter- 2 ⁇ , ⁇ Filter- 3 , ⁇ 2 , Filter- 4 ⁇ , and ⁇ Filter- 4 , ⁇ 3 , Filter- 6 ⁇ .
- An immediate successor of each operator is defined.
- the successors of ⁇ 1 , ⁇ 2 , and ⁇ 3 are operators ⁇ 5 , ⁇ 4 , and ⁇ 4 , respectively, and the successors of operators ⁇ 4 and ⁇ 5 are ⁇ 5 and “NULL”, respectively.
- An operator having a “NULL” successor produces a result of the Boolean expression.
- Operator ⁇ 1 produces a binary output B 1 , which is an operand of operator ⁇ 5 .
- Operator ⁇ 2 produces a binary output B 2 which is an operand of ⁇ 4 .
- Operator ⁇ 3 produces a binary output B 3 which is another operand of operator ⁇ 4 .
- Operator ⁇ 4 produces a binary output B 4 which is another operand of operator ⁇ 5 .
- Operator ⁇ 5 produces binary output B*, which is the result of the Boolean expression represented by the tree.
- FIG. 12 illustrates a template array 1230 for representing the rule tree 1100 of FIG. 11 .
- An index 1220 of the template array 1230 varies from 0 to 19 as indicated in FIG. 12 .
- the template array 1230 is divided into a number of records equal to the total number of operators (five in the exemplary tree of FIG. 11 ), each record corresponding to an operator and representing a simple operation having two operands.
- the binary values of filters are known after a container under consideration is processed.
- record includes indices of respective filters, an operator definition, and a pointer to another record corresponding to an immediately succeeding operator.
- a “NULL” pointer indicates that a current record is the last record to be processed.
- a user may enter the records in any order, and a module (not illustrated) within the user interface 520 of FIG. 5 reorganizes the records so that the records may be processed sequentially, and when any record is processed, the values of the respective operands would have been already determined.
- the first three records correspond to operators ⁇ 1 , ⁇ 2 , and ⁇ 3 applicable to the six filters forming the leaves of the tree.
- Pointer ⁇ ( 1 ) of the first record points to index 16 of the array which holds the binary result B( 1 ) of operator ⁇ 1 .
- Pointer ⁇ ( 2 ) of the second record points to index 12 of the array which holds the binary result B( 2 ) of operator ⁇ 2 .
- Pointer ⁇ ( 3 ) of the third record points to index 13 of the array which holds the binary result B( 3 ) of operator ⁇ 3 .
- FIG. 12 An exemplary activation of the template array 1230 is also illustrated in FIG. 12 .
- the values of Filter- 1 to Filter- 6 determined according to the process of FIG. 6 are “true”, “false”, “true”, “false”, “true”, and “true”, respectively.
- the Boolean operators ⁇ 1 to ⁇ 5 are specified by a user as “AND”, “OR”, “AND”, “AND”, and “XOR”, respectively.
- Operator “XOR” produces a binary output “true” which is the result of the Boolean expression since operator ⁇ 4 (“XOR”), has a null successor.
- FIG. 13 illustrates a second exemplary rule tree 1300 corresponding to a Boolean expression of eleven leaves (filters) denoted L 1 to L 11
- FIG. 14 illustrates a template array 1430 , similar to the template array 1230 of FIG. 12 , applied to the rule tree of FIG. 13 with an index 1420 ranging from 0 to 43
- the rule tree 1300 comprises ten operators denoted ⁇ 2 to ⁇ 11 .
- the first leaf, L 1 is an operand of operator ⁇ 11 , which has no successor.
- a first record (denoted as Record 1 in FIG. 14 ) of template array 1430 of FIG.
- each entry L 1 , L 2 , to L 11 , in template array 1430 of FIG. 14 is an index (pointer) to a filter.
- an input organizing module 522 associated with user interface 520 of FIG. 5 arranges the records so that the records can be processed sequentially with each record having already determined operands.
- FIG. 15 summarizes the tree encoding method using the template array 1230 ( FIG. 12 ) or 1430 ( FIG. 14 ).
- a template having a number of records, each corresponding to a node in the tree is created. Each record comprises four fields containing indices of two filters, a current operator, and a pointer to a successor record corresponding to a successor of the current operator.
- a list of filters determined according to the process of FIG. 6 is prepared for a container under consideration.
- the records of the tree template are processed sequentially. The operands of each record are acquired by indexing the list of filters. A respective operator is applied to the operands and the binary result is placed in an operand field of a successor record.
- the result of the operator of the last record is presented as the result of the Boolean expression represented by the tree.
- FIG. 16 illustrates an alternative method of representing a rule tree structure according to an embodiment of the present invention.
- a set of filters (conditions) relevant to a rule is defined based on content descriptors, descriptor criteria and filter operators as described earlier. Definitions of the set of filters are stored in a filter-definition array.
- a set of Boolean operators is defined with one operator designated a null successor and each other operator designated a successor from the set of operators.
- the filters form leaves of a tree and are divided into subsets of filters where the filters of a subset form operands of a Boolean operator from among the set of Boolean operators. Notably, if each subset of filters includes two filters, then the total number of Boolean operators equals the total number of filters minus 1.
- each leaf record includes a leaf operator from among the set of operators and a respective subset of the filters.
- each leaf record includes an operator and indices of the operands (filters) in the filter definition array. The values of the filters of each leaf record are determined for individual container components.
- a node vector having a number of node records equal to the number N of leaf records is formed.
- Each node record has a node-operator field and a node-state field.
- the node records are empty, containing no data.
- the Boolean operators and the node states of the node records are initially determined during processing of the leaf records.
- the N node records may be arranged in any order. However, it is convenient to let the node records initially have a one-to-one correspondence to the leaf records.
- the Boolean operator of node record j is a successor the Boolean operator of leaf vector j, 1 ⁇ j ⁇ N.
- each leaf operator Upon determining the values of the filters, each leaf operator is applied to respective filters (respective binary conditions) and a result is placed in a node-state field of a node record. A successor of each leaf operator is placed in node-operator field of the node record.
- node records After processing all leaf records, the node records are processed. Node records, herein called connected node records, having a common operator are then identified. The common operator is then applied to the node states of all the connected node records to produce a new state. The operator field of a selected node record, from the connected node records, is replaced by a successor of the common operator and the node-state field of the selected node record is replaced by the new state just determined. The remaining connected node records are deleted from the node vector. Thus, with the replacement of each set of connected node record with a combined node record, the number of node records in the node vector is reduced. The process of identifying connected node records continues recursively until the node vector contains only one node record. The result of applying the Boolean operator in the operator field of the remaining one node record is the result of evaluating the Boolean expression. The Boolean operator of the last node record has a null successor.
- FIG. 16 illustrates a recursive rule construction 1600 for encoding a rule tree for the exemplary tree of FIG. 13 , which represents a Boolean expression of eleven filters forming the leaves of the tree.
- the leaves (filters) are denoted L 1 to L 11 .
- leaf L 1 is not associated with any other leaf.
- leaf L 1 is artificially associated with a leaf, ⁇ , with which it shares a passive operator ⁇ 1 .
- the inserted leaf ⁇ is assigned a “don't care” value.
- a “don't care” value may be conveniently assigned either a “true” state or a “false” state.
- a set of Boolean operators ⁇ 2 to ⁇ 11 is defined by a user. Operators ⁇ 2 to ⁇ 6 are associated with leaf records while operators ⁇ 7 to ⁇ 11 are associated with node records. Operator ⁇ 11 has a null successor and each other operator ⁇ 2 to ⁇ 10 has a successor from the set of operators ⁇ 7 to ⁇ 11 as illustrated in list 1610 of FIG. 16 .
- the leaf vector 1620 comprises six records 1622 , individually identified as 1622 ( 1 ) to 1622 ( 6 ), assigned operators ⁇ 1 to ⁇ 6 placed in the operator fields 1624 ( 1 ) to 1624 ( 6 ) with indices of corresponding operands placed in operand fields 1626 ( 1 ) to 1626 ( 12 ).
- the operands in the operand fields of the six leaf records are ⁇ , L 1 ⁇ , ⁇ L 2 , L 3 ⁇ , ⁇ L 4 , L 5 ⁇ , ⁇ L 6 , L 7 ⁇ , ⁇ L 8 , L 9 ⁇ , and ⁇ L 10 , L 11 ⁇ .
- the leaf records 1622 are processed.
- the artificial passive operator ⁇ 1 simply passes the value of L 1 to the node-state field of node record 1642 ( 1 ).
- Operator ⁇ 11 which is the successor of ⁇ 1 , is placed in the operator field of node record 1642 ( 1 ).
- the second leaf record 1622 ( 2 ) is then processed where operator ⁇ 2 is applied to leaves L 2 and L 3 (filters L 2 and L 3 ) to produce a binary value B 2 to be placed in the node-state field of node record 1642 ( 2 ).
- the successor of operator ⁇ 2 which is operator ⁇ 9 , is placed in the operator field of node record 1622 ( 2 ).
- the process continues until all the node records 1642 ( 1 ) to 1642 ( 6 ) are determined.
- node record 1642 ( 1 ) remains unchanged.
- node record 1642 ( 2 ) remains unchanged because none of the node records 1642 includes an operator ⁇ 9 .
- Node records 1642 ( 3 ) and 1642 ( 4 ) have a common operator ⁇ 7 , which is applied to operands B 3 and B 4 to produce a binary result B 7 to be placed in the node-state field of node record 1642 ( 3 ), replacing B 3 .
- node record 1642 ( 4 ) which is now consumed in the new combined record 1642 ( 3 ), is deleted.
- node records 1642 ( 5 ) and 1642 ( 6 ) are combined in a new node record having the successor operator ⁇ 10 of operator ⁇ 8 and a node state B 8 determined by applying the common operator ⁇ 8 to operands B 5 and B 6 .
- the node vector 1640 now shrinks to four node records identified by the reference numeral 1640 ( 2 ). Node record 1640 ( 2 ) simply over-writes node record 1640 ( 1 ).
- the process continues recursively with node records 1642 ( 2 ) and 1642 ( 3 ) combined to produce new combined node record 1642 ( 2 ) while node records 1642 ( 1 ) and 1642 ( 4 ) remain unchanged; the two unchanged node records are now records 1642 ( 1 ) and 1642 ( 3 ) in the reduced node vector 1640 ( 3 ).
- Node records 1642 ( 2 ) and 1642 ( 3 ) have a common operator ⁇ 10 .
- Operator ⁇ 10 is applied to operands B 9 and B 8 to produce a new state B 10 which is placed in the node-state field of node record 1642 ( 2 ).
- the successor operator ⁇ 11 of operator ⁇ 10 is placed in the node operator field of node record 1642 ( 2 ).
- the common operator ⁇ 11 of node records 1642 ( 1 ) and 1642 ( 2 ) is applied to operands B 1 and B 10 to produce the output B* of the Boolean expression.
- FIG. 17 illustrates the process of determining the output of a rule tree using the leaf-vector template 1620 and node-vector template 1640 of FIG. 16 .
- the set of Boolean conditions Boolean filters L 2 to L 11 ) characterizing the data content under consideration are determined.
- leaf vector 1620 having N>1 leaf records 1622 is formed.
- Each leaf record 1622 includes a Boolean-operator field 1624 and fields for a subset of Boolean conditions (a subset of filters L 2 to L 11 ).
- a node vector 1640 of N node records 1642 is formed.
- Each node record 1642 includes a Boolean operator field 1644 and a node-state field 1648 .
- each leaf operator is applied to a respective subset of Boolean conditions (Boolean filters) which are determined from characteristics of content data as described above with reference to FIG. 5 and FIG. 6 .
- the binary result is placed in a node-state field of a selected node record 1642 .
- a successor of each leaf operator is placed in the operator field of the selected node record.
- node records having a common operator are replaced with a combined record, thus reducing the number of node records 1642 of the node vector 1640 .
- step 1732 the common operator is applied to the node states of the replaced node records and the binary result is placed in operator field of the combined record.
- step 1734 a successor of the common operator, determined from list 1610 of FIG. 16 , is placed in the operator field of the combined node record.
- step 1736 if the number of remaining node records is larger than 1, step 1730 is revisited to continue the process of combining node records of a common operator. If the number of remaining records is 1, the operator of the remaining node record is applied to the node-states of the node record, and the result determines whether an editing action need be performed (step 1740 ).
- FIG. 18 is a flow chart detailing the process of FIG. 17 .
- a leaf-vector 1620 is formulated.
- the leaf records 1622 ( 1 ) to 1622 (N) are considered sequentially.
- index j is set to equal 0.
- step 1826 determines that more leaf records are to be processed
- step 1828 increases index j by 1 and acquires a leaf set (a filter set) corresponding to leaf indices of a current leaf record and step 1830 acquires the operator ⁇ (one of the operators ⁇ 1 to ⁇ 6 ) of the current leaf record.
- Step 1832 applies the operator to the acquired leaf set, resulting in a binary output B.
- successor S( ⁇ ) is determined from list 1610 of FIG. 16 .
- the node-state fields and the operator fields of node vector 1640 are herein denoted U(j), V(j), 1 ⁇ j ⁇ N, i.e., U(j) and V(j) define node record 1642 ( j ), 1 ⁇ j ⁇ N.
- the value of B is placed in node-state field U(j) of node-vector 1640 and the value of S( ⁇ ) is placed in operator field V(j) of node vector 1640 .
- the index j equals the number of leaf records N and each node record 1642 of node vector 1640 has a respective node operator and a node state.
- step 1840 the current number v of node records 1642 of node vector 1640 is set to equal j (which equals N).
- Step 1848 examines subsequent node records of the node vector 1640 to identify a number, ⁇ , of subsequent node records having the same operator ⁇ . If the number ⁇ of identified subsequent node records is zero (step 1850 ), the index k is increased by 1 in step 1852 and if the index k is less than the current number ⁇ of node records, step 1846 is revisited. Otherwise, step 1856 collects the ( ⁇ +1) operands of the node records of the same operator ⁇ and applies the operators ⁇ to the ( ⁇ +1) operands to determine a new state B of a combined node record.
- step 1860 the subsequent ⁇ identified node records are deleted and step 1862 inserts the new state B in the node-state field U(k) of node record 1642 ( k ) and a successor operator S( ⁇ ) in the operator field V(k) of node record 1642 ( k ).
- the number of remaining node records is determined as ( ⁇ ) in step 1864 .
- Steps 1852 and 1854 are applied after step 1864 to determine if the node vector 1640 contains further node records of a common operator. If step 1854 determines that k is less than ⁇ , scanning the node vector continues from step 1846 .
- step 1855 ensures that the current value of ⁇ (last updated in step 1864 ) is less than the previous value ⁇ *. Otherwise, an error is reported in step 1880 . Notably, the requirement ⁇ * of step 1855 is not met if the user-provided representation of the Boolean expression is incorrect. If ⁇ *, step 1855 is followed by step 1842 . If step 1842 determines that the number of remaining node records is 1, the operator of the remaining node record is applied to respective operands to determine a state B* (step 1890 ), which determines a respective editing action.
- FIG. 19 details the step 1820 of FIG. 18 of formulating leaf vector 1620 of FIG. 16 .
- a set of filters (conditions) is formulated and in step 1922 the leaf operators are determined based on user input as described with reference to FIG. 5 and FIG. 6 .
- the leaf operators are applied sequentially to generate corresponding leaf records 1622 .
- step 1924 determines that at least one operator is not yet applied, step 1926 adds a new leaf record 1622 to the leaf vector.
- Step 1928 selects one of the remaining operators, and step 1930 adds a filter associated to an operand field 1624 of the leaf record.
- Step 1930 is repeated until step 1932 determines that all filters belonging to the selected operator have been included in the current leaf record 1622 .
- step 1924 is revisited.
- step 1924 determines that all leaf operators have been considered, the completed leaf vector 1620 is presented to step 1824 of FIG. 18 .
- FIG. 20 illustrates a method of pre-computing a binary value of a Boolean expression of a rule for each value of a set of filters.
- the set of filters is represented by a bit string having a number of bits bearing a one-to-one correspondence to the filters, so that each bit in the string corresponds to one filter.
- the string contains ⁇ bits and assume values ranging from 0 to 2 ⁇ -1.
- a starting string value of 0 ( ⁇ bits all set to zero) is set, and each entry of a rule vector having 2 ⁇ entries is initialized to “0”.
- the Boolean expression is evaluated using one of the methods described with reference to FIGS. 10 , 15 , or 17 .
- step 2016 the binary result (“true”, “false”) is stored in a rule vector at a position corresponding to a current value of the string (0 to 2 ⁇ -1).
- step 2018 the string value is increased by adding 1.
- step 2030 determines that each of the p bits of the string has a value of 0, the generation of the rule vector is complete (step 2040 ).
- a string with each of the ⁇ bits having a value of “1” corresponds to the (2 ⁇ -1) th entry of the rule vector and adding 1 in step 2018 resets the string to ⁇ zeros.
- the string may have ( ⁇ +1) bits with the most-significant bit used to indicate completion of the rule-vector generation.
- the rule vector may then be used to directly determine a binary value of a Boolean expression at run time, thus increasing the throughput of the content-filtering system.
- the method of filtering contents of data containers then comprises the following steps:
- a set of filters (binary conditions) is defined where each filter is a function of a selected descriptor of the content and a respective criterion of the descriptor.
- the set of filters is represented by a string of four bits.
- the Boolean expression is evaluated for each of the 16 values 2112 of the string, ranging from “0000” to “1111” to yield a binary output 2114 ( j ), indicated as “true” or “false”, corresponding to string value j, 0 ⁇ j ⁇ p of the string.
- the content of a container component is examined to determine a set of four filters for the rule considered in FIG. 21 . If, for example, the set of four filters have values of “1”, “0”, “0”, and “1”, yielding a string 2140 of “1001”, the value of the Boolean expression is read directly from position 9 (binary 1001) of the binary rule vector 2114 .
- the method of FIG. 20 is suitable for rules employing Boolean expressions of a moderate number of operands (filters). For example, with 8 filters, the binary rule vector 2114 would be relatively short, having only 256 bits. If a Boolean expression has more than 16 operands, for example, it may be preferable to evaluate the Boolean expression each time it is needed rather than storing a large binary rule vector. A number of operands, per Boolean expression, exceeding 16 may be unlikely.
- FIG. 22 illustrates a process of data entry relevant to filter definitions and rule definitions.
- the process starts with determining whether a rules file has already been created (step 2220 ). If a rules file has not yet been created, step 2222 creates a file using conventional methods known in the art. The next step is to add rules to the rules file. Populating or updating the rule file starts in step 2224 . Step 2224 opens the rules file and directs the process to step 2226 , which prompts a user to indicate whether a new rule is to be encoded and added to the rule file. Populating or updating the rule file is terminated by the user (step 2280 ). If more rules are to be added, a data-acquisition module (not illustrated) placed in the user interface 520 ( FIG.
- the rule template may optionally take one of many forms, which may be decided by the user.
- the form of a rule template depends on: (1) whether rules specified by the user are to be applied sequentially or according to a hierarchical order; and (2) whether the Boolean expression of a rule is to be entered in an algebraic-analytical format or in a tree-structure format where a node of a tree represents an operator and respective operands.
- the data-acquisition module may provide a respective template with instructions to facilitate data entry.
- the data-acquisition module may guide the user into constructing an algebraic form of a Boolean expression by prompting the user to enter simple operations, each comprising an operator and a set of operands, then progressing towards the desired expression. The validity of the constructed expression may be verified with each addition of a new operator. If the Boolean expression is presented as a tree-structure, the data-acquisition module may display a generic tree structure, which may be pruned and validated as the user enters data relevant to selected nodes of the tree.
- step 2232 a rule identifier, encoded in any suitable format, is provided.
- step 2234 a rule action is specified, and step 2240 defines a Boolean expression associated with the rule.
- the rule action of a specific rule is applied according to a value of the associated Boolean expression.
- Step 2240 comprises steps 2242 , 2244 , 2246 , 2248 , 2250 , 2252 , and 2260 .
- Step 2242 created a filter template as illustrated in FIG. 3 , reference numeral 340 .
- Step 2244 sets a type of the filter, which may be one of many descriptors of a content of a container under consideration.
- Step 2246 sets the filter's operator, which may be selected from a menu of unary operators, binary operators, arithmetic operators, comparison operators, logical operators, set operators, and user-defined operators.
- Step 2248 sets the filter's criterion, which is a target value or a threshold relevant to a descriptor selected in step 2244 .
- Step 2250 prompts the user to either define a new filter for the rule or proceed towards defining the Boolean expression to be applied to the set of filters so far specified.
- steps 2242 to 2248 are revisited until the user determines in step 2250 that all relevant filters are present.
- Step 2252 prompts the user to enter the Boolean expression according to one of the formats described above.
- a rule may be based on only one filter, as illustrated in FIG. 9 , in which case the Boolean expression reduces to a passive operator, which simply uses the value of the single filter to determine whether the rule action specified in step 2234 is to be applied.
- Step 2260 appends the rule just constructed to the rule file opened in step 2224 . It is noted that the values of the filters of each rule thus constructed are to be determined at “run time” upon processing received containers.
- the encoded rules includes filters identifiers, which may simply be indices of an array (not illustrated) storing the filters.
- the process of FIG. 22 is performed during system installation or update.
- the rules encoded and stored in the rules file are activated in “real-time”.
- FIG. 23 illustrates a process of sequential filtering of components of a received multimedia container having a number of components.
- the order of processing of the components of the container for content filtering is arbitrary and may be set by the user.
- the order of processing of components would be consequential if an overall constraint on the entire container is imposed for some operational reasons.
- step 2320 The process of content filtering starts in step 2320 when prompted by a controller 240 ( FIG. 2 ). Having selected the order, in which the components are to be processed, step 2340 determines whether at least one component is yet to be processed in step 2350 . Otherwise, step 2380 ends the process and reports results. In step 2360 , all rules of a rule set applicable to a component under consideration are executed, and step 2340 is revisited to determine whether another component need be processed.
- a module 290 inserts a notification indicating any filtering action applied to a component.
- FIG. 24 details the step 2360 ( FIG. 23 ) where a set of rules is applied to content of a container.
- Step 2360 applies to a component of a container.
- Step 2424 determines whether the entire rule set has been applied. If so, step 2480 appends a notification to the container indicating any content-filtering actions resulting from executing the set of rules. Otherwise, step 2428 selects a current rule and acquires definitions of all relevant filters associated with the selected current rule.
- the rules may be arranged in a specific order if the result of one rule influences selection of another rule.
- the rule inter-dependence may be represented by a formal graph rather than a simple array as will be described with reference to FIG. 25 .
- Step 2430 executes the selected current rule.
- Step 2430 includes steps 2432 , 2436 , 2440 , and 2444 .
- Step 2432 determines whether all filters identified in step 2428 have been activated to determine a binary value of each filter. A filter is said to be activated when its operator is applied to respective operands to produce a binary value of the filter. If all filters relevant to the current rule have been activated, step 2432 transfers control to step 2460 . Otherwise, steps 2436 , 2440 , and 2444 are exercised to produce a value of a filter under consideration.
- Step 2436 acquires the operator and values of respective operands based on characteristics of the container content under consideration as described with reference to FIG. 5 and FIG. 6 .
- Step 2440 applies the operator to the operands
- step 2444 records the value of the current filter for use in evaluating the Boolean expression of current rule.
- Step 2460 acquires the Boolean expression according to one of the encoding methods of FIG. 10 , FIG. 15 , or FIG. 17 .
- Step 2464 evaluates the Boolean expression.
- Step 2468 may apply the content-filtering action associated with the current rule to the content of the content under consideration subject to the value of the Boolean expression as determined in step 2464 .
- step 2470 if the content-filtering action of the current rule results in deleting the entire container component, then there is no need to execute subsequent rules, if any, and step 2360 appends a respective notification to the deleted component. If the content is not edited, or edited but not deleted, step 2424 is revisited to determine whether more rules need be applied to the content under consideration. Notably, an entire component may be deleted if it has an attachment exceeding a certain threshold, or if it has a malicious insertion that cannot be removed.
- rules applicable to a specific content may have complementing actions, conflicting actions, or mutually-exclusive actions.
- the content-filtering result may be independent of the sequence of implementing the rules.
- conflicting actions or mutually-exclusive actions one action supersedes another.
- a user may be prompted to define the inter-relationship of rules using a graph.
- FIG. 25 illustrates a graph indicating a hierarchical arrangement of five rules denoted Rule 1 to Rule 5 .
- a state of a rule is herein defined as the binary value resulting from executing the Boolean expression of the rule.
- a state of “true” of Rule 1 results in an action labeled “action 1 ” after which step 2360 is considered complete.
- “Action 1 ” may call for one of two opposing extremes; the first being deleting the entire component either because it is too large or is irreparable, or determining that the component is acceptable because it is too short to contain malicious insertions.
- a state of “false” of Rule 1 indicates that the content passes a first test and should be subjected to a second test of Rule 2 .
- a state of “true” of Rule 2 results in an action labeled “action 2 ” followed by implementing Rule 5 .
- a state of “false” of Rule 2 indicates that the content passes the second test and should be subjected to a third test of Rule 3 , and so on.
- the process ends without editing the content if the state of Rule 4 is “false”.
- the process may also end after implementing (only) one: ⁇ action 1 ⁇ , ⁇ action 2 and action 5 ”, “action 3 ”, and “action 5 ”.
- FIG. 26 illustrates modules, listed below, used by the operation manager 230 .
- Each module comprises computer readable instructions stored in a computer readable storage medium.
- Server-unit configuration module 2610 for configuring a server unit to accept multimedia data containers formed according to a specified protocol.
- Load balancing module 2612 for equitably distributing multimedia data containers among server units identically-configured to process data containers of a common type.
- a filter-definition module 2614 for acquisition of definitions of a set of filters from a user, each filter specifying a definition of a content descriptor, a descriptor criterion, and an operator.
- Boolean-expression acquisition module 2616 for enabling a user to provide a Boolean expression according to algebraic syntax.
- Boolean-expression acquisition module 2618 for enabling a user to provide a Boolean expression in the form of a tree structure.
- Boolean-expression acquisition module 2620 for enabling a user to enter a Boolean expression by editing and pruning a drawing of a generic tree, where each node of a tree representing an operator and a respective set of operands.
- Rule-construction module 2622 for acquisition of a set of content-filtering rules from a user, each rule specifying a Boolean expression of a subset of filters and a filtering action.
- Rule-validation module 2624 for validating correctness of a Boolean expression specified for a rule.
- Rule-arrangement module 2626 for arranging rules in an order according to which a specific filtering action performed by a rule precludes execution of at least one subsequent rule.
- Rule inter-dependence module 2628 for prompting a user to specify a successive rule of a given rule conditional on a value of a respective Boolean expression of the given rule.
- Rule graph-definition module 2630 for presenting a set of content-filtering rules in the form of a formal graph ( FIG. 25 ).
- Rule-optimization module 2632 for optimizing a Boolean expression of each rule, using conventional logic-optimization techniques, to minimize processing effort.
- Rule pre-processing module 2634 for selecting specific rules each specifying a subset of filters comprising at most a preset number of filters, evaluating, for each of the specific rules, a Boolean expression of a subset of filters for all values of the subset of filters to produce an array of 2 ⁇ bits, ⁇ >1 being a number of filters in the subset of filters, and storing the array of bits in a memory device ( FIGS. 20 and 21 ).
- Sorting module 2636 for sorting containers into container types, each container type corresponding to a protocol according to which a container is formulated at source, and directing containers of a specific type to a specific controller from among a plurality of containers.
- the sorting module 2636 may be associated with the network interface 210 or the operation manager 230 .
- FIG. 27 illustrates modules, listed below, used by a transcoder 280 , in accordance with an embodiment of the invention.
- Each module comprises computer readable instructions stored in a computer readable storage medium.
- the Boolean expression may be presented according to algebraic syntax or as a tree structure.
- Module 2730 for performing a filtering action relevant to a given container content, subject to a preset value a Boolean expression of a respective rule
- FIG. 28 illustrates a transcoder 280 comprising a transcoder-service module 2810 , a program registry 2820 , and program storage 2840 , in accordance with an embodiment of the invention.
- the transcoder-service module comprises computer readable instructions stored in a computer readable storage medium, which, when executed, cause a core of the processor to: receive a specific container and an editing request from a specific controller from the plurality of controllers; select and execute programs relevant to the editing request; and return a result to the specific controller.
- the program registry comprises computer readable instructions which, when executed, causes a processor to organize programs according to respective functions; and replace existing programs with respective new programs.
- a controller 240 ( FIG. 2 ) forwards an editing request to a transcoder 280 .
- the transcoder-service module 2810 identifies which plugin program to execute using information contained in the editing request.
- the transcoder-service module 2810 executes the selected plugin program and returns the result to a respective controller 240 .
- a “plugin” is defined herein as a self-contained module devised to perform a specific task.
- Program storage 2840 comprises computer readable instructions stored in a computer readable storage medium and includes two types of plugins:
- external plugins 2844 which are loaded dynamically, external plugins may replace resident plugins.
- Resident plugins provide basic functions, and external plugins provide additional functions, content filtering and virus scanning are two examples of such functions.
- Plugins are registered with the program registry 2820 which manages plugin registration and access.
- the program registry 2820 organizes plugins based on their characteristics. Plugins may be arranged in plugin groups.
- Plugin programs organize execution of plugins in a predefined fashion. Plugin programs are built from a simple set of instructions which determine the execution logic for a predefined set of plugins having specific goals.
- Each “Execute” command has the name of a plugin as an argument that always refers to resident plugin names. An external plugin is never directly referenced by name since it is optional, and is thus executed only if present.
- Each “ExecuteGroup” command has the name of a plugin group as argument. Command “Execute Group” executes all the plugins that belong to that group.
- Line 1 states that on any error the program is to jump to line 14 and resume execution with lines 15 to 18.
- Lines 2 and 3 perform setup of the adaptation to be done;
- Line 4 performs decoding of input if required, for example if the input is EMAIL then it is broken into its sub-components;
- Line 5 and line 9 execute a plugin group to which Content Filtering plugin belongs to. So if present, it starts execution on line 5 and terminates on line 9;
- Line 6 and line 7 are used respectively to perform setup operations necessary for the creation of an adaptation pipeline and to actually create it.
- the adaptation pipeline contains a set of operations to be executed to perform the required adaptation;
- Line 8 is meant to execute any external plugin that has an effect on the adaptation pipeline before it is executed;
- Line 10 provides details of input components that will take part in the adaptation.
- Line 18 performs a similar task on the output components. Such information may be analyzed for reporting, billing and other purposes not necessarily related to the adaptation function; Line 11 performs adaptation-pipeline optimization; Line 12 executes any external plugin that performs analysis and optimization of the adaptation pipeline before its execution; Line 13 executes the adaptation pipeline; Line 15 characterizes the output components generated as a result of the execution of the adaptation pipeline; Line 16 executes any external plugin that has an effect on the output components that were generated; and Line 17 performs additional steps completing the adaptation (such as providing a detailed adaptation record).
- Rules are permanently stored in “Rule Files”.
- a rule file may apply to more than one controller. Content filtering, using a rule file, applies the rules contained in the rule file against media (content). If a given rule evaluates to “true”, a corresponding action is performed.
- An action may include removing undesirable content such as viruses (including mobile specific viruses); removing media of a particular type (such as games); using third party applications to perform actions on media (such as scanning a media for viruses). However, a content of a particular type may pass-through without processing.
- the definition of rules is done in the operation manager 230 ( FIG. 2 ).
- the application of rules to affect content editing (filtering and adaptation) is done in a transcoder 280 .
- a rule file Once a rule file is created then the user optionally configures one of the controllers 240 to send the rule file along with any adaptation request to a transcoder 280 it selects.
- An action “Drop” ensures that a media is not part of the output of a content adaptation process.
- An action “scan keep” results in scanning a media for viruses. This assumes that the Anti-virus external plugin is installed. The media is actually “marked” as “scan for virus”, so that at the point of the execution of the appropriate plugin program where the anti-virus plugin is executed all media marked as “scan for virus” are scanned for viruses.
- rule 1 An example of a rule called rule 1 is given below.
- the name associated with rule 1 is “MaxFileSize50000” whereas the action corresponding to the rule is “Drop” for removing any media that match the filter(s) contained in the rule.
- This rule specifies two filters. The first filter is of type “MaxFileSize” that is applied against the size of a file. The filter operator is “GreaterThan” where as the value is “50000”. The second filter is characterized by a type called “Family”. This filter is applied against the media family (ex: IMAGE, AUDIO, etc). The operator associated with the filter is not “NotEqual” and the value is “MESSAGE.
- the filters are combined by using a boolean operator “AND”. Thus, if a file has a size greater than 50000 and is not of family “MESSAGE” then the specified action is performed.
- rule 2 Another rule, called rule 2 is described next:
- rule 2 The name of the rule is “MaxFileSize25000AndContentTypes” and the corresponding action is “Drop”.
- the purpose of rule 2 is to remove any media that match the filter(s) contained in the rule. A detailed description of the structure of rule 2 is presented next.
- Actions can affect the media or any of its attachments if the media is a container such as an email or an MMS. Actions can include: keep (adapt the media); keep & scan (scan the media for viruses before adapting); drop (do not include the attachment in the final message); pass-through (do not adapt the media, leave it unchanged).
- rule 4 that completes that common rule file is presented.
- a common rule file contains:
- rule 3 which “drops” all files that have a size greater than 300000
- rule 4 which performs a virus scan on any media that are messages.
- XML is used to manage the structure of rules inside rule files. This ensures portability and scalability.
- An XML version of RuleFile 1 is presented next.
- Content filtering is performed according to the following steps:
- the plugin program resumes after the execution of the content filtering plugin. This results in the scanning of the MMS media and its content for virus by the Anti-virus plugin.
- the adaptation process then starts. Consider the case where the adaptation and content filtering produce an output MMS that is of the following form.
- Anti-virus scanning is present in Transcoders in the form of an external plugin.
- the plugin architecture is used to provide an interface to a third party anti-virus scanning engine such as McAffee or Kaspersky.
- the presence of the Anti-virus plugin is optional as with any external plugin.
- a plugin program that is meant to execute the Anti-virus plugin would contain a command that executes the plugin group to which the Anti-virus plugin belongs.
- Execution of the anti-virus plugin does not automatically imply that the media will be scanned for viruses. Virus scanning is performed only on media that are marked as “scan for virus” by content filtering.
- Some third-party Anti-virus engines may be installed as stand-alone libraries.
- Other third-party Anti-virus engines may be installed as client-servers.
- the Anti-virus plugin would be written in such a way as to properly interface with the third-party Anti-virus engine. In any case, the anti-virus plugin is the transcoder's entry point to perform virus scanning on the media that go through content-adaptation.
- the following features have been provided: (1) ability to parse a message in order to check the attachments; (2) ability to characterize an attachment in order to filter it according to content type; and (3) accommodating a user-defined, expandable, and hierarchic set of rules to determine whether a media element is desirable or not.
- Editing actions determine how media attachments are treated.
- the editing actions may include one or more of the following: presenting an attachment to the adaptation process; keeping an attachment and scanning the media for viruses before presenting to the adaptation process; and dropping an attachment.
- Editing actions may include invoking anti-virus and intrusion-prevention software programs.
Abstract
Description
- The present application claims the benefit of U.S. provisional application Ser. No. 60/986,835 filed Nov. 9, 2007 to NORTON et al, entitled “A System and Method for Rule-Based Content Filtering”, the contents of which are incorporated herein by reference.
- The present invention relates to multimedia messaging services and, in particular, to an engine for rule based content filtering.
- Emerging versatile telecommunications services enable communications devices to exchange data containers each having multiple components of different types. For example, a component may include data representing a text, an image, an audio signal, or a video signal. Sophisticated terminal devices for handling such services are evolving rapidly leading to multiple “generations” of terminal devices separated by a relatively short time.
- With co-existence of multi-generation terminal devices, incompatibility issues arise. A terminal device transmitting a data container would generally be unaware of the characteristics and capability of the receiving terminal device (or receiving terminal devices in the case of multi-cast communications). This requires that a facility be provided to ensure proper detection of the content of the data container in its entirety or proper detection of specific components thereof, and to notify a recipient terminal device of any changes made to the original container, as described in co-pending U.S. application of Ser. No. 12/238,390, filed on Sep. 25, 2008, the contents of which are incorporated herein by reference.
- In addition to the compatibility issue, communicating multiple components each optionally having respective attachments further increases exposure to malicious insertions, such as viruses. The exposure of containers to intrusion necessitate that a content-filtering facility be provided.
- There is a need, therefore to provide a facility for content filtering, in addition to content adaptation, in a network providing versatile services.
- It is an object of the present invention to provide a content-filtering facility in a network offering multimedia services. It is another object to incorporate the content-filtering facility with an existing content-adaptation facility in order to realize a comprehensive, efficient, and economical system.
- According to one aspect of the invention, there is provided an engine for editing content of containers, the engine comprising:
- a network interface for receiving said containers from clients and directing each container to a respective controller from among a plurality of controllers for identifying and parsing said containers;
- a memory device for storing:
-
- an array of Boolean variables, each said Boolean variable determined according to a respective operator applicable to a first operand characterizing said content and a second operand specifying a target value of said first operand; and
- an array of encoded rules, each rule specifying a respective content-editing action activated by a value of a respective Boolean expression of a respective subset of said Boolean variables; and
- a plurality of processors hosting transcoders, each transcoder for applying at least one of said encoded rules to a subset of said containers.
- The engine further comprises:
-
- an operation manager comprising computer readable instructions stored in a computer readable storage medium for performing operation, administration, and maintenance functions;
- a graphical user interface, comprising computer readable instructions stored in a computer readable storage medium, coupled to said operation manager for entering said array of encoded rules and for assigning to each controller a respective subset of said transcoders; and
- a configuration memory device for storing identifiers of transcoders assigned to each controller.
- The engine further comprises a sorting module, comprising computer readable instructions stored in a computer readable storage medium, coupled to said network interface, for sorting containers into container types, each container type corresponding to a protocol according to which a container is formulated, and directing containers of a specific type to a specific controller from among said plurality of containers.
- The engine further comprises a controller-load-balancing module, comprising computer readable instructions stored in a computer readable storage medium, coupled to said operation manager, said controller-load-balancing module comprising means for dynamic assignment of transcoders to controllers according to a time-varying flow rate of said containers.
- The engine further comprises a transcoder-load-balancing module coupled to said each controller for equitably assigning container editing requests among transcoders assigned to said each controller.
- The engine further comprises a blade server hosting said each controller and said respective subset of said transcoders, said blade server comprising:
-
- a processor having multiple cores, each core exclusively assigned to a transcoder of said subset of transcoders;
- a plurality of memory devices;
- an input interface; and
- an output interface.
- The engine further comprises:
-
- a transcoder-service module coupled to each transcoder of said plurality of transcoders for receiving new programs from external sources;
- a program storage medium for storing a plurality of programs accessible to said each transcoder; and
- a program registry, comprising computer readable instructions stored in a computer readable storage medium, for identifying a function of each new program and organizing programs according to respective functions.
- In the engine described above, the transcoder-service module further comprises computer readable instructions stored in a computer readable storage medium, which, when executed, cause a core of said processor to:
- receive a specific container and an editing request from a specific controller from said plurality of controllers;
- select and execute programs relevant to said editing request; and
- return a result to said specific controller.
- The program registry comprises computer readable instructions which, when executed, causes a core of said processor to:
- organize programs according to respective functions; and
- replace existing programs with respective new programs.
- In the engine described above, the program storage medium comprises:
-
- resident programs stored in the computer readable storage medium; and
- dynamically loaded external programs stored in the computer readable storage medium.
- According to another aspect of the invention, there is provided a method of filtering a data container having multiple components, comprising:
-
- selecting a component;
- determining a plurality of binary conditions characterizing content of said component;
- formulating a set of Boolean expressions, each comprising a Boolean operator and at least two operands selected from said set of binary conditions;
- executing each Boolean expression of said set of Boolean expressions to determine a set of content indicators, said indicators having a one-to-one correspondence to said Boolean expressions; and
- performing an editorial function relevant to said content corresponding to each of said indicators.
- The method further comprises performing a further editorial function based on a single binary condition.
- The method further comprises arranging said Boolean expressions in an order according to which an indicator resulting from executing a Boolean expression conditionally precludes execution of at least one subsequent Boolean expression.
- The method as described above further comprises determining said Boolean expressions according to:
-
- specified descriptors of said content; and
- preset criteria corresponding to said descriptors.
- In the method described above, the step of performing the editorial function comprises one of:
-
- scanning said content to detect malicious insertions and removal of detected malicious insertions; and
- scanning said content to detect malicious insertions and deletion of said content upon detecting malicious insertions.
- According to yet another aspect of the invention, there is provided a method of editing content of a data container using a computing device, comprising:
-
- formulating a set of descriptors of said content;
- specifying a set of criteria corresponding to said descriptors;
- specifying a set of operators;
- defining a set of Boolean variables, each Boolean variable being an outcome of applying an operator from among said set of operators to a first operand and a second operand, where said first operand is a descriptor selected from among said set of descriptors, and said second operand is a criterion selected from among said set of criteria; and
- defining a set of rules, each rule executing a Boolean expression, selected from among a set of Boolean expressions, of a subset of said Boolean variables and performing an action, selected from among a set of actions relevant to said content, according to an outcome of said executing.
- In the method described above, the set of descriptors comprises at least one of the following: a size of said content; a content family from among a set of predefined content families; an encoding method; and a priority designation.
- In the method described above, the set of operators comprises one or more of the following: unary operators; binary operators; arithmetic operators; comparison operators; logical operators; set operators; and user-defined operators.
- The method further comprises entering said set of descriptors, said set of criteria, said set of operators, and said set of Boolean expressions through a graphical user interface comprising computer readable instructions stored in a memory of said computing device.
- Conveniently, the method further comprises selecting said content to include a portion of said data container.
- In accordance with another aspect of the invention, there is provided a system for filtering content of multimedia data containers, comprising:
-
- a network interface for receiving said multimedia data containers from a network; and
- a plurality of server units, each server unit comprising a set of processors and a set of memory devices, having installed thereon:
- a filter-definition module, having computer readable instructions stored in a computer readable storage medium, for acquisition of definitions of a set of filters from a user, each filter specifying a definition of a content descriptor, a descriptor criterion, and an operator;
- a rule-construction module, having computer readable instructions stored in a computer readable storage medium, for acquisition of a set of content-filtering rules from said user, each rule specifying a Boolean expression of a subset of said filters and a filtering action;
- a module for characterizing content of each component of a multimedia data container, determining said content descriptor, applying said operator, and determining a state of said each filter;
- a module for determining a binary output of each said rule; and
- a module for performing a filtering action relevant to said content subject to a preset value of said binary output.
- The system further comprises at least one of the following modules, each module comprising computer readable instructions stored in a computer readable storage medium:
-
- (1) a module for configuring a server unit to accept multimedia data containers formed according to any protocol selected from a set of known protocols;
- (2) a module for equitably distributing multimedia data containers among identically-configured server units;
- (3) a module for enabling the user to provide the Boolean expression according to algebraic syntax;
- (4) a module for enabling the user to provide the Boolean expression in the form of a tree structure;
- (5) a module for enabling the user to enter the Boolean expression by editing and pruning a drawing of a tree, each node of the tree representing an operator and a respective set of operands;
- (6) a module for validating correctness of the Boolean expression;
- (7) a module for arranging the rules in an order according to which a specific filtering action performed by a rule precludes execution of at least one subsequent rule;
- (8) a module for prompting the user to specify a successive rule of at least one of the rules conditional on a value of the Boolean expression;
- (9) a module for presenting the set of content-filtering rules in the form of a formal graph; and
- (10) a module for optimizing the Boolean expression of each rule.
- The system further comprises a module, comprising computer readable instructions stored in a computer readable storage medium, for performing the following: selecting specific rules each specifying a subset of filters comprising at most a preset number of filters; evaluating, for each of the specific rules, the Boolean expression of a subset of filters for all values of the subset of filters to produce an array of 2μ bits, μ>1 being a number of filters in the subset of filters; and storing the array of bits in a memory device.
- In accordance with another aspect, the present invention provides a method of filtering content of a data container. The method comprises specifying a set of binary conditions, specifying a set of operators, forming a leaf vector, and forming a node vector.
- The set of binary conditions characterize the content. One of the operators is designated a null successor, while each other operator is designated a successor from within the set of operators. The leaf vector comprises N>1 leaf records. Each leaf record has a leaf operator from among the set of operators and a respective subset of the binary conditions. The node vector has N node records, each having a node-operator field and a node-state field.
- Each leaf operator is applied to respective binary conditions and a result is placed in the node-state field of a node record. A successor of each leaf operator is then placed in the node-operator field of the node record.
- After processing each leaf record, the node vector is processed. Node records having a common operator are identified and replaced by a combined record. The common operator is applied to entries of the node-state fields of the identified node records and the resulting state is placed in the node-state field of the combined record. A successor of the common operator is placed in the node-operator field of the combined record.
- A content index is determined as the resulting state of applying a common operator subject to the condition that the successor of the common operator is a null successor. Alternatively, the method may keep track of the number of node records of the node vector after combining node records of a common operator, and the content index is determined as the resulting state corresponding to a number of node records equal to one. The method further comprises a step of performing a specified editing action according to a value of the content index.
- In accordance with a further aspect, the invention provides a method of filtering content of a data container based on predetermining a decision vector. The method comprises defining a set of binary conditions where each binary condition is a function of a selected descriptor of the content and a respective criterion of the descriptor; defining a set of Boolean expressions and corresponding content-filtering actions; selecting a Boolean expression of specified μ binary conditions represented as a string of μ bits, μ>1; and evaluating the Boolean expression for each of 2μ values of the string to produce a decision vector of 2μ entries, each entry being a state of a content metric corresponding to one of the 2μ values of the string;
- Upon receiving a data container, values of the specified p binary conditions are determined according to content of the data container. The value of the resulting string of μ bits is then used to index the decision vector to acquire a value of the Boolean expression which determines whether a content-filtering action need be applied.
- The Boolean expression may be acquired in an algebraic format having Boolean operators, operands, and delimiters. The Boolean expression is then evaluated by examining the Boolean expression to identify a simple pattern, the simple pattern enclosing a Boolean operator and two operands between two delimiters. Provided a simple pattern is found, the Boolean operator is applied to the two operands to determine a binary value of the pattern and the simple pattern, together with the two delimiters, is replaced with the binary value. The process of examining the Boolean expression to detect a simple pattern is repeated until the Boolean expression is reduced to a single binary value (“true” or “false”) which determines whether to apply an editing action or not.
- Alternatively, the Boolean expression may be acquired in a form of a tree structure having a plurality of nodes. The Boolean expression is then evaluated successively evaluating the nodes. A tree template having a plurality of records is created. Each record corresponds to a respective node and has four fields for a first operand, a second operand, a current operator, and a successor record. Starting with a first record and proceeding sequentially towards a last record, an operator of a current record is applied to respective binary values determined from a current value of the string to produce a new binary value. If the current record is a last record, the new binary value is the value of the Boolean expression. If the current record is an intermediate record, the new binary value is placed in an operand field of the successor record.
- Embodiments of the invention will now be described, by way of example, with reference to the accompanying drawings, in which:
-
FIG. 1 illustrates a network supporting service controllers and editing engines for filtering and adapting data containers communicated through the network, in accordance with an embodiment of the present invention; -
FIG. 2 illustrates an editing engine comprising controllers and transcoders, in accordance with an embodiment of the present invention; -
FIG. 3 illustrates exemplary structures of a multimedia container, content descriptors of a container component, and a content filter, in accordance with an embodiment of the present invention; -
FIG. 4 illustrates algebraic forms of Boolean expressions associated with a set of rules applicable to a data container, in accordance with an embodiment of the present invention; -
FIG. 5 illustrates basic components of a content-filtering process, in accordance with an embodiment of the present invention; -
FIG. 6 illustrates a process of deriving descriptors of container content, in accordance with an embodiment of the present invention; -
FIG. 7 illustrates a system for content filtering, in accordance with an embodiment of the present invention; -
FIG. 8 illustrates a system similar to the system ofFIG. 7 adapted for containers having multiple components, in accordance with an embodiment of the present invention; -
FIG. 9 details a content-filtering process, in accordance with an embodiment of the present invention; -
FIG. 10 illustrates a method of evaluating a Boolean expression of a rule, in accordance with an embodiment of the present invention; -
FIG. 11 illustrates a first exemplary rule-tree structure for encoding a filtering rule, in accordance with an embodiment of the present invention; -
FIG. 12 illustrates a first data structure for encoding the rule-tree structure ofFIG. 11 ; -
FIG. 13 illustrates a second exemplary rule-tree structure for encoding a filtering rule, in accordance with an embodiment of the present invention; -
FIG. 14 illustrates the first data structure ofFIG. 12 applied to the second exemplary rule-tree ofFIG. 13 ; -
FIG. 15 illustrates a process of applying the first data structure exemplified inFIG. 12 andFIG. 14 , in accordance with an embodiment of the present invention; -
FIG. 16 illustrates a second data structure for encoding a rule tree, in accordance with an embodiment of the present invention; -
FIG. 17 illustrates a process of applying the second data structure exemplified inFIG. 16 , in accordance with an embodiment of the present invention; -
FIG. 18 illustrates a process of using a rule tree to determine a rule result, in accordance with an embodiment of the present invention; -
FIG. 19 details a step of forming a leaf vector associated with the process ofFIG. 18 , in accordance with an embodiment of the present invention; -
FIG. 20 illustrates a method of preprocessing Boolean expression for fast run-time rule execution, in accordance with an embodiment of the present invention; -
FIG. 21 illustrates an exemplary implementation of the method ofFIG. 20 ; -
FIG. 22 illustrates a process of data entry relevant to filter definitions and rule definitions, in accordance with an embodiment of the present invention; -
FIG. 23 illustrates a process of sequential filtering of components of a multimedia container; -
FIG. 24 illustrates a process of applying multiple rules for content filtering, in accordance with an embodiment of the present invention; -
FIG. 25 illustrates a graph depicting interdependence of rules determining content-filtering actions, in accordance with an embodiment of the present invention; -
FIG. 26 illustrates modules of an operation manager of the engine ofFIG. 2 , in accordance with an embodiment of the present invention; -
FIG. 27 illustrates modules of a transcoder of the engine ofFIG. 2 , in accordance with an embodiment of the present invention; and -
FIG. 28 illustrates modules of a transcoder of the engine ofFIG. 2 , in accordance with an embodiment of the present invention. - Multi-Media Service (MMS): The term is used colloquially to refer to multi-content communication services where information contents of different forms such as text, audio signals, video signals, images, presentations, etc., are exchanged among terminals through a network. Encoded information transferred from one terminal to another is typically arranged in a single data stream with time-interleaved segments corresponding to the different information contents.
- Container: A container is a computer file stored on a computer readable medium and transmitted over a computer network. The container is structured to contain various types of data. The container may support multiple text, audio, and video streams with synchronization information to enable coordinated play back of various streams.
- Container component: A container includes sections, each comprising data encoded in a specific form, such as a text, audio data, image data, or video data. The term container component refers to data in one section. A container component may be referenced as a “component” for brevity. In a multimedia messaging system, a component is also known as “media”.
- Container screening: “Container screening” refers to a process of examining the content of a container, including all components, to ensure absence of any undesirable insertions, especially harmful insertions.
- Container adaptation: “Container adaptation” refers to a process of modifying the form of a container component found to be incompatible with the decoding capability of a respective receiver. If it is not feasible to present a container component to suit a receiver, the container component may be deleted. A container-adaptation process is receiver specific while the process of container screening is independent of the type of intended receiver.
- Container editing: The term “container editing” refers to the combined processes of container screening and container adaptation.
- Container conditioning: The term may be used synonymously with “container editing”. However, container conditioning also appends an appropriate notification with a container, even when a container is not modified.
- Transcoder: A transcoder is a device, which performs direct digital-to-digital translation of encoded information to enable an information record of one format to be reproduced in a different format suitable for a specific receiver.
-
FIG. 1 illustrates anetwork 140 providing a path from a transmittingdevice 120 to areceiving device 160, hereinafter referenced astransmitter 120 andreceiver 160.Network 140 supportsservice controllers 103 andediting engines 106, in addition to numerous other hardware terminal devices of different types.Transmitter 120 sends containers toreceiver 160, where a container may include data of different content type such as encoded text, audio signals, still images, animation (rapid display of images), and video signals. A container may be directed to aservice controller 103 which, in turn, directs the container to anediting engine 106 for examining the container and, where needed, editing the content of the container. An editing process includes data screening to ensure absence of any undesirable insertions, especially harmful insertions, content modifications to meet specific requirements, and content adaptation to be compatible with the decoding capability of a respective receiver. -
FIG. 2 illustrates anediting engine 106. Anetwork interface 210 receives containers from clients through alink 204. A container is directed to one of m>1controllers 240, individually identified as 240(1), 240(2), . . . , 240(m).Controllers 240 may be implemented as a distinct hardware entity or share a computing device hosting a number oftranscoders 280 as will be described below.Controllers 240 are protocol specific, each being programmed to handle containers formed according to a respective protocol. Controllers handling a specific protocol are said to be of the same controller type. The controllers may be grouped into controller groups, each controller group handling containers formulated according to the same protocol. Anediting engine 106 may have controllers of different types. However, anentire editing engine 106 may be configured to have controllers of the same type. Theediting engine 106 may also have a load-balancingmodule 290. - The
editing engine 106 includes a number oftranscoders 280, individually identified as 280(1), 280(2), . . . , 280(n). The primary function of thetranscoders 280 is to perform direct digital-to-digital translation of encoded information to enable an information record of one format to be reproduced in a different format suitable for a specific receiver. A transcoder, however, may also perform processes of content filtering together with content adaptation. A number of selectedtranscoders 280 is assigned to eachcontroller 240, together forming a control assembly. For example, inFIG. 2 , controller 240(1) and transcoders 280(1) to 280(5) form one control assembly installed on a respective computing device. Controller 240(m) and transcoders 280(n-2) to 280(n) form another control assembly installed on another computing device. A control assembly is preferably installed on a server unit, also called a “blade server”, which is a single circuit board supporting processors and memory devices. - A
processor 220 hosts anetwork interface 210 and anoperation manager 230.Network interface 210 receives containers from clients communicatively coupled to network 140 (FIG. 1 ). Anoperation manager 230 comprises computer readable instructions stored in a computer readable storage medium for performing operation, administration, and maintenance functions. - A
service controller 103 may receive containers and send container editing requests to one of theediting engines 106. -
Processor 220 also hosts a graphical user interface (not illustrated), which comprises computer readable instructions stored in a computer readable storage medium, coupled tooperation manager 230, for entering an array of encoded rules and for assigning to each controller 240 a respective subset of transcoders. Configuration memory device 260 stores identifiers of transcoders assigned to each controller. - The rules governing the content filtering process may be stored as a common rule file stored in a
rules memory 225 which is accessed by eachtranscoder 280. Alternatively, each computing device (server unit) hosting a controller and associated transcoders may store a relevant subset of the rules file. -
FIG. 3 illustrates a container havingmultiple components 320, individually identified as 320(1), 320(2), etc. Acomponent 320 may contain a text, an audio recording, an encoded image, a video recording, and any of other content types. The content of a component is characterized using aset 330 ofdescriptors 332 individually identified as 332(1), 332(2), . . . 332(j), and 332 (D), D being a total number of descriptors. Content descriptors are defined according to several attributes such as content type, identifier (name), extension, digital signature, cryptographic functions, priority, and file size. Descriptors may be added or deleted as content-filtering requirements vary with the evolving art of multimedia telecommunications. - In accordance with an embodiment of the present invention, characteristics of the content of a container component are represented as a set of binary variables, each binary variable determining whether the content meets a specific criterion. The value of a content descriptor of a received container is determined by examining the content of the container. A transcoder performing this function is therefore aware of the format of the received container and implications of a protocol according to which the container is formulated. The value of a characterizing binary variable is determined by applying an
operator 344 to two operands; a value of the content descriptor (342) and acorresponding criterion 346 entered by an installer (a user) of the content-filtering system. Theoperator 344 and the twooperands - Editing a container before adaptation to suit a receiver is based on a set of rules, each rule determining an editing action such as deleting the entire content, deleting malicious insertions found in the content, or removing an attachment of the content. A rule is a function of a respective subset of the filters. Having selected the filters to be binary variables, the function defining a rule is preferably formulated as a Boolean expression of the subset of filters. Thus, an installer (a user) of a system for content filtering (as will be described in more detail with regard to
FIG. 7 andFIG. 8 ) defines a rule by a subset of filters, a Boolean expression, and an action to be performed according to an outcome executing the Boolean expression. -
FIG. 4 illustrates algebraic forms of Boolean expressions associated with a set of four rules, stored in arule vector 420, applicable to a component of a data container. The same set of rules may also be applied to at least one other component of the rule filter. - A first rule, Rule-1, is defined by a single filter (size>30000), where the content descriptor is the size of the component, the operator is “GREATER THAN” and the criterion is 30000 (reference numeral 440). The respective action, if the rule result is Boolean “true” is to drop the component and terminate processing of the remaining rules for the component under consideration.
- A second rule, Rule-2, is defined by a
Boolean expression 450 of two filters (size>5000) and (family≠message). The descriptor of the first filter is “size”, the criterion is “5000”, and the operator is “GREATER THAN”. The descriptor of the second filter is “family”, the criterion is “message”, and the operator is “NOT EQUAL”. The Boolean expression contains a single operator “OR”. The action associated with Rule-2 is the same as that of Rule-1. - A third rule, Rule-3, is defined by a
Boolean expression 460 of three filters: (size>25000), (content-type=image/wbmp), and (content-type=image/png). The descriptor of the first filter is “size”, the criterion is “25000”, and the operator is “GREATER THAN”. The descriptor of the second filter is “content-type”, the criterion is “image/wbmp”, and the operator is “EQUAL”. The descriptor of the third filter is “content-type”, the criterion is “image/png”, and the operator is “EQUAL”. The Boolean expression contains two operators “AND” and “OR”. The action of Rule-3 is the same as the action of Rule-1. It is noted that “wbmp” refers to Wireless Bitmap (Wireless Application Protocol, WAP, graphic format), and “png” refers to “Portable Network Graphics”. - A fourth Rule, Rule-4 is defined by a single filter (family=message), where the content of the descriptor is “family”, the criterion is “message”, and the operator is “EQUAL” (reference numeral 470).
-
FIG. 5 illustrates the basic components of a data acquisition sub-system incorporated inoperation manager 230 ofFIG. 2 and comprising auser interface 520, a filter-creatingmodule 530 for acquiring filter definitions, a rule-construction module 540 for acquiring rule definitions, amemory division 550 for storing filter definitions, and amemory division 560 for storing rule definitions (rule structures). Theuser interface 520 enables an installer (a user) to provideinput data 512 to define a set of filters and a set of rules. The filter-creation module 530 comprises computer readable instructions stored in a computer readable storage medium, which, when executed, cause a processor to prompt the installer to enter content-descriptor definitions, a criterion for each definition, and an operator. The values of the descriptors are determined according to the content of a received container. - The rule-
construction module 540 contains computer-readable instructions stored in a computer readable storage medium, which, when executed, cause a processor to prompt the installer to enter a Boolean expression for each rule, and select an action from a set of predefined actions. The computer-readable instructions also cause the processor to parse the Boolean expression and determine a sequence of executing terms of the expression. - The filter definitions are stored in a
memory division 550 of a memory device, and the rule definitions are stored in amemory division 560 of the same memory device, or of any other memory device. -
FIG. 6 illustrates a process of determining values of content descriptors of a receivedcontainer 612 using definitions of the content descriptors stored inmemory division 550. The receivedcontainer 612 is parsed instep 620 to identify the components of the container. Each component is analyzed instep 640 and instep 650 the results are paired with content-descriptor definitions read frommemory division 550. -
FIG. 7 illustrates the overall organization of a system for content filtering in accordance with an embodiment of the present invention. Amemory 710 stores data for all relevant filters. Each filter is defined by an operator from a set ofoperators 740 determined bymodule 530 ofFIG. 5 , a content descriptor from a set ofcontent descriptors 720 are determined instep 650 ofFIG. 6 , and a descriptor criterion from a set ofdescriptor criteria 730 determined inmodule 530 ofFIG. 5 . The binary value of each filter (“true” or “false) is stored in amemory device 750 for use in executing a set of rules defined inmodule 540 ofFIG. 5 . - Each rule is defined by a subset of filters, a Boolean expression, and an action. A
memory 770 stores encoded Boolean expressions determined inmodule 540 ofFIG. 5 according to system installer (user) input. Amemory 760 stores identifiers of filters used in each rule and respective Boolean expressions. Amemory 780 stores indications of editing actions to be performed subject to respective results of evaluating the Boolean expressions. The execution of each Boolean expression yields a binary result and a respective editing action. Upon completion of an editing action, the edited content is placed in amemory 790. - While
FIG. 7 illustrates the system for content filtering, according to an embodiment of the invention, as applied to a single component,FIG. 8 illustrates the system for content filtering ofFIG. 7 as applied to k>1 container components. Amemory device 810 stores data of all relevant filters of each of the k container components. The data pertinent to each filter is individually identified as 812(1) to 812(k). The components of the container are processed sequentially. The results of applying the operator of each filter, for a component under considerations, are held in amemory 850. A set of N>1 encoded Boolean expressions is stored in amemory 864. The Boolean expressions are individually identified as 870(1) to 870(N), each associated with a respective editing action from N editing actions, individually identified as 880(1) to 880(N). -
FIG. 9 illustrates an exemplary process of content filtering. An installer (a user) of the system for content filtering ofFIG. 7 orFIG. 8 has initially defined five content descriptors, individually identified as 920(1) to 920(5), eight descriptor criteria individually identified as 922(1) to 922(8), and four operators individually identified as 924(1) to 924(4). The installer has defined twelve filters, individually identified as 930(1) to 930(12), each filter specifying one of thecontent descriptors 920, one of thecriteria 922, and one of theoperators 924. Upon determining values of the five content descriptors 920(1) to 920(5), as described instep 650 ofFIG. 6 , the binary values of the twelve filters are determined. - The installer has defined six Boolean expressions, individually identified as 950(1) to 950(6), where each Boolean expression is associated with a subset of the 12 filters. For example, Boolean expression 950(2) is associated with two filters, 930(1) and 930(6), and Boolean expression 950(5) is associated with filters 930(2), 930(8), and 930(11). The installer defined four actions individually identified as 960(1) to 960(4). The installer then defined nine rules, individually identified as 940(1) to 940(9), using rule-
construction module 540 ofFIG. 5 . Each rule is associated with a singleBoolean expression 950 and asingle action 960. For example, rule 940(1) specifies Boolean expression 950(2) and action 960(2), while rule 940(9) specifies Boolean expression 950(5) and action 960(4). - A rule may be based on a single filter, where the result of the rule is the binary value of the filter. For example, rule 940(7) depends solely on filter 930(11).
- An installer of the system for content filtering of
FIG. 7 orFIG. 8 may provide aBoolean expression 950 according to conventional algebraic syntax or according to a tree structure. Theuser interface 520 ofFIG. 5 comprises a first module (not illustrated) for encoding a Boolean expression presented in algebraic form and a second module (not illustrated) for encoding a Boolean expression presented as a tree structure. Each of the two modules provides a respective template to enable the installer to properly specify a Boolean expression. - A Boolean expression comprises simple operations, compound operations, and complex operations. A simple operation is exhibited as an operator and two operands with the operator and operands bounded by two delimiters (such as two brackets). The operator and operands may be listed in any order and the two delimiters need not be distinguished from each other. The two operators are Boolean variables representing two filters. A compound operation comprises an operator and two simple operations with the operator and two simple operations bounded by two delimiters. A complex operation comprises an operator and two operations all bounded by two delimiters where either of the two operations may be a simple operation or a compound operation. The two operations constituting a complex operation may also be complex operations. Delimiters of a simple operation, compound operation, or complex operation may be identical.
-
FIG. 10 illustrates a method of evaluating the Boolean expressions, according to an embodiment of the present invention, which requires only recognizing and performing simple operations. According to the method, an encoded Boolean expression is parsed to identify simple operations. The operator of an identified simple expression is applied to the respective operands (filters) to produce a binary value of “true” or “false” (for example, represented as “1” and “0”). The operator, operand, and two delimiters of the identified simple operation, thus processed, are deleted and replaced by the result of the operation. The process continues recursively until the encoded Boolean expression reduces to a single simple operation, the result of which becoming the outcome of the Boolean expression. - In
step 1012 ofFIG. 10 , a Boolean expression is examined to identify a simple operation. If a simple operation is found (step 1014),step 1016 executes the simple operation and produces a binary value.Step 1018 replaces the operator, operands, and delimiters of the simple operation by the binary value.Step 1012 is then revisited to look for another simple operation in the reduced Boolean structure. Ifstep 1014 determines that no further simple operations are found in the current form of the Boolean expression,step 1020 examines the current form to determine if it has indeed reduced to a single binary value (“true”, false” or “1”, “0”). If so,step 1022 reports the single binary value as the result of executing the Boolean expression. Ifstep 1020 determines that the processed Boolean expression contains more than a single binary value,step 1024 reports an indication that the Boolean expression has not been correctly formed. - The process of
FIG. 10 is preferably performed during data entry so that the user (the installer) can correct the Boolean expression. Theuser interface 520 or some other component of the editing engine may be provided with computer instructions to analyze an erroneously formed Boolean expression and locate an error. - An alternative method of encoding and evaluation Boolean expressions, according to an embodiment of the present invention, relies on a graphical tree representation of a Boolean expression. An
exemplary rule tree 1100 is illustrated inFIG. 11 , which depicts a Boolean expression of six operands (six filters) identified as Filter-1 to Filter-6 each being a leaf of the tree. Three operators, denoted Θ1, Θ2, and Θ3, define three operations {Filter-1, Θ1, Filter-2}, {Filter-3, Θ2, Filter-4}, and {Filter-4, Θ3, Filter-6}. An immediate successor of each operator is defined. For example, the successors of Θ1, Θ2, and Θ3, are operators Θ5, Θ4, and Θ4, respectively, and the successors of operators Θ4 and Θ5 are Θ5 and “NULL”, respectively. An operator having a “NULL” successor produces a result of the Boolean expression. - Operator Θ1 produces a binary output B1, which is an operand of operator Θ5. Operator Θ2 produces a binary output B2 which is an operand of Θ4. Operator Θ3 produces a binary output B3 which is another operand of operator Θ4. Operator Θ4 produces a binary output B4 which is another operand of operator Θ5. Operator Θ5, produces binary output B*, which is the result of the Boolean expression represented by the tree.
-
FIG. 12 illustrates atemplate array 1230 for representing therule tree 1100 ofFIG. 11 . Anindex 1220 of thetemplate array 1230 varies from 0 to 19 as indicated inFIG. 12 . Thetemplate array 1230 is divided into a number of records equal to the total number of operators (five in the exemplary tree ofFIG. 11 ), each record corresponding to an operator and representing a simple operation having two operands. The binary values of filters are known after a container under consideration is processed. Thus, record includes indices of respective filters, an operator definition, and a pointer to another record corresponding to an immediately succeeding operator. A “NULL” pointer indicates that a current record is the last record to be processed. A user may enter the records in any order, and a module (not illustrated) within theuser interface 520 ofFIG. 5 reorganizes the records so that the records may be processed sequentially, and when any record is processed, the values of the respective operands would have been already determined. - As illustrated in
FIG. 12 , the first three records correspond to operators Θ1, Θ2, and Θ3 applicable to the six filters forming the leaves of the tree. Pointer π(1) of the first record points to index 16 of the array which holds the binary result B(1) of operator Θ1. Pointer π(2) of the second record points to index 12 of the array which holds the binary result B(2) of operator Θ2. Pointer π(3) of the third record points to index 13 of the array which holds the binary result B(3) of operator Θ3. Thus, when the fourth record is reached, the two operands B(2) and B(3) would have already been computed. The binary result B(4) of operator Θ4 is written in location π(4)=17. Thus, when the fifth record is reached, the respective two operands B(1) and B(4) would be already known. The binary output of operator Θ4 is the result of the Boolean expression because operand Θ4 has no successor (i.e., a null successor). - An exemplary activation of the
template array 1230 is also illustrated inFIG. 12 . The values of Filter-1 to Filter-6, determined according to the process ofFIG. 6 are “true”, “false”, “true”, “false”, “true”, and “true”, respectively. The Boolean operators Θ1 to Θ5 are specified by a user as “AND”, “OR”, “AND”, “AND”, and “XOR”, respectively. Operator “XOR” produces a binary output “true” which is the result of the Boolean expression since operator Θ4 (“XOR”), has a null successor. -
FIG. 13 illustrates a second exemplary rule tree 1300 corresponding to a Boolean expression of eleven leaves (filters) denoted L1 to L11, andFIG. 14 illustrates atemplate array 1430, similar to thetemplate array 1230 ofFIG. 12 , applied to the rule tree ofFIG. 13 with anindex 1420 ranging from 0 to 43. The rule tree 1300 comprises ten operators denoted Θ2 to Θ11. The first leaf, L1, is an operand of operator Θ11, which has no successor. For uniformity, a first record (denoted asRecord 1 inFIG. 14 ) oftemplate array 1430 ofFIG. 14 representing the rule tree 1300 is conceptually viewed to include operand L1 together with a “don't care” operand φ and a permissive non-existent operator Θ1, which conveys the value of L1 as an operand of successor operator Θ11. As known in the art, a “don't care” value assigned to the operand φ, may be conveniently either a “true” state or a “false” state. The remaining ten records, Record-2 to Record-11 oftemplate array 1430, correspond to operators Θ2 to Θ11. Each entry L1, L2, to L11, intemplate array 1430 ofFIG. 14 is an index (pointer) to a filter. As described above, with reference toFIG. 12 , aninput organizing module 522 associated withuser interface 520 ofFIG. 5 arranges the records so that the records can be processed sequentially with each record having already determined operands. -
FIG. 15 summarizes the tree encoding method using the template array 1230 (FIG. 12 ) or 1430 (FIG. 14 ). Instep 1520, a template having a number of records, each corresponding to a node in the tree is created. Each record comprises four fields containing indices of two filters, a current operator, and a pointer to a successor record corresponding to a successor of the current operator. Instep 1530, a list of filters determined according to the process ofFIG. 6 is prepared for a container under consideration. Instep 1540, the records of the tree template are processed sequentially. The operands of each record are acquired by indexing the list of filters. A respective operator is applied to the operands and the binary result is placed in an operand field of a successor record. Instep 1550, the result of the operator of the last record is presented as the result of the Boolean expression represented by the tree. -
FIG. 16 illustrates an alternative method of representing a rule tree structure according to an embodiment of the present invention. A set of filters (conditions) relevant to a rule is defined based on content descriptors, descriptor criteria and filter operators as described earlier. Definitions of the set of filters are stored in a filter-definition array. A set of Boolean operators is defined with one operator designated a null successor and each other operator designated a successor from the set of operators. The filters form leaves of a tree and are divided into subsets of filters where the filters of a subset form operands of a Boolean operator from among the set of Boolean operators. Notably, if each subset of filters includes two filters, then the total number of Boolean operators equals the total number of filters minus 1. - Considering a set of M filters, M>1, a template of a leaf vector comprising N leaf records is formed; 1<N<M. Each leaf record includes a leaf operator from among the set of operators and a respective subset of the filters. At the installation stage, each leaf record includes an operator and indices of the operands (filters) in the filter definition array. The values of the filters of each leaf record are determined for individual container components.
- A node vector having a number of node records equal to the number N of leaf records is formed. Each node record has a node-operator field and a node-state field. At the installation stage, the node records are empty, containing no data. The Boolean operators and the node states of the node records are initially determined during processing of the leaf records. The N node records may be arranged in any order. However, it is convenient to let the node records initially have a one-to-one correspondence to the leaf records. Thus, the Boolean operator of node record j is a successor the Boolean operator of leaf vector j, 1≦j≦N.
- Upon determining the values of the filters, each leaf operator is applied to respective filters (respective binary conditions) and a result is placed in a node-state field of a node record. A successor of each leaf operator is placed in node-operator field of the node record.
- After processing all leaf records, the node records are processed. Node records, herein called connected node records, having a common operator are then identified. The common operator is then applied to the node states of all the connected node records to produce a new state. The operator field of a selected node record, from the connected node records, is replaced by a successor of the common operator and the node-state field of the selected node record is replaced by the new state just determined. The remaining connected node records are deleted from the node vector. Thus, with the replacement of each set of connected node record with a combined node record, the number of node records in the node vector is reduced. The process of identifying connected node records continues recursively until the node vector contains only one node record. The result of applying the Boolean operator in the operator field of the remaining one node record is the result of evaluating the Boolean expression. The Boolean operator of the last node record has a null successor.
-
FIG. 16 illustrates arecursive rule construction 1600 for encoding a rule tree for the exemplary tree ofFIG. 13 , which represents a Boolean expression of eleven filters forming the leaves of the tree. The leaves (filters) are denoted L1 to L11. In the tree ofFIG. 13 , leaf L1 is not associated with any other leaf. For uniformity, leaf L1 is artificially associated with a leaf, φ, with which it shares a passive operator Θ1. The inserted leaf φ is assigned a “don't care” value. As well known in the art, a “don't care” value may be conveniently assigned either a “true” state or a “false” state. - A set of Boolean operators Θ2 to Θ11 is defined by a user. Operators Θ2 to Θ6 are associated with leaf records while operators Θ7 to Θ11 are associated with node records. Operator Θ11 has a null successor and each other operator Θ2 to Θ10 has a successor from the set of operators Θ7 to Θ11 as illustrated in
list 1610 ofFIG. 16 . - The
leaf vector 1620 comprises sixrecords 1622, individually identified as 1622(1) to 1622(6), assigned operators Θ1 to Θ6 placed in the operator fields 1624(1) to 1624(6) with indices of corresponding operands placed in operand fields 1626(1) to 1626(12). The operands in the operand fields of the six leaf records are {φ, L1}, {L2, L3}, {L4, L5}, {L6, L7}, {L8, L9}, and {L10, L11}. - When the binary values of the filters are determined (
FIG. 5 andFIG. 6 ), theleaf records 1622 are processed. Starting with leaf record 1622(1), the artificial passive operator Θ1 simply passes the value of L1 to the node-state field of node record 1642(1). Operator Θ11, which is the successor of Θ1, is placed in the operator field of node record 1642(1). The second leaf record 1622(2) is then processed where operator Θ2 is applied to leaves L2 and L3 (filters L2 and L3) to produce a binary value B2 to be placed in the node-state field of node record 1642(2). The successor of operator Θ2, which is operator Θ9, is placed in the operator field of node record 1622(2). The process continues until all the node records 1642(1) to 1642(6) are determined. - The process continues recursively using only the
node vector 1640; theleaf vector 1620 is no longer needed. The operator Θ11 in node record 1642(1) is not paired in the node vector 1640(1). Thus, node record 1642(1) remains unchanged. Likewise, node record 1642(2) remains unchanged because none of thenode records 1642 includes an operator Θ9. Node records 1642(3) and 1642(4) have a common operator Θ7, which is applied to operands B3 and B4 to produce a binary result B7 to be placed in the node-state field of node record 1642(3), replacing B3. The successor operator of operator Θ7, which is Θ9, is placed in the operator field of record 1642(3), replacing Θ7. Node record 1642(4), which is now consumed in the new combined record 1642(3), is deleted. Likewise, node records 1642(5) and 1642(6) are combined in a new node record having the successor operator Θ10 of operator Θ8 and a node state B8 determined by applying the common operator Θ8 to operands B5 and B6. Thenode vector 1640 now shrinks to four node records identified by the reference numeral 1640(2). Node record 1640(2) simply over-writes node record 1640(1). - The process continues recursively with node records 1642(2) and 1642(3) combined to produce new combined node record 1642(2) while node records 1642(1) and 1642(4) remain unchanged; the two unchanged node records are now records 1642(1) and 1642(3) in the reduced node vector 1640(3).
- Node records 1642(2) and 1642(3) have a common operator Θ10. Operator Θ10 is applied to operands B9 and B8 to produce a new state B10 which is placed in the node-state field of node record 1642(2). The successor operator Θ11 of operator Θ10 is placed in the node operator field of node record 1642(2). The common operator Θ11 of node records 1642(1) and 1642(2) is applied to operands B1 and B10 to produce the output B* of the Boolean expression.
-
FIG. 17 illustrates the process of determining the output of a rule tree using the leaf-vector template 1620 and node-vector template 1640 ofFIG. 16 . Instep 1720, the set of Boolean conditions (Boolean filters L2 to L11) characterizing the data content under consideration are determined. Instep 1722leaf vector 1620 having N>1leaf records 1622 is formed. Eachleaf record 1622 includes a Boolean-operator field 1624 and fields for a subset of Boolean conditions (a subset of filters L2 to L11). In step 1724 anode vector 1640 ofN node records 1642 is formed. Eachnode record 1642 includes aBoolean operator field 1644 and a node-state field 1648. Instep 1726, each leaf operator is applied to a respective subset of Boolean conditions (Boolean filters) which are determined from characteristics of content data as described above with reference toFIG. 5 andFIG. 6 . The binary result is placed in a node-state field of a selectednode record 1642. Instep 1728, a successor of each leaf operator is placed in the operator field of the selected node record. Instep 1730, node records having a common operator are replaced with a combined record, thus reducing the number ofnode records 1642 of thenode vector 1640. Instep 1732, the common operator is applied to the node states of the replaced node records and the binary result is placed in operator field of the combined record. Instep 1734, a successor of the common operator, determined fromlist 1610 ofFIG. 16 , is placed in the operator field of the combined node record. Instep 1736, if the number of remaining node records is larger than 1,step 1730 is revisited to continue the process of combining node records of a common operator. If the number of remaining records is 1, the operator of the remaining node record is applied to the node-states of the node record, and the result determines whether an editing action need be performed (step 1740). -
FIG. 18 is a flow chart detailing the process ofFIG. 17 . Instep 1820, to be detailed inFIG. 19 , a leaf-vector 1620 is formulated. The leaf records 1622 (1) to 1622(N) are considered sequentially. Instep 1824, and index j is set to equal 0. Ifstep 1826 determines that more leaf records are to be processed,step 1828 increases index j by 1 and acquires a leaf set (a filter set) corresponding to leaf indices of a current leaf record andstep 1830 acquires the operator θ (one of the operators Θ1 to Θ6) of the current leaf record.Step 1832 applies the operator to the acquired leaf set, resulting in a binary output B. Instep 1834, successor S(θ) is determined fromlist 1610 ofFIG. 16 . - The node-state fields and the operator fields of
node vector 1640 are herein denoted U(j), V(j), 1≦j≦N, i.e., U(j) and V(j) define node record 1642(j), 1≦j≦N. Instep 1836, the value of B is placed in node-state field U(j) of node-vector 1640 and the value of S(θ) is placed in operator field V(j) ofnode vector 1640. When all leaf records 1622(1) to 1622(N) are processed, the index j equals the number of leaf records N and eachnode record 1642 ofnode vector 1640 has a respective node operator and a node state. Instep 1840, the current number v ofnode records 1642 ofnode vector 1640 is set to equal j (which equals N). Instep 1842, if the current number of node records ν is larger than 1, the node vector is scanned to collect allnode records 1642 having the same operator and combine such records. Before scanning, a current number ν*=ν of node records is noted (step 1843) to enable detecting a change in the number of node records. An index k is set to equal zero instep 1844, and step 1846 records operator θ=V(k) of node record 1642(k).Step 1848 examines subsequent node records of thenode vector 1640 to identify a number, μ, of subsequent node records having the same operator θ. If the number μ of identified subsequent node records is zero (step 1850), the index k is increased by 1 instep 1852 and if the index k is less than the current number ν of node records,step 1846 is revisited. Otherwise,step 1856 collects the (μ+1) operands of the node records of the same operator θ and applies the operators θ to the (μ+1) operands to determine a new state B of a combined node record. Instep 1860, the subsequent μ identified node records are deleted andstep 1862 inserts the new state B in the node-state field U(k) of node record 1642(k) and a successor operator S(θ) in the operator field V(k) of node record 1642(k). The number of remaining node records is determined as (ν−μ) instep 1864.Steps step 1864 to determine if thenode vector 1640 contains further node records of a common operator. Ifstep 1854 determines that k is less than ν, scanning the node vector continues fromstep 1846. Otherwise, ifstep 1854 determines that k=ν (k cannot exceed ν),step 1855 ensures that the current value of ν (last updated in step 1864) is less than the previous value ν*. Otherwise, an error is reported instep 1880. Notably, the requirement ν<ν* ofstep 1855 is not met if the user-provided representation of the Boolean expression is incorrect. If ν<ν*,step 1855 is followed bystep 1842. Ifstep 1842 determines that the number of remaining node records is 1, the operator of the remaining node record is applied to respective operands to determine a state B* (step 1890), which determines a respective editing action. -
FIG. 19 details thestep 1820 ofFIG. 18 of formulatingleaf vector 1620 ofFIG. 16 . Instep 1920, a set of filters (conditions) is formulated and instep 1922 the leaf operators are determined based on user input as described with reference toFIG. 5 andFIG. 6 . The leaf operators are applied sequentially to generate corresponding leaf records 1622. Ifstep 1924 determines that at least one operator is not yet applied,step 1926 adds anew leaf record 1622 to the leaf vector.Step 1928 selects one of the remaining operators, andstep 1930 adds a filter associated to anoperand field 1624 of the leaf record.Step 1930 is repeated untilstep 1932 determines that all filters belonging to the selected operator have been included in thecurrent leaf record 1622. When thecurrent leaf record 1622 is completed, as determined instep 1932,step 1924 is revisited. Whenstep 1924 determines that all leaf operators have been considered, the completedleaf vector 1620 is presented to step 1824 ofFIG. 18 . -
FIG. 20 illustrates a method of pre-computing a binary value of a Boolean expression of a rule for each value of a set of filters. The set of filters is represented by a bit string having a number of bits bearing a one-to-one correspondence to the filters, so that each bit in the string corresponds to one filter. With μ>1 filters, the string contains μ bits and assume values ranging from 0 to 2μ-1. Instep 2012, a starting string value of 0 (μ bits all set to zero) is set, and each entry of a rule vector having 2μ entries is initialized to “0”. Instep 2014, the Boolean expression is evaluated using one of the methods described with reference toFIGS. 10 , 15, or 17. Instep 2016, the binary result (“true”, “false”) is stored in a rule vector at a position corresponding to a current value of the string (0 to 2μ-1). Instep 2018, the string value is increased by adding 1. Whenstep 2030 determines that each of the p bits of the string has a value of 0, the generation of the rule vector is complete (step 2040). Notably, a string with each of the μ bits having a value of “1” corresponds to the (2μ-1)th entry of the rule vector and adding 1 instep 2018 resets the string to μ zeros. Alternatively, the string may have (μ+1) bits with the most-significant bit used to indicate completion of the rule-vector generation. The rule vector may then be used to directly determine a binary value of a Boolean expression at run time, thus increasing the throughput of the content-filtering system. - In summary, the method of filtering contents of data containers then comprises the following steps:
- (1) A set of filters (binary conditions) is defined where each filter is a function of a selected descriptor of the content and a respective criterion of the descriptor.
- (2) A set of rules, each rule specifying a Boolean expression and a corresponding content-filtering action, is defined.
- (3) The Boolean expressions are considered one at a time.
- (4) Consider a Boolean expression of μ of filters (binary conditions). The filters are represented as a string of μ bits, μ>1.
- (5) Evaluate the Boolean expression for each of 2μ values of the string to produce a rule vector of 2μ entries, each entry being a state of a content metric corresponding to one of the 2μ values of the string.
- (6) Repeat step (5) for all Boolean expressions.
- (7) Receive and parse a data container.
- (8) Select a rule and determine values of the specified μ filters of the selected rule according to content of the data container.
- (9) Index a rule vector corresponding to the selected rule and determine a value of the entry in the rule vector corresponding to an index determined by the string of μ bits.
- (10) Execute a content-filtering action according to a value of the entry.
- (11) Repeat steps (8) to (10) if a new rule need be applied to the received container.
-
FIG. 21 illustrates a rule vector for a rule specifying a Boolean expression of a set of four filters (μ=4) denoted L1, L2, L3, and L4. The set of filters is represented by a string of four bits. The Boolean expression is evaluated for each of the 16values 2112 of the string, ranging from “0000” to “1111” to yield a binary output 2114(j), indicated as “true” or “false”, corresponding to string value j, 0≦j≦p of the string. - Upon receiving a container, the content of a container component is examined to determine a set of four filters for the rule considered in
FIG. 21 . If, for example, the set of four filters have values of “1”, “0”, “0”, and “1”, yielding astring 2140 of “1001”, the value of the Boolean expression is read directly from position 9 (binary 1001) of thebinary rule vector 2114. - The method of
FIG. 20 , with the exemplary illustration ofFIG. 21 , is suitable for rules employing Boolean expressions of a moderate number of operands (filters). For example, with 8 filters, thebinary rule vector 2114 would be relatively short, having only 256 bits. If a Boolean expression has more than 16 operands, for example, it may be preferable to evaluate the Boolean expression each time it is needed rather than storing a large binary rule vector. A number of operands, per Boolean expression, exceeding 16 may be unlikely. -
FIG. 22 illustrates a process of data entry relevant to filter definitions and rule definitions. The process starts with determining whether a rules file has already been created (step 2220). If a rules file has not yet been created,step 2222 creates a file using conventional methods known in the art. The next step is to add rules to the rules file. Populating or updating the rule file starts instep 2224.Step 2224 opens the rules file and directs the process to step 2226, which prompts a user to indicate whether a new rule is to be encoded and added to the rule file. Populating or updating the rule file is terminated by the user (step 2280). If more rules are to be added, a data-acquisition module (not illustrated) placed in the user interface 520 (FIG. 5 ) or in the operation, administration, and maintenance module 230 (FIG. 2 ) creates a rule template (step 2230). The rule template may optionally take one of many forms, which may be decided by the user. The form of a rule template depends on: (1) whether rules specified by the user are to be applied sequentially or according to a hierarchical order; and (2) whether the Boolean expression of a rule is to be entered in an algebraic-analytical format or in a tree-structure format where a node of a tree represents an operator and respective operands. In either case, the data-acquisition module may provide a respective template with instructions to facilitate data entry. For example, the data-acquisition module may guide the user into constructing an algebraic form of a Boolean expression by prompting the user to enter simple operations, each comprising an operator and a set of operands, then progressing towards the desired expression. The validity of the constructed expression may be verified with each addition of a new operator. If the Boolean expression is presented as a tree-structure, the data-acquisition module may display a generic tree structure, which may be pruned and validated as the user enters data relevant to selected nodes of the tree. - In
step 2232, a rule identifier, encoded in any suitable format, is provided. Instep 2234, a rule action is specified, andstep 2240 defines a Boolean expression associated with the rule. The rule action of a specific rule is applied according to a value of the associated Boolean expression.Step 2240 comprisessteps Step 2242 created a filter template as illustrated inFIG. 3 ,reference numeral 340.Step 2244 sets a type of the filter, which may be one of many descriptors of a content of a container under consideration.Step 2246 sets the filter's operator, which may be selected from a menu of unary operators, binary operators, arithmetic operators, comparison operators, logical operators, set operators, and user-defined operators.Step 2248 sets the filter's criterion, which is a target value or a threshold relevant to a descriptor selected instep 2244.Step 2250 prompts the user to either define a new filter for the rule or proceed towards defining the Boolean expression to be applied to the set of filters so far specified. To add another filter,steps 2242 to 2248 are revisited until the user determines instep 2250 that all relevant filters are present.Step 2252 prompts the user to enter the Boolean expression according to one of the formats described above. It is noted that a rule may be based on only one filter, as illustrated inFIG. 9 , in which case the Boolean expression reduces to a passive operator, which simply uses the value of the single filter to determine whether the rule action specified instep 2234 is to be applied. -
Step 2260 appends the rule just constructed to the rule file opened instep 2224. It is noted that the values of the filters of each rule thus constructed are to be determined at “run time” upon processing received containers. The encoded rules includes filters identifiers, which may simply be indices of an array (not illustrated) storing the filters. - The process of
FIG. 22 is performed during system installation or update. The rules encoded and stored in the rules file are activated in “real-time”. -
FIG. 23 illustrates a process of sequential filtering of components of a received multimedia container having a number of components. The order of processing of the components of the container for content filtering is arbitrary and may be set by the user. The order of processing of components would be consequential if an overall constraint on the entire container is imposed for some operational reasons. - The process of content filtering starts in
step 2320 when prompted by a controller 240 (FIG. 2 ). Having selected the order, in which the components are to be processed,step 2340 determines whether at least one component is yet to be processed instep 2350. Otherwise,step 2380 ends the process and reports results. Instep 2360, all rules of a rule set applicable to a component under consideration are executed, andstep 2340 is revisited to determine whether another component need be processed. Amodule 290 inserts a notification indicating any filtering action applied to a component. -
FIG. 24 details the step 2360 (FIG. 23 ) where a set of rules is applied to content of a container.Step 2360 applies to a component of a container.Step 2424 determines whether the entire rule set has been applied. If so,step 2480 appends a notification to the container indicating any content-filtering actions resulting from executing the set of rules. Otherwise,step 2428 selects a current rule and acquires definitions of all relevant filters associated with the selected current rule. Notably, the rules may be arranged in a specific order if the result of one rule influences selection of another rule. Additionally, the rule inter-dependence may be represented by a formal graph rather than a simple array as will be described with reference toFIG. 25 . -
Step 2430 executes the selected current rule.Step 2430 includessteps Step 2432 determines whether all filters identified instep 2428 have been activated to determine a binary value of each filter. A filter is said to be activated when its operator is applied to respective operands to produce a binary value of the filter. If all filters relevant to the current rule have been activated,step 2432 transfers control to step 2460. Otherwise, steps 2436, 2440, and 2444 are exercised to produce a value of a filter under consideration.Step 2436 acquires the operator and values of respective operands based on characteristics of the container content under consideration as described with reference toFIG. 5 andFIG. 6 .Step 2440 applies the operator to the operands, and step 2444 records the value of the current filter for use in evaluating the Boolean expression of current rule. -
Step 2460 acquires the Boolean expression according to one of the encoding methods ofFIG. 10 ,FIG. 15 , orFIG. 17 .Step 2464 evaluates the Boolean expression.Step 2468 may apply the content-filtering action associated with the current rule to the content of the content under consideration subject to the value of the Boolean expression as determined instep 2464. Instep 2470, if the content-filtering action of the current rule results in deleting the entire container component, then there is no need to execute subsequent rules, if any, and step 2360 appends a respective notification to the deleted component. If the content is not edited, or edited but not deleted,step 2424 is revisited to determine whether more rules need be applied to the content under consideration. Notably, an entire component may be deleted if it has an attachment exceeding a certain threshold, or if it has a malicious insertion that cannot be removed. - In general, rules applicable to a specific content may have complementing actions, conflicting actions, or mutually-exclusive actions. With complementing actions, the content-filtering result may be independent of the sequence of implementing the rules. With conflicting actions or mutually-exclusive actions, one action supersedes another. In accordance with an embodiment of the present invention, a user may be prompted to define the inter-relationship of rules using a graph.
-
FIG. 25 illustrates a graph indicating a hierarchical arrangement of five rules denotedRule 1 toRule 5. A state of a rule is herein defined as the binary value resulting from executing the Boolean expression of the rule. - A state of “true” of
Rule 1 results in an action labeled “action 1” after which step 2360 is considered complete. “Action 1” may call for one of two opposing extremes; the first being deleting the entire component either because it is too large or is irreparable, or determining that the component is acceptable because it is too short to contain malicious insertions. A state of “false” ofRule 1 indicates that the content passes a first test and should be subjected to a second test ofRule 2. - A state of “true” of
Rule 2 results in an action labeled “action 2” followed by implementingRule 5. A state of “false” ofRule 2 indicates that the content passes the second test and should be subjected to a third test ofRule 3, and so on. The process ends without editing the content if the state ofRule 4 is “false”. The process may also end after implementing (only) one: {action 1}, {action 2 andaction 5”, “action 3”, and “action 5”. -
FIG. 26 illustrates modules, listed below, used by theoperation manager 230. Each module comprises computer readable instructions stored in a computer readable storage medium. - (1) Server-
unit configuration module 2610 for configuring a server unit to accept multimedia data containers formed according to a specified protocol. - (2)
Load balancing module 2612 for equitably distributing multimedia data containers among server units identically-configured to process data containers of a common type. - (3) A filter-
definition module 2614 for acquisition of definitions of a set of filters from a user, each filter specifying a definition of a content descriptor, a descriptor criterion, and an operator. - (4) Boolean-
expression acquisition module 2616 for enabling a user to provide a Boolean expression according to algebraic syntax. - (5) Boolean-
expression acquisition module 2618 for enabling a user to provide a Boolean expression in the form of a tree structure. - (6) Boolean-
expression acquisition module 2620 for enabling a user to enter a Boolean expression by editing and pruning a drawing of a generic tree, where each node of a tree representing an operator and a respective set of operands. - (7) Rule-
construction module 2622 for acquisition of a set of content-filtering rules from a user, each rule specifying a Boolean expression of a subset of filters and a filtering action. - (8) Rule-
validation module 2624 for validating correctness of a Boolean expression specified for a rule. - (9) Rule-
arrangement module 2626 for arranging rules in an order according to which a specific filtering action performed by a rule precludes execution of at least one subsequent rule. - (10)
Rule inter-dependence module 2628 for prompting a user to specify a successive rule of a given rule conditional on a value of a respective Boolean expression of the given rule. - (11) Rule graph-
definition module 2630 for presenting a set of content-filtering rules in the form of a formal graph (FIG. 25 ). - (12) Rule-
optimization module 2632 for optimizing a Boolean expression of each rule, using conventional logic-optimization techniques, to minimize processing effort. - (13)
Rule pre-processing module 2634 for selecting specific rules each specifying a subset of filters comprising at most a preset number of filters, evaluating, for each of the specific rules, a Boolean expression of a subset of filters for all values of the subset of filters to produce an array of 2μ bits, μ>1 being a number of filters in the subset of filters, and storing the array of bits in a memory device (FIGS. 20 and 21 ). - (14)
Sorting module 2636 for sorting containers into container types, each container type corresponding to a protocol according to which a container is formulated at source, and directing containers of a specific type to a specific controller from among a plurality of containers. Thesorting module 2636 may be associated with thenetwork interface 210 or theoperation manager 230. -
FIG. 27 illustrates modules, listed below, used by atranscoder 280, in accordance with an embodiment of the invention. Each module comprises computer readable instructions stored in a computer readable storage medium. - (a)
Module 2710 for characterizing content of each component of a multimedia data container, determining content descriptors, applying an operator, and determining a state of a filter. - (b)
Module 2720 for run-time evaluation of Boolean expressions and determining a binary output of a rule. The Boolean expression may be presented according to algebraic syntax or as a tree structure. - (c)
Module 2730 for performing a filtering action relevant to a given container content, subject to a preset value a Boolean expression of a respective rule -
FIG. 28 illustrates atranscoder 280 comprising a transcoder-service module 2810, aprogram registry 2820, andprogram storage 2840, in accordance with an embodiment of the invention. The transcoder-service module comprises computer readable instructions stored in a computer readable storage medium, which, when executed, cause a core of the processor to: receive a specific container and an editing request from a specific controller from the plurality of controllers; select and execute programs relevant to the editing request; and return a result to the specific controller. The program registry comprises computer readable instructions which, when executed, causes a processor to organize programs according to respective functions; and replace existing programs with respective new programs. - A controller 240 (
FIG. 2 ) forwards an editing request to atranscoder 280. Upon receiving anediting request 2850, the transcoder-service module 2810 identifies which plugin program to execute using information contained in the editing request. The transcoder-service module 2810 executes the selected plugin program and returns the result to arespective controller 240. - A “plugin” is defined herein as a self-contained module devised to perform a specific task.
Program storage 2840 comprises computer readable instructions stored in a computer readable storage medium and includes two types of plugins: - (a)
resident plugins 2842 which are loaded initially; and - (b)
external plugins 2844 which are loaded dynamically, external plugins may replace resident plugins. - Resident plugins provide basic functions, and external plugins provide additional functions, content filtering and virus scanning are two examples of such functions.
- Plugins are registered with the
program registry 2820 which manages plugin registration and access. Theprogram registry 2820 organizes plugins based on their characteristics. Plugins may be arranged in plugin groups. - Plugin programs organize execution of plugins in a predefined fashion. Plugin programs are built from a simple set of instructions which determine the execution logic for a predefined set of plugins having specific goals.
- An example of instructions of a simple program that uses plugins is presented next.
- (01) OnErrorGoto TERMINATION_PLUGIN
- (02) Execute DEFAULT_SETUP_INITIAL_PROFILE
- (03) Execute DEFAULT_SETUP_SESSION
- (04) Execute DEFAULT_PRE_PROCESS_DECODE_PLUGIN
- (05) ExecuteGroup GROUP_HOT_PIPELINE_DUAL_LOAD_AROUND_CREATE
- (06) Execute DEFAULT_TRANSFORMER_PLUGIN
- (07) Execute DEFAULT_CREATOR_PLUGIN
- (08) ExecuteGroup GROUP_HOT_PIPELINE_CREATOR
- (09) ExecuteGroup GROUP_HOT_PIPELINE_DUAL_LOAD_AROUND_CREATE
- (10) Execute DEFAULT_CHARGE_DATA_RECORD_PLUGIN
- (11) Execute DEFAULT_OPTIMISER_PLUGIN
- (12) ExecuteGroup GROUP_HOT_PIPELINE_ANALYSER
- (13) Execute DEFAULT_ENCODE_PLUGIN
- (14) Label TERMINATION_PLUGIN
- (15) Execute DEFAULT_CHARACTERIZE_PLUGIN
- (16) ExecuteGroup GROUP_HOT_PIPELINE_TERMINATOR
- (17) Execute DEFAULT_UNSETUP_SESSION
- (18) Execute DEFAULT_CHARGE_DATA_RECORD_PLUGIN
- It is noted that the numbers on the left are introduced only for ease of reference and do not necessarily constitute a part of the instructions.
- Each “Execute” command has the name of a plugin as an argument that always refers to resident plugin names. An external plugin is never directly referenced by name since it is optional, and is thus executed only if present. Each “ExecuteGroup” command has the name of a plugin group as argument. Command “Execute Group” executes all the plugins that belong to that group.
-
Line 1 states that on any error the program is to jump toline 14 and resume execution withlines 15 to 18.Lines Line 4 performs decoding of input if required, for example if the input is EMAIL then it is broken into its sub-components;Line 5 andline 9 execute a plugin group to which Content Filtering plugin belongs to. So if present, it starts execution online 5 and terminates online 9;Line 6 andline 7 are used respectively to perform setup operations necessary for the creation of an adaptation pipeline and to actually create it. The adaptation pipeline contains a set of operations to be executed to perform the required adaptation;Line 8 is meant to execute any external plugin that has an effect on the adaptation pipeline before it is executed;Line 10 provides details of input components that will take part in the adaptation.Line 18 performs a similar task on the output components. Such information may be analyzed for reporting, billing and other purposes not necessarily related to the adaptation function;Line 11 performs adaptation-pipeline optimization;Line 12 executes any external plugin that performs analysis and optimization of the adaptation pipeline before its execution;Line 13 executes the adaptation pipeline;Line 15 characterizes the output components generated as a result of the execution of the adaptation pipeline;Line 16 executes any external plugin that has an effect on the output components that were generated; andLine 17 performs additional steps completing the adaptation (such as providing a detailed adaptation record). - Rules are permanently stored in “Rule Files”. A rule file may apply to more than one controller. Content filtering, using a rule file, applies the rules contained in the rule file against media (content). If a given rule evaluates to “true”, a corresponding action is performed. An action may include removing undesirable content such as viruses (including mobile specific viruses); removing media of a particular type (such as games); using third party applications to perform actions on media (such as scanning a media for viruses). However, a content of a particular type may pass-through without processing.
- The definition of rules is done in the operation manager 230 (
FIG. 2 ). The application of rules to affect content editing (filtering and adaptation) is done in atranscoder 280. Once a rule file is created then the user optionally configures one of thecontrollers 240 to send the rule file along with any adaptation request to atranscoder 280 it selects. - An action “Drop” ensures that a media is not part of the output of a content adaptation process. An action “scan keep” results in scanning a media for viruses. This assumes that the Anti-virus external plugin is installed. The media is actually “marked” as “scan for virus”, so that at the point of the execution of the appropriate plugin program where the anti-virus plugin is executed all media marked as “scan for virus” are scanned for viruses.
- An example of a rule called
rule 1 is given below. -
Rule Name=“MaxFileSize50000” Action=“Drop” Filter Type=“MaxFileSize” Operator=“GreaterThan” Value=“50000” Filter FilterOperator=“AND” Type=“Family” Operator=“NotEqual” Value=“MESSAGE” - The name associated with
rule 1 is “MaxFileSize50000” whereas the action corresponding to the rule is “Drop” for removing any media that match the filter(s) contained in the rule. This rule specifies two filters. The first filter is of type “MaxFileSize” that is applied against the size of a file. The filter operator is “GreaterThan” where as the value is “50000”. The second filter is characterized by a type called “Family”. This filter is applied against the media family (ex: IMAGE, AUDIO, etc). The operator associated with the filter is not “NotEqual” and the value is “MESSAGE. The filters are combined by using a boolean operator “AND”. Thus, if a file has a size greater than 50000 and is not of family “MESSAGE” then the specified action is performed. - Another rule, called
rule 2 is described next: -
Rule Name=“MaxFileSize25000AndContentTypes” Action=“Drop” Filter Type=“MaxFileSize” Operator=“GreaterThan” Value=“25000” BracketOpen FilterOperator=“AND” Filter Type=“ContentType” Operator=“Equals” Value=“image/wbmp” Filter FilterOperator=“OR” Type=“ContentType” Operator=“Equals” Value=“image/png” BracketClose - The name of the rule is “MaxFileSize25000AndContentTypes” and the corresponding action is “Drop”. The purpose of
rule 2 is to remove any media that match the filter(s) contained in the rule. A detailed description of the structure ofrule 2 is presented next. - Only the following filters are specified.
-
- 1st filter:
- filter type is “MaxFileSize” and the filter is applied against the size of a file;
- operator is “GreaterThan”;
- the value is “25000”;
- Bracket Open with “AND” boolean filter operator
- 2nd filter:
- filter type is “ContentType” and the filter is applied against the content type (equivalent to mimetype) of a media;
- operator is “Equals”;
- the value is “image/wbmp”;
- 3rd filter:
- has boolean filter operator “OR”;
- filter type is “ContentType” and the filter is applied against the content type (equivalent to mimetype) of a media;
- operator is “Equals”;
- the value is “image/png”;
- Bracket Close.
- 1st filter:
- Thus, if a file has a size greater than “25000” AND (has a content-type equal to “image/wbmp” OR has a content-type equal to image/png) then the action specified in the rule is performed. Actions can affect the media or any of its attachments if the media is a container such as an email or an MMS. Actions can include: keep (adapt the media); keep & scan (scan the media for viruses before adapting); drop (do not include the attachment in the final message); pass-through (do not adapt the media, leave it unchanged).
- An
example rule 3 that is defined in a common rule file is described next. -
Rule Name=“MaxFileSize300000” Action=“Drop” Filter Type=“MaxFileSize” Operator=“GreaterThan” Value=“300000” - Another example,
rule 4, that completes that common rule file is presented. -
Rule Name=“VirusScan” Action=“ScanKeep” Filter Type=“Family” Operator=“Equals” Value=“MESSAGE” - In this case a common rule file contains:
-
rule 3 which “drops” all files that have a size greater than 300000; and -
rule 4 which performs a virus scan on any media that are messages. - Consider a case where a common rule file is applied to all controllers and that some controller “X” has defined a rule file that contained
rules rules 1 to 4. The structure of “RuleFile1” is presented. -
Rule Name=“MaxFileSize50000” Action=“Drop” Filter Type=“MaxFileSize” Operator=“GreaterThan” Value=“50000” Filter FilterOperator=“AND” Type=“Family” Operator=“NotEqual” Value=“MESSAGE” Rule Name=“MaxFileSize25000AndContentTypes” Action=“Drop” Filter Type=“MaxFileSize” Operator=“GreaterThan” Value=“25000” BracketOpen FilterOperator=“AND” Filter Type=“ContentType” Operator=“Equals” Value=“image/wbmp” Filter FilterOperator=“OR” Type=“ContentType” Operator=“Equals” Value=“image/png” BracketClose Rule Name=“MaxFileSize300000” Action=“Drop” Filter Type=“MaxFileSize” Operator=“GreaterThan” Value=“300000” Rule Name=“VirusScan” Action=“ScanKeep” Filter Type=“Family” Operator=“Equals” Value=“MESSAGE” - In the context of an embodiment that provides this feature, XML is used to manage the structure of rules inside rule files. This ensures portability and scalability. An XML version of RuleFile1 is presented next.
-
<?xml version=“1.0” encoding=“UTF-8”?> <ContentFiltering xmlns:xsi=“http://www.w3.org/2001/XMLSchema- instance” xsi:type=“ContentFiltering”> <CompatibilityVersion>7.0</CompatibilityVersion> <Version>7.0</Version> <Name>RuleFile1</Name> <FilterRule Name=“MaxFileSize50000” Action=“Drop”> <Filter Type=“MaxFileSize” Operator=“GreaterThan” Value=“50000”/> <Filter FilterOperator=“AND” Type=“Family” Operator=“NotEqual” Value=“MESSAGE”/> </FilterRule> <FilterRule Name=“MaxFileSize25000AndContentTypes” Action=“Drop”> <Filter Type=“MaxFileSize” Operator=“GreaterThan” Value=“25000”/> <Bracket FilterOperator=“AND”> <Filter Type=“ContentType” Operator=“Equals” Value=“image/wbmp”/> <Filter FilterOperator=“OR” Type=“ContentType” Operator=“Equals” Value=“image/png”/> </Bracket> </FilterRule> <FilterRule Name=“MaxFileSize300000” Action=“Drop”> <Filter Type=“MaxFileSize” Operator=“GreaterThan” Value=“300000”/> </FilterRule> <FilterRule Name=“VirusScan” Action=“ScanKeep”> <Filter Type=“Family” Operator=“Equals” Value=“MESSAGE”/> </FilterRule> </ContentFiltering> - An example of content filtering is presented below. Consider a multimedia container:
-
- MMS characteristics:
- Name: mms1.mms
- Family: MESSAGE
- Size: 171100
- Content-type: application/vnd.wap.multipart.mixed
- Number of attachments: 3
- MMS attachment characteristics:
- Name: image.jpg
- Family: IMAGE
- Size: 75000
- Content-type: image/jpg
- Name: image2.jpg
- Family: IMAGE
- Size: 45000
- Content-type: image/jpg
- Name: image.png
- Family: IMAGE
- Size: 50000
- Content-type: image/png
- MMS characteristics:
- Content filtering is performed according to the following steps:
-
- the MMS goes through content filtering;
- rule “VirusScan” evaluates to “true for this media since media belongs to family “MESSAGE”;
- media is marked as “scan for virus”.
- the attachment image.jpg goes through content filtering:
- a rule “MaxFileSize50000” evaluates to “true” since the media is not a message and its size is greater than 50000;
- media is marked as “Drop”.
- the attachment image2.jpg goes through content filtering:
- none of the rules evaluates to “true” for this media;
- the second attachment image.png goes through content filtering:
- a rule “MaxFileSize25000AndContentTypes” evaluates to “true” for this media since media has size greater than 25000 and has content-type “image/png”;
- media marked as “Drop”.
- the MMS goes through content filtering;
- The plugin program resumes after the execution of the content filtering plugin. This results in the scanning of the MMS media and its content for virus by the Anti-virus plugin. The adaptation process then starts. Consider the case where the adaptation and content filtering produce an output MMS that is of the following form.
- MMS characteristics:
-
- Name: mms1out.mms
- Family: MESSAGE
- Size: 25175
- Content-type: application/vnd.wap.multipart.mixed
- Number of attachments: 2
- MMS attachment characteristics:
-
- Name: image2.gif
- Family: IMAGE
- Size: 24000
- Content-type: image/gif
- Name: removal_notification.txt
- Family: TEXT
- Size: 75
- Content-type: text/plain
- It is assumed that, as a result of content adaptation, “image2.jpg” was adapted to output “image2.gif”. Note that both “image.jpg” and “image.png” were “dropped” and are not part of the output MMS resulting from the content filtering actions being applied. A new media “removal_notification.txt” is added to the output message. This results from the removal of “image.jpg” and “image.png”. Transcoders are devised so that, upon removal of a media, an explanatory text notification is attached. This notification is intended to provide an explanation to the receiver of the MMS that some of the media originally in the MMS could not be adapted and were removed.
- Anti-virus scanning is present in Transcoders in the form of an external plugin. In this case the plugin architecture is used to provide an interface to a third party anti-virus scanning engine such as McAffee or Kaspersky. The presence of the Anti-virus plugin is optional as with any external plugin. At the plugin program level, a plugin program that is meant to execute the Anti-virus plugin would contain a command that executes the plugin group to which the Anti-virus plugin belongs.
- Execution of the anti-virus plugin does not automatically imply that the media will be scanned for viruses. Virus scanning is performed only on media that are marked as “scan for virus” by content filtering. Some third-party Anti-virus engines may be installed as stand-alone libraries. Other third-party Anti-virus engines may be installed as client-servers. The Anti-virus plugin would be written in such a way as to properly interface with the third-party Anti-virus engine. In any case, the anti-virus plugin is the transcoder's entry point to perform virus scanning on the media that go through content-adaptation.
- Thus, in the above described embodiments, the following features have been provided: (1) ability to parse a message in order to check the attachments; (2) ability to characterize an attachment in order to filter it according to content type; and (3) accommodating a user-defined, expandable, and hierarchic set of rules to determine whether a media element is desirable or not.
- Editing actions determine how media attachments are treated. The editing actions may include one or more of the following: presenting an attachment to the adaptation process; keeping an attachment and scanning the media for viruses before presenting to the adaptation process; and dropping an attachment. Editing actions may include invoking anti-virus and intrusion-prevention software programs.
- Although specific embodiments of the invention have been described in detail, it should be understood that the described embodiments are intended to be illustrative and not restrictive. Various changes and modifications of the embodiments shown in the drawings and described in the specification may be made within the scope of the following claims without departing from the scope of the invention in its broader aspect.
Claims (20)
Priority Applications (15)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/266,362 US20090126020A1 (en) | 2007-11-09 | 2008-11-06 | Engine for rule based content filtering |
CN201410117632.6A CN103886376B (en) | 2007-11-09 | 2008-11-07 | System and method for rule-based information filtering |
PCT/CA2008/001963 WO2009059419A1 (en) | 2007-11-09 | 2008-11-07 | An engine for rule based content filtering |
EP08847200.6A EP2206308A4 (en) | 2007-11-09 | 2008-11-07 | System and method for rule based content filtering |
CA2703107A CA2703107C (en) | 2007-11-09 | 2008-11-07 | System and method for rule based content filtering |
CN200880114945.9A CN101849399B (en) | 2007-11-09 | 2008-11-07 | System and method for rule based content filtering |
KR1020147018903A KR20140095111A (en) | 2007-11-09 | 2008-11-07 | System and method for rule based content filtering |
KR1020107012721A KR101451285B1 (en) | 2007-11-09 | 2008-11-07 | System and method for rule based content filtering |
CA3105860A CA3105860A1 (en) | 2007-11-09 | 2008-11-07 | Method and apparatus for editing contents of data containers of different types and network containing thereof |
EP08847175.0A EP2218235A4 (en) | 2007-11-09 | 2008-11-07 | An engine for rule based content filtering |
JP2010532392A JP5275362B2 (en) | 2007-11-09 | 2008-11-07 | Rule-based content filtering system and method |
CA2703092A CA2703092C (en) | 2007-11-09 | 2008-11-07 | Method and apparatus for editing data containers and network containing thereof |
PCT/CA2008/001964 WO2009059420A1 (en) | 2007-11-09 | 2008-11-07 | System and method for rule based content filtering |
IL204725A IL204725A (en) | 2007-11-09 | 2010-03-25 | System and method for rule based content filtering |
JP2013103228A JP5659397B2 (en) | 2007-11-09 | 2013-05-15 | Rule-based content filtering system and method |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US98683507P | 2007-11-09 | 2007-11-09 | |
US12/266,362 US20090126020A1 (en) | 2007-11-09 | 2008-11-06 | Engine for rule based content filtering |
Publications (1)
Publication Number | Publication Date |
---|---|
US20090126020A1 true US20090126020A1 (en) | 2009-05-14 |
Family
ID=40624685
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US12/266,353 Active 2030-06-03 US8019709B2 (en) | 2007-11-09 | 2008-11-06 | Method and system for rule-based content filtering |
US12/266,362 Abandoned US20090126020A1 (en) | 2007-11-09 | 2008-11-06 | Engine for rule based content filtering |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US12/266,353 Active 2030-06-03 US8019709B2 (en) | 2007-11-09 | 2008-11-06 | Method and system for rule-based content filtering |
Country Status (8)
Country | Link |
---|---|
US (2) | US8019709B2 (en) |
EP (2) | EP2218235A4 (en) |
JP (2) | JP5275362B2 (en) |
KR (2) | KR20140095111A (en) |
CN (2) | CN101849399B (en) |
CA (3) | CA2703092C (en) |
IL (1) | IL204725A (en) |
WO (2) | WO2009059420A1 (en) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110161272A1 (en) * | 2009-12-31 | 2011-06-30 | International Business Machines Corporation | Interface for creating and editing boolean logic |
US20120011470A1 (en) * | 2010-07-12 | 2012-01-12 | Samsung Electronics Co. Ltd. | Method and apparatus for managing menu item in a portable terminal |
WO2012024761A1 (en) * | 2010-08-26 | 2012-03-01 | Vantrix Corporation | Method and apparatus for concurrent filtering of multiple components of streaming data |
US20130139247A1 (en) * | 2011-11-29 | 2013-05-30 | Bayshore Networks, Inc. | Firewall apparatus, systems, and methods employing detection of application anomalies |
US20130311657A1 (en) * | 2010-12-20 | 2013-11-21 | Telefonaktiebolaget Lm Ericsson (Publ) | Method of selecting a composite service from a plurality of composite services |
US20150254246A1 (en) * | 2014-03-06 | 2015-09-10 | Yahoo! Inc. | Methods and Systems for Ranking Items on a Presentation Area Based on Binary Outcomes |
CN111078026A (en) * | 2019-11-15 | 2020-04-28 | 北京乐我无限科技有限责任公司 | Input prompting method and device, electronic equipment and readable storage medium |
Families Citing this family (183)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8930331B2 (en) | 2007-02-21 | 2015-01-06 | Palantir Technologies | Providing unique views of data based on changes or rules |
US8447718B2 (en) * | 2007-11-09 | 2013-05-21 | Vantrix Corporation | Method and apparatus for filtering streaming data |
US8019709B2 (en) * | 2007-11-09 | 2011-09-13 | Vantrix Corporation | Method and system for rule-based content filtering |
US8442928B2 (en) * | 2007-11-09 | 2013-05-14 | Vantrix Corporation | Method and apparatus for employing rules to filter streaming data |
US8984390B2 (en) | 2008-09-15 | 2015-03-17 | Palantir Technologies, Inc. | One-click sharing for screenshots and related documents |
GB2466851A (en) * | 2009-01-13 | 2010-07-14 | Oracle Int Corp | Method and interface for defining a complex Boolean expression |
US9104695B1 (en) | 2009-07-27 | 2015-08-11 | Palantir Technologies, Inc. | Geotagging structured data |
US8700764B2 (en) * | 2009-09-28 | 2014-04-15 | International Business Machines Corporation | Routing incoming messages at a blade chassis |
CN102053993B (en) | 2009-11-10 | 2014-04-09 | 阿里巴巴集团控股有限公司 | Text filtering method and text filtering system |
US9047375B2 (en) * | 2010-07-22 | 2015-06-02 | Verizon Patent And Licensing Inc. | Internet video content delivery to television users |
US8595839B2 (en) | 2011-01-21 | 2013-11-26 | International Business Machines Corporation | Selecting one of a plurality of scanner nodes to perform scan operations for an interface node receiving a file request |
US8799240B2 (en) | 2011-06-23 | 2014-08-05 | Palantir Technologies, Inc. | System and method for investigating large amounts of data |
US9092482B2 (en) | 2013-03-14 | 2015-07-28 | Palantir Technologies, Inc. | Fair scheduling for mixed-query loads |
US9547693B1 (en) | 2011-06-23 | 2017-01-17 | Palantir Technologies Inc. | Periodic database search manager for multiple data sources |
US8732574B2 (en) | 2011-08-25 | 2014-05-20 | Palantir Technologies, Inc. | System and method for parameterizing documents for automatic workflow generation |
US8504542B2 (en) | 2011-09-02 | 2013-08-06 | Palantir Technologies, Inc. | Multi-row transactions |
US8732207B2 (en) * | 2012-07-02 | 2014-05-20 | International Business Machines Corporation | Attribute-based linked tries for rule evaluation |
US9798768B2 (en) | 2012-09-10 | 2017-10-24 | Palantir Technologies, Inc. | Search around visual queries |
US9348677B2 (en) | 2012-10-22 | 2016-05-24 | Palantir Technologies Inc. | System and method for batch evaluation programs |
US9501507B1 (en) | 2012-12-27 | 2016-11-22 | Palantir Technologies Inc. | Geo-temporal indexing and searching |
US9380431B1 (en) | 2013-01-31 | 2016-06-28 | Palantir Technologies, Inc. | Use of teams in a mobile application |
US10140664B2 (en) | 2013-03-14 | 2018-11-27 | Palantir Technologies Inc. | Resolving similar entities from a transaction database |
US10037314B2 (en) | 2013-03-14 | 2018-07-31 | Palantir Technologies, Inc. | Mobile reports |
US9965937B2 (en) | 2013-03-15 | 2018-05-08 | Palantir Technologies Inc. | External malware data item clustering and analysis |
US8909656B2 (en) | 2013-03-15 | 2014-12-09 | Palantir Technologies Inc. | Filter chains with associated multipath views for exploring large data sets |
US8917274B2 (en) | 2013-03-15 | 2014-12-23 | Palantir Technologies Inc. | Event matrix based on integrated data |
US8788405B1 (en) | 2013-03-15 | 2014-07-22 | Palantir Technologies, Inc. | Generating data clusters with customizable analysis strategies |
US8868486B2 (en) | 2013-03-15 | 2014-10-21 | Palantir Technologies Inc. | Time-sensitive cube |
US8924388B2 (en) | 2013-03-15 | 2014-12-30 | Palantir Technologies Inc. | Computer-implemented systems and methods for comparing and associating objects |
US10275778B1 (en) | 2013-03-15 | 2019-04-30 | Palantir Technologies Inc. | Systems and user interfaces for dynamic and interactive investigation based on automatic malfeasance clustering of related data in various data structures |
US8937619B2 (en) | 2013-03-15 | 2015-01-20 | Palantir Technologies Inc. | Generating an object time series from data objects |
US8799799B1 (en) | 2013-05-07 | 2014-08-05 | Palantir Technologies Inc. | Interactive geospatial map |
US9223773B2 (en) | 2013-08-08 | 2015-12-29 | Palatir Technologies Inc. | Template system for custom document generation |
US9335897B2 (en) | 2013-08-08 | 2016-05-10 | Palantir Technologies Inc. | Long click display of a context menu |
US8713467B1 (en) | 2013-08-09 | 2014-04-29 | Palantir Technologies, Inc. | Context-sensitive views |
US9785317B2 (en) | 2013-09-24 | 2017-10-10 | Palantir Technologies Inc. | Presentation and analysis of user interaction data |
US8938686B1 (en) | 2013-10-03 | 2015-01-20 | Palantir Technologies Inc. | Systems and methods for analyzing performance of an entity |
US8812960B1 (en) | 2013-10-07 | 2014-08-19 | Palantir Technologies Inc. | Cohort-based presentation of user interaction data |
US8924872B1 (en) | 2013-10-18 | 2014-12-30 | Palantir Technologies Inc. | Overview user interface of emergency call data of a law enforcement agency |
US9116975B2 (en) | 2013-10-18 | 2015-08-25 | Palantir Technologies Inc. | Systems and user interfaces for dynamic and interactive simultaneous querying of multiple data stores |
US9021384B1 (en) | 2013-11-04 | 2015-04-28 | Palantir Technologies Inc. | Interactive vehicle information map |
US8868537B1 (en) | 2013-11-11 | 2014-10-21 | Palantir Technologies, Inc. | Simple web search |
US9105000B1 (en) | 2013-12-10 | 2015-08-11 | Palantir Technologies Inc. | Aggregating data from a plurality of data sources |
US10579647B1 (en) | 2013-12-16 | 2020-03-03 | Palantir Technologies Inc. | Methods and systems for analyzing entity performance |
US10025834B2 (en) | 2013-12-16 | 2018-07-17 | Palantir Technologies Inc. | Methods and systems for analyzing entity performance |
US9552615B2 (en) | 2013-12-20 | 2017-01-24 | Palantir Technologies Inc. | Automated database analysis to detect malfeasance |
US10356032B2 (en) | 2013-12-26 | 2019-07-16 | Palantir Technologies Inc. | System and method for detecting confidential information emails |
US8832832B1 (en) | 2014-01-03 | 2014-09-09 | Palantir Technologies Inc. | IP reputation |
US9043696B1 (en) | 2014-01-03 | 2015-05-26 | Palantir Technologies Inc. | Systems and methods for visual definition of data associations |
EP3091708B1 (en) | 2014-01-28 | 2019-01-23 | Huawei Technologies Co., Ltd. | Processing rule modification method and apparatus |
US9483162B2 (en) | 2014-02-20 | 2016-11-01 | Palantir Technologies Inc. | Relationship visualizations |
US9009827B1 (en) | 2014-02-20 | 2015-04-14 | Palantir Technologies Inc. | Security sharing system |
US9727376B1 (en) | 2014-03-04 | 2017-08-08 | Palantir Technologies, Inc. | Mobile tasks |
US8935201B1 (en) | 2014-03-18 | 2015-01-13 | Palantir Technologies Inc. | Determining and extracting changed data from a data source |
US9836580B2 (en) | 2014-03-21 | 2017-12-05 | Palantir Technologies Inc. | Provider portal |
US9888379B2 (en) | 2014-04-16 | 2018-02-06 | Verizon Patent And Licensing Inc. | Affiliation and disaffiliation of computing devices |
US9857958B2 (en) | 2014-04-28 | 2018-01-02 | Palantir Technologies Inc. | Systems and user interfaces for dynamic and interactive access of, investigation of, and analysis of data objects stored in one or more databases |
US9009171B1 (en) | 2014-05-02 | 2015-04-14 | Palantir Technologies Inc. | Systems and methods for active column filtering |
FR3021788B1 (en) * | 2014-05-30 | 2023-07-21 | Amadeus Sas | CONTENT ACCESS METHOD AND SYSTEM |
US9870434B1 (en) * | 2014-06-20 | 2018-01-16 | EMC IP Holding Company LLC | Techniques for filtering workload and performance data |
US9619557B2 (en) | 2014-06-30 | 2017-04-11 | Palantir Technologies, Inc. | Systems and methods for key phrase characterization of documents |
US9129219B1 (en) | 2014-06-30 | 2015-09-08 | Palantir Technologies, Inc. | Crime risk forecasting |
US9535974B1 (en) | 2014-06-30 | 2017-01-03 | Palantir Technologies Inc. | Systems and methods for identifying key phrase clusters within documents |
US9256664B2 (en) | 2014-07-03 | 2016-02-09 | Palantir Technologies Inc. | System and method for news events detection and visualization |
US10572496B1 (en) | 2014-07-03 | 2020-02-25 | Palantir Technologies Inc. | Distributed workflow system and database with access controls for city resiliency |
US9021260B1 (en) | 2014-07-03 | 2015-04-28 | Palantir Technologies Inc. | Malware data item analysis |
US9202249B1 (en) | 2014-07-03 | 2015-12-01 | Palantir Technologies Inc. | Data item clustering and analysis |
US9785773B2 (en) | 2014-07-03 | 2017-10-10 | Palantir Technologies Inc. | Malware data item analysis |
US20160026923A1 (en) | 2014-07-22 | 2016-01-28 | Palantir Technologies Inc. | System and method for determining a propensity of entity to take a specified action |
US9454281B2 (en) | 2014-09-03 | 2016-09-27 | Palantir Technologies Inc. | System for providing dynamic linked panels in user interface |
US9390086B2 (en) | 2014-09-11 | 2016-07-12 | Palantir Technologies Inc. | Classification system with methodology for efficient verification |
US9501851B2 (en) | 2014-10-03 | 2016-11-22 | Palantir Technologies Inc. | Time-series analysis system |
US9767172B2 (en) | 2014-10-03 | 2017-09-19 | Palantir Technologies Inc. | Data aggregation and analysis system |
US9785328B2 (en) | 2014-10-06 | 2017-10-10 | Palantir Technologies Inc. | Presentation of multivariate data on a graphical user interface of a computing system |
US9984133B2 (en) | 2014-10-16 | 2018-05-29 | Palantir Technologies Inc. | Schematic and database linking system |
US9229952B1 (en) | 2014-11-05 | 2016-01-05 | Palantir Technologies, Inc. | History preserving data pipeline system and method |
US9043894B1 (en) | 2014-11-06 | 2015-05-26 | Palantir Technologies Inc. | Malicious software detection in a computing system |
US9483546B2 (en) | 2014-12-15 | 2016-11-01 | Palantir Technologies Inc. | System and method for associating related records to common entities across multiple lists |
US10552994B2 (en) | 2014-12-22 | 2020-02-04 | Palantir Technologies Inc. | Systems and interactive user interfaces for dynamic retrieval, analysis, and triage of data items |
US9367872B1 (en) | 2014-12-22 | 2016-06-14 | Palantir Technologies Inc. | Systems and user interfaces for dynamic and interactive investigation of bad actor behavior based on automatic clustering of related data in various data structures |
US10362133B1 (en) | 2014-12-22 | 2019-07-23 | Palantir Technologies Inc. | Communication data processing architecture |
US9348920B1 (en) | 2014-12-22 | 2016-05-24 | Palantir Technologies Inc. | Concept indexing among database of documents using machine learning techniques |
US10452651B1 (en) | 2014-12-23 | 2019-10-22 | Palantir Technologies Inc. | Searching charts |
US9335911B1 (en) | 2014-12-29 | 2016-05-10 | Palantir Technologies Inc. | Interactive user interface for dynamic data analysis exploration and query processing |
US9870205B1 (en) | 2014-12-29 | 2018-01-16 | Palantir Technologies Inc. | Storing logical units of program code generated using a dynamic programming notebook user interface |
US9817563B1 (en) | 2014-12-29 | 2017-11-14 | Palantir Technologies Inc. | System and method of generating data points from one or more data stores of data items for chart creation and manipulation |
US10372879B2 (en) | 2014-12-31 | 2019-08-06 | Palantir Technologies Inc. | Medical claims lead summary report generation |
US11302426B1 (en) | 2015-01-02 | 2022-04-12 | Palantir Technologies Inc. | Unified data interface and system |
US10387834B2 (en) | 2015-01-21 | 2019-08-20 | Palantir Technologies Inc. | Systems and methods for accessing and storing snapshots of a remote application in a document |
US9727560B2 (en) | 2015-02-25 | 2017-08-08 | Palantir Technologies Inc. | Systems and methods for organizing and identifying documents via hierarchies and dimensions of tags |
US9891808B2 (en) | 2015-03-16 | 2018-02-13 | Palantir Technologies Inc. | Interactive user interfaces for location-based data analysis |
US9886467B2 (en) | 2015-03-19 | 2018-02-06 | Plantir Technologies Inc. | System and method for comparing and visualizing data entities and data entity series |
US9348880B1 (en) | 2015-04-01 | 2016-05-24 | Palantir Technologies, Inc. | Federated search of multiple sources with conflict resolution |
US10103953B1 (en) | 2015-05-12 | 2018-10-16 | Palantir Technologies Inc. | Methods and systems for analyzing entity performance |
US10628834B1 (en) | 2015-06-16 | 2020-04-21 | Palantir Technologies Inc. | Fraud lead detection system for efficiently processing database-stored data and automatically generating natural language explanatory information of system results for display in interactive user interfaces |
US9418337B1 (en) | 2015-07-21 | 2016-08-16 | Palantir Technologies Inc. | Systems and models for data analytics |
US9392008B1 (en) | 2015-07-23 | 2016-07-12 | Palantir Technologies Inc. | Systems and methods for identifying information related to payment card breaches |
US9454785B1 (en) | 2015-07-30 | 2016-09-27 | Palantir Technologies Inc. | Systems and user interfaces for holistic, data-driven investigation of bad actor behavior based on clustering and scoring of related data |
US9996595B2 (en) | 2015-08-03 | 2018-06-12 | Palantir Technologies, Inc. | Providing full data provenance visualization for versioned datasets |
US9456000B1 (en) | 2015-08-06 | 2016-09-27 | Palantir Technologies Inc. | Systems, methods, user interfaces, and computer-readable media for investigating potential malicious communications |
US9600146B2 (en) | 2015-08-17 | 2017-03-21 | Palantir Technologies Inc. | Interactive geospatial map |
US10489391B1 (en) | 2015-08-17 | 2019-11-26 | Palantir Technologies Inc. | Systems and methods for grouping and enriching data items accessed from one or more databases for presentation in a user interface |
US10102369B2 (en) | 2015-08-19 | 2018-10-16 | Palantir Technologies Inc. | Checkout system executable code monitoring, and user account compromise determination system |
US9671776B1 (en) | 2015-08-20 | 2017-06-06 | Palantir Technologies Inc. | Quantifying, tracking, and anticipating risk at a manufacturing facility, taking deviation type and staffing conditions into account |
US10853378B1 (en) | 2015-08-25 | 2020-12-01 | Palantir Technologies Inc. | Electronic note management via a connected entity graph |
US11150917B2 (en) | 2015-08-26 | 2021-10-19 | Palantir Technologies Inc. | System for data aggregation and analysis of data from a plurality of data sources |
US9485265B1 (en) | 2015-08-28 | 2016-11-01 | Palantir Technologies Inc. | Malicious activity detection system capable of efficiently processing data accessed from databases and generating alerts for display in interactive user interfaces |
US10706434B1 (en) | 2015-09-01 | 2020-07-07 | Palantir Technologies Inc. | Methods and systems for determining location information |
US9639580B1 (en) | 2015-09-04 | 2017-05-02 | Palantir Technologies, Inc. | Computer-implemented systems and methods for data management and visualization |
US9984428B2 (en) | 2015-09-04 | 2018-05-29 | Palantir Technologies Inc. | Systems and methods for structuring data from unstructured electronic data files |
US9576015B1 (en) | 2015-09-09 | 2017-02-21 | Palantir Technologies, Inc. | Domain-specific language for dataset transformations |
US10296617B1 (en) | 2015-10-05 | 2019-05-21 | Palantir Technologies Inc. | Searches of highly structured data |
US9424669B1 (en) | 2015-10-21 | 2016-08-23 | Palantir Technologies Inc. | Generating graphical representations of event participation flow |
US10223429B2 (en) | 2015-12-01 | 2019-03-05 | Palantir Technologies Inc. | Entity data attribution using disparate data sets |
US10706056B1 (en) | 2015-12-02 | 2020-07-07 | Palantir Technologies Inc. | Audit log report generator |
US9760556B1 (en) | 2015-12-11 | 2017-09-12 | Palantir Technologies Inc. | Systems and methods for annotating and linking electronic documents |
US9514414B1 (en) | 2015-12-11 | 2016-12-06 | Palantir Technologies Inc. | Systems and methods for identifying and categorizing electronic documents through machine learning |
US10114884B1 (en) | 2015-12-16 | 2018-10-30 | Palantir Technologies Inc. | Systems and methods for attribute analysis of one or more databases |
US9542446B1 (en) | 2015-12-17 | 2017-01-10 | Palantir Technologies, Inc. | Automatic generation of composite datasets based on hierarchical fields |
US10373099B1 (en) | 2015-12-18 | 2019-08-06 | Palantir Technologies Inc. | Misalignment detection system for efficiently processing database-stored data and automatically generating misalignment information for display in interactive user interfaces |
US10871878B1 (en) | 2015-12-29 | 2020-12-22 | Palantir Technologies Inc. | System log analysis and object user interaction correlation system |
US10089289B2 (en) | 2015-12-29 | 2018-10-02 | Palantir Technologies Inc. | Real-time document annotation |
US9823818B1 (en) | 2015-12-29 | 2017-11-21 | Palantir Technologies Inc. | Systems and interactive user interfaces for automatic generation of temporal representation of data objects |
US11086640B2 (en) * | 2015-12-30 | 2021-08-10 | Palantir Technologies Inc. | Composite graphical interface with shareable data-objects |
US9612723B1 (en) * | 2015-12-30 | 2017-04-04 | Palantir Technologies Inc. | Composite graphical interface with shareable data-objects |
US9792020B1 (en) | 2015-12-30 | 2017-10-17 | Palantir Technologies Inc. | Systems for collecting, aggregating, and storing data, generating interactive user interfaces for analyzing data, and generating alerts based upon collected data |
US10698938B2 (en) | 2016-03-18 | 2020-06-30 | Palantir Technologies Inc. | Systems and methods for organizing and identifying documents via hierarchies and dimensions of tags |
US9652139B1 (en) | 2016-04-06 | 2017-05-16 | Palantir Technologies Inc. | Graphical representation of an output |
US10068199B1 (en) | 2016-05-13 | 2018-09-04 | Palantir Technologies Inc. | System to catalogue tracking data |
US10007674B2 (en) | 2016-06-13 | 2018-06-26 | Palantir Technologies Inc. | Data revision control in large-scale data analytic systems |
US10545975B1 (en) | 2016-06-22 | 2020-01-28 | Palantir Technologies Inc. | Visual analysis of data using sequenced dataset reduction |
US10909130B1 (en) | 2016-07-01 | 2021-02-02 | Palantir Technologies Inc. | Graphical user interface for a database system |
US10324609B2 (en) | 2016-07-21 | 2019-06-18 | Palantir Technologies Inc. | System for providing dynamic linked panels in user interface |
US10719188B2 (en) | 2016-07-21 | 2020-07-21 | Palantir Technologies Inc. | Cached database and synchronization system for providing dynamic linked panels in user interface |
US10437840B1 (en) | 2016-08-19 | 2019-10-08 | Palantir Technologies Inc. | Focused probabilistic entity resolution from multiple data sources |
US10552002B1 (en) | 2016-09-27 | 2020-02-04 | Palantir Technologies Inc. | User interface based variable machine modeling |
US10726507B1 (en) | 2016-11-11 | 2020-07-28 | Palantir Technologies Inc. | Graphical representation of a complex task |
US10318630B1 (en) | 2016-11-21 | 2019-06-11 | Palantir Technologies Inc. | Analysis of large bodies of textual data |
US9842338B1 (en) | 2016-11-21 | 2017-12-12 | Palantir Technologies Inc. | System to identify vulnerable card readers |
US11250425B1 (en) | 2016-11-30 | 2022-02-15 | Palantir Technologies Inc. | Generating a statistic using electronic transaction data |
US9886525B1 (en) | 2016-12-16 | 2018-02-06 | Palantir Technologies Inc. | Data item aggregate probability analysis system |
GB201621434D0 (en) | 2016-12-16 | 2017-02-01 | Palantir Technologies Inc | Processing sensor logs |
US10249033B1 (en) | 2016-12-20 | 2019-04-02 | Palantir Technologies Inc. | User interface for managing defects |
US10728262B1 (en) | 2016-12-21 | 2020-07-28 | Palantir Technologies Inc. | Context-aware network-based malicious activity warning systems |
US11373752B2 (en) | 2016-12-22 | 2022-06-28 | Palantir Technologies Inc. | Detection of misuse of a benefit system |
US10360238B1 (en) | 2016-12-22 | 2019-07-23 | Palantir Technologies Inc. | Database systems and user interfaces for interactive data association, analysis, and presentation |
US10721262B2 (en) | 2016-12-28 | 2020-07-21 | Palantir Technologies Inc. | Resource-centric network cyber attack warning system |
US10460602B1 (en) | 2016-12-28 | 2019-10-29 | Palantir Technologies Inc. | Interactive vehicle information mapping system |
US10762471B1 (en) | 2017-01-09 | 2020-09-01 | Palantir Technologies Inc. | Automating management of integrated workflows based on disparate subsidiary data sources |
US10133621B1 (en) | 2017-01-18 | 2018-11-20 | Palantir Technologies Inc. | Data analysis system to facilitate investigative process |
US10509844B1 (en) | 2017-01-19 | 2019-12-17 | Palantir Technologies Inc. | Network graph parser |
US10515109B2 (en) | 2017-02-15 | 2019-12-24 | Palantir Technologies Inc. | Real-time auditing of industrial equipment condition |
US10659521B2 (en) * | 2017-03-13 | 2020-05-19 | Lg Electronics Inc. | Apparatus for transmitting broadcast signals, apparatus for receiving broadcast signals, method of transmitting broadcast signals and method of receiving broadcast signals |
US10581954B2 (en) | 2017-03-29 | 2020-03-03 | Palantir Technologies Inc. | Metric collection and aggregation for distributed software services |
US10866936B1 (en) | 2017-03-29 | 2020-12-15 | Palantir Technologies Inc. | Model object management and storage system |
US10133783B2 (en) | 2017-04-11 | 2018-11-20 | Palantir Technologies Inc. | Systems and methods for constraint driven database searching |
US10563990B1 (en) | 2017-05-09 | 2020-02-18 | Palantir Technologies Inc. | Event-based route planning |
US10606872B1 (en) | 2017-05-22 | 2020-03-31 | Palantir Technologies Inc. | Graphical user interface for a database system |
US10795749B1 (en) | 2017-05-31 | 2020-10-06 | Palantir Technologies Inc. | Systems and methods for providing fault analysis user interface |
US10956406B2 (en) | 2017-06-12 | 2021-03-23 | Palantir Technologies Inc. | Propagated deletion of database records and derived data |
US11216762B1 (en) | 2017-07-13 | 2022-01-04 | Palantir Technologies Inc. | Automated risk visualization using customer-centric data analysis |
US10403011B1 (en) | 2017-07-18 | 2019-09-03 | Palantir Technologies Inc. | Passing system with an interactive user interface |
US10430444B1 (en) | 2017-07-24 | 2019-10-01 | Palantir Technologies Inc. | Interactive geospatial map and geospatial visualization systems |
US11281726B2 (en) | 2017-12-01 | 2022-03-22 | Palantir Technologies Inc. | System and methods for faster processor comparisons of visual graph features |
US11314721B1 (en) | 2017-12-07 | 2022-04-26 | Palantir Technologies Inc. | User-interactive defect analysis for root cause |
US10769171B1 (en) | 2017-12-07 | 2020-09-08 | Palantir Technologies Inc. | Relationship analysis and mapping for interrelated multi-layered datasets |
US10783162B1 (en) | 2017-12-07 | 2020-09-22 | Palantir Technologies Inc. | Workflow assistant |
US10877984B1 (en) | 2017-12-07 | 2020-12-29 | Palantir Technologies Inc. | Systems and methods for filtering and visualizing large scale datasets |
CN108182579B (en) * | 2017-12-18 | 2020-12-18 | 东软集团股份有限公司 | Data processing method, device, storage medium and equipment for rule judgment |
US11263382B1 (en) | 2017-12-22 | 2022-03-01 | Palantir Technologies Inc. | Data normalization and irregularity detection system |
US11599369B1 (en) | 2018-03-08 | 2023-03-07 | Palantir Technologies Inc. | Graphical user interface configuration system |
US10877654B1 (en) | 2018-04-03 | 2020-12-29 | Palantir Technologies Inc. | Graphical user interfaces for optimizations |
US10754822B1 (en) | 2018-04-18 | 2020-08-25 | Palantir Technologies Inc. | Systems and methods for ontology migration |
US10885021B1 (en) | 2018-05-02 | 2021-01-05 | Palantir Technologies Inc. | Interactive interpreter and graphical user interface |
US10754946B1 (en) | 2018-05-08 | 2020-08-25 | Palantir Technologies Inc. | Systems and methods for implementing a machine learning approach to modeling entity behavior |
US11119630B1 (en) | 2018-06-19 | 2021-09-14 | Palantir Technologies Inc. | Artificial intelligence assisted evaluations and user interface for same |
CN110895597B (en) * | 2018-09-12 | 2022-04-19 | 长鑫存储技术有限公司 | Transcoding logical function calculation method and device, storage medium and electronic equipment |
CN109189807A (en) * | 2018-09-13 | 2019-01-11 | 北京奇虎科技有限公司 | A kind of filter method and device of alert data |
US11126638B1 (en) | 2018-09-13 | 2021-09-21 | Palantir Technologies Inc. | Data visualization and parsing system |
US11294928B1 (en) | 2018-10-12 | 2022-04-05 | Palantir Technologies Inc. | System architecture for relating and linking data objects |
CN113377419A (en) * | 2021-05-31 | 2021-09-10 | 同盾科技有限公司 | Business processing method and device, readable storage medium and electronic equipment |
CN115703475A (en) * | 2021-08-06 | 2023-02-17 | 沃尔沃汽车公司 | Vehicle-user interaction system and interaction method |
CN114492376A (en) * | 2021-12-27 | 2022-05-13 | 奇安信科技集团股份有限公司 | Application fingerprint detection method and device and electronic equipment |
Citations (42)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6226630B1 (en) * | 1998-07-22 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for filtering incoming information using a search engine and stored queries defining user folders |
US6298340B1 (en) * | 1999-05-14 | 2001-10-02 | International Business Machines Corporation | System and method and computer program for filtering using tree structure |
US6347087B1 (en) * | 1998-10-05 | 2002-02-12 | Packet Engines Incorporated | Content-based forwarding/filtering in a network switching device |
US20020049705A1 (en) * | 2000-04-19 | 2002-04-25 | E-Base Ltd. | Method for creating content oriented databases and content files |
US20020067718A1 (en) * | 2000-12-06 | 2002-06-06 | David Coupe | System and method for remultiplexing of a filtered transport stream with new content in real-time |
US6421733B1 (en) * | 1997-03-25 | 2002-07-16 | Intel Corporation | System for dynamically transcoding data transmitted between computers |
US20020099829A1 (en) * | 2000-11-27 | 2002-07-25 | Richards Kenneth W. | Filter proxy system and method |
US20020097172A1 (en) * | 1998-12-11 | 2002-07-25 | Fallon James J. | Content independent data compression method and system |
US6473763B1 (en) * | 2000-03-31 | 2002-10-29 | International Business Machines Corporation | System, method and computer program for filtering multi-action rule set |
US20030018795A1 (en) * | 2001-07-18 | 2003-01-23 | International Business Machines Corporation | Method and apparatus for providing extensible scalable transcoding of multimedia content |
US20030031260A1 (en) * | 2001-07-16 | 2003-02-13 | Ali Tabatabai | Transcoding between content data and description data |
US20030146915A1 (en) * | 2001-10-12 | 2003-08-07 | Brook John Charles | Interactive animation of sprites in a video production |
US20040158741A1 (en) * | 2003-02-07 | 2004-08-12 | Peter Schneider | System and method for remote virus scanning in wireless networks |
US20040193648A1 (en) * | 2000-12-22 | 2004-09-30 | Lai Angela C. W. | Distributed on-demand media transcoding system and method |
US20050108176A1 (en) * | 2003-04-30 | 2005-05-19 | Jarol Scott B. | Configurable rules based content item consumption |
US20050132264A1 (en) * | 2003-12-15 | 2005-06-16 | Joshi Ajit P. | System and method for intelligent transcoding |
US20060106748A1 (en) * | 2004-11-12 | 2006-05-18 | International Business Machines Corporation | System and method for orchestrating composite web services in constrained data flow environments |
US20060143162A1 (en) * | 2004-10-22 | 2006-06-29 | Maryam Bernacki | Reporting tools |
US20060155852A1 (en) * | 2002-04-12 | 2006-07-13 | Siemens Aktiengesellschaft | Representation of boolean expressions for specifying filters using xml |
US20060167582A1 (en) * | 2002-11-22 | 2006-07-27 | Frederic Jayko | Method of computer aided shape design |
US7120702B2 (en) * | 2001-03-03 | 2006-10-10 | International Business Machines Corporation | System and method for transcoding web content for display by alternative client devices |
US7133400B1 (en) * | 1998-08-07 | 2006-11-07 | Intel Corporation | System and method for filtering data |
US7203749B2 (en) * | 2001-11-13 | 2007-04-10 | Fujitsu Limited | Contents filtering method, contents filtering apparatus and contents filtering program |
US20070112826A1 (en) * | 2005-11-10 | 2007-05-17 | Vixs Systems, Inc. | Multimedia transcoding based on remaining storage capacity |
US20070198339A1 (en) * | 2006-02-22 | 2007-08-23 | Si Shen | Targeted mobile advertisements |
US20080091695A1 (en) * | 2006-09-28 | 2008-04-17 | Daisuke Nagasawa | Apparatus, method and computer program product for assigning element of structured-text |
US20080249961A1 (en) * | 2007-03-22 | 2008-10-09 | Harkness David H | Digital rights management and audience measurement systems and methods |
US20090125459A1 (en) * | 2007-11-09 | 2009-05-14 | Norton Richard Elliott | Method and system for rule-based content filtering |
US7545978B2 (en) * | 2005-07-01 | 2009-06-09 | International Business Machines Corporation | Methods and apparatus for filtering video packets for large-scale video stream monitoring |
US7551629B2 (en) * | 2002-03-28 | 2009-06-23 | Precache, Inc. | Method and apparatus for propagating content filters for a publish-subscribe network |
US20090183218A1 (en) * | 2008-01-10 | 2009-07-16 | At&T Knowledge Ventures, Lp | Predictive Allocation of Multimedia Server Resources |
US7685252B1 (en) * | 1999-10-12 | 2010-03-23 | International Business Machines Corporation | Methods and systems for multi-modal browsing and implementation of a conversational markup language |
US7822801B2 (en) * | 2004-10-14 | 2010-10-26 | International Business Machines Corporation | Subscription propagation in a high performance highly available content-based publish/subscribe system |
US20100313250A1 (en) * | 2009-06-09 | 2010-12-09 | Gvoto (Hong Kong) Ltd. | Methods and systems for automatic content retrieval and organization |
US20110106962A1 (en) * | 2009-10-30 | 2011-05-05 | Comcast Cable Communications, Llc | Network Interface to Content Source |
US20110246489A1 (en) * | 2005-10-20 | 2011-10-06 | Solarflare Communications, Inc. | Hashing algorithm for network receive filtering |
US20120141092A1 (en) * | 2010-12-07 | 2012-06-07 | At&T Intellectual Property I, L.P. | Hierarchical Storage Management for Data |
US8407778B2 (en) * | 2005-08-11 | 2013-03-26 | International Business Machines Corporation | Apparatus and methods for processing filter rules |
US8442928B2 (en) * | 2007-11-09 | 2013-05-14 | Vantrix Corporation | Method and apparatus for employing rules to filter streaming data |
US8447718B2 (en) * | 2007-11-09 | 2013-05-21 | Vantrix Corporation | Method and apparatus for filtering streaming data |
US8478764B2 (en) * | 2007-11-09 | 2013-07-02 | Vantrix Corporation | Method and apparatus for concurrent filtering of multiple components of streaming data |
US8849893B2 (en) * | 2002-07-26 | 2014-09-30 | International Business Machines Corporation | Querying a dynamic database with an electronic message directed to subscribers of a publish/subscribe computer service |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003523000A (en) * | 1999-12-15 | 2003-07-29 | サン・マイクロシステムズ・インコーポレイテッド | System and method for creating a graphical user interface from a filter expression tree |
JP4844150B2 (en) * | 2006-02-09 | 2011-12-28 | 富士ゼロックス株式会社 | Information processing apparatus, information processing method, and information processing program |
-
2008
- 2008-11-06 US US12/266,353 patent/US8019709B2/en active Active
- 2008-11-06 US US12/266,362 patent/US20090126020A1/en not_active Abandoned
- 2008-11-07 CN CN200880114945.9A patent/CN101849399B/en not_active Expired - Fee Related
- 2008-11-07 EP EP08847175.0A patent/EP2218235A4/en not_active Withdrawn
- 2008-11-07 JP JP2010532392A patent/JP5275362B2/en not_active Expired - Fee Related
- 2008-11-07 WO PCT/CA2008/001964 patent/WO2009059420A1/en active Application Filing
- 2008-11-07 KR KR1020147018903A patent/KR20140095111A/en not_active Application Discontinuation
- 2008-11-07 CA CA2703092A patent/CA2703092C/en active Active
- 2008-11-07 CA CA2703107A patent/CA2703107C/en active Active
- 2008-11-07 CA CA3105860A patent/CA3105860A1/en active Pending
- 2008-11-07 WO PCT/CA2008/001963 patent/WO2009059419A1/en active Application Filing
- 2008-11-07 KR KR1020107012721A patent/KR101451285B1/en active IP Right Grant
- 2008-11-07 CN CN201410117632.6A patent/CN103886376B/en not_active Expired - Fee Related
- 2008-11-07 EP EP08847200.6A patent/EP2206308A4/en not_active Withdrawn
-
2010
- 2010-03-25 IL IL204725A patent/IL204725A/en active IP Right Grant
-
2013
- 2013-05-15 JP JP2013103228A patent/JP5659397B2/en active Active
Patent Citations (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6421733B1 (en) * | 1997-03-25 | 2002-07-16 | Intel Corporation | System for dynamically transcoding data transmitted between computers |
US6226630B1 (en) * | 1998-07-22 | 2001-05-01 | Compaq Computer Corporation | Method and apparatus for filtering incoming information using a search engine and stored queries defining user folders |
US7133400B1 (en) * | 1998-08-07 | 2006-11-07 | Intel Corporation | System and method for filtering data |
US6347087B1 (en) * | 1998-10-05 | 2002-02-12 | Packet Engines Incorporated | Content-based forwarding/filtering in a network switching device |
US20020097172A1 (en) * | 1998-12-11 | 2002-07-25 | Fallon James J. | Content independent data compression method and system |
US6298340B1 (en) * | 1999-05-14 | 2001-10-02 | International Business Machines Corporation | System and method and computer program for filtering using tree structure |
US7685252B1 (en) * | 1999-10-12 | 2010-03-23 | International Business Machines Corporation | Methods and systems for multi-modal browsing and implementation of a conversational markup language |
US6473763B1 (en) * | 2000-03-31 | 2002-10-29 | International Business Machines Corporation | System, method and computer program for filtering multi-action rule set |
US20020049705A1 (en) * | 2000-04-19 | 2002-04-25 | E-Base Ltd. | Method for creating content oriented databases and content files |
US20020099829A1 (en) * | 2000-11-27 | 2002-07-25 | Richards Kenneth W. | Filter proxy system and method |
US20020067718A1 (en) * | 2000-12-06 | 2002-06-06 | David Coupe | System and method for remultiplexing of a filtered transport stream with new content in real-time |
US7242324B2 (en) * | 2000-12-22 | 2007-07-10 | Sony Corporation | Distributed on-demand media transcoding system and method |
US20040193648A1 (en) * | 2000-12-22 | 2004-09-30 | Lai Angela C. W. | Distributed on-demand media transcoding system and method |
US7120702B2 (en) * | 2001-03-03 | 2006-10-10 | International Business Machines Corporation | System and method for transcoding web content for display by alternative client devices |
US7203692B2 (en) * | 2001-07-16 | 2007-04-10 | Sony Corporation | Transcoding between content data and description data |
US20030031260A1 (en) * | 2001-07-16 | 2003-02-13 | Ali Tabatabai | Transcoding between content data and description data |
US20030018795A1 (en) * | 2001-07-18 | 2003-01-23 | International Business Machines Corporation | Method and apparatus for providing extensible scalable transcoding of multimedia content |
US20030146915A1 (en) * | 2001-10-12 | 2003-08-07 | Brook John Charles | Interactive animation of sprites in a video production |
US7203749B2 (en) * | 2001-11-13 | 2007-04-10 | Fujitsu Limited | Contents filtering method, contents filtering apparatus and contents filtering program |
US7551629B2 (en) * | 2002-03-28 | 2009-06-23 | Precache, Inc. | Method and apparatus for propagating content filters for a publish-subscribe network |
US20060155852A1 (en) * | 2002-04-12 | 2006-07-13 | Siemens Aktiengesellschaft | Representation of boolean expressions for specifying filters using xml |
US8849893B2 (en) * | 2002-07-26 | 2014-09-30 | International Business Machines Corporation | Querying a dynamic database with an electronic message directed to subscribers of a publish/subscribe computer service |
US20060167582A1 (en) * | 2002-11-22 | 2006-07-27 | Frederic Jayko | Method of computer aided shape design |
US20040158741A1 (en) * | 2003-02-07 | 2004-08-12 | Peter Schneider | System and method for remote virus scanning in wireless networks |
US20050108176A1 (en) * | 2003-04-30 | 2005-05-19 | Jarol Scott B. | Configurable rules based content item consumption |
US20050132264A1 (en) * | 2003-12-15 | 2005-06-16 | Joshi Ajit P. | System and method for intelligent transcoding |
US7822801B2 (en) * | 2004-10-14 | 2010-10-26 | International Business Machines Corporation | Subscription propagation in a high performance highly available content-based publish/subscribe system |
US20060143162A1 (en) * | 2004-10-22 | 2006-06-29 | Maryam Bernacki | Reporting tools |
US20060106748A1 (en) * | 2004-11-12 | 2006-05-18 | International Business Machines Corporation | System and method for orchestrating composite web services in constrained data flow environments |
US7545978B2 (en) * | 2005-07-01 | 2009-06-09 | International Business Machines Corporation | Methods and apparatus for filtering video packets for large-scale video stream monitoring |
US8407778B2 (en) * | 2005-08-11 | 2013-03-26 | International Business Machines Corporation | Apparatus and methods for processing filter rules |
US20110246489A1 (en) * | 2005-10-20 | 2011-10-06 | Solarflare Communications, Inc. | Hashing algorithm for network receive filtering |
US20070112826A1 (en) * | 2005-11-10 | 2007-05-17 | Vixs Systems, Inc. | Multimedia transcoding based on remaining storage capacity |
US20070198339A1 (en) * | 2006-02-22 | 2007-08-23 | Si Shen | Targeted mobile advertisements |
US20080091695A1 (en) * | 2006-09-28 | 2008-04-17 | Daisuke Nagasawa | Apparatus, method and computer program product for assigning element of structured-text |
US20080249961A1 (en) * | 2007-03-22 | 2008-10-09 | Harkness David H | Digital rights management and audience measurement systems and methods |
US20090125459A1 (en) * | 2007-11-09 | 2009-05-14 | Norton Richard Elliott | Method and system for rule-based content filtering |
US8019709B2 (en) * | 2007-11-09 | 2011-09-13 | Vantrix Corporation | Method and system for rule-based content filtering |
US8442928B2 (en) * | 2007-11-09 | 2013-05-14 | Vantrix Corporation | Method and apparatus for employing rules to filter streaming data |
US8447718B2 (en) * | 2007-11-09 | 2013-05-21 | Vantrix Corporation | Method and apparatus for filtering streaming data |
US8478764B2 (en) * | 2007-11-09 | 2013-07-02 | Vantrix Corporation | Method and apparatus for concurrent filtering of multiple components of streaming data |
US20090183218A1 (en) * | 2008-01-10 | 2009-07-16 | At&T Knowledge Ventures, Lp | Predictive Allocation of Multimedia Server Resources |
US20100313250A1 (en) * | 2009-06-09 | 2010-12-09 | Gvoto (Hong Kong) Ltd. | Methods and systems for automatic content retrieval and organization |
US20110106962A1 (en) * | 2009-10-30 | 2011-05-05 | Comcast Cable Communications, Llc | Network Interface to Content Source |
US20120141092A1 (en) * | 2010-12-07 | 2012-06-07 | At&T Intellectual Property I, L.P. | Hierarchical Storage Management for Data |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110161272A1 (en) * | 2009-12-31 | 2011-06-30 | International Business Machines Corporation | Interface for creating and editing boolean logic |
US8788449B2 (en) * | 2009-12-31 | 2014-07-22 | International Business Machines Corporation | Interface for creating and editing boolean logic |
US20120011470A1 (en) * | 2010-07-12 | 2012-01-12 | Samsung Electronics Co. Ltd. | Method and apparatus for managing menu item in a portable terminal |
US9804772B2 (en) * | 2010-07-12 | 2017-10-31 | Samsung Electronics Co., Ltd. | Method and apparatus for generating a new menu item by dividing or merging a menu item displayed on a portable terminal |
WO2012024761A1 (en) * | 2010-08-26 | 2012-03-01 | Vantrix Corporation | Method and apparatus for concurrent filtering of multiple components of streaming data |
US20130311657A1 (en) * | 2010-12-20 | 2013-11-21 | Telefonaktiebolaget Lm Ericsson (Publ) | Method of selecting a composite service from a plurality of composite services |
US9923788B2 (en) * | 2010-12-20 | 2018-03-20 | Telefonaktiebolaget Lm Ericsson (Publ) | Method of selecting a composite service from a plurality of composite services |
US20130139247A1 (en) * | 2011-11-29 | 2013-05-30 | Bayshore Networks, Inc. | Firewall apparatus, systems, and methods employing detection of application anomalies |
US8893253B2 (en) * | 2011-11-29 | 2014-11-18 | Bayshore Networks, Inc. | Firewall apparatus, systems, and methods employing detection of application anomalies |
US20150254246A1 (en) * | 2014-03-06 | 2015-09-10 | Yahoo! Inc. | Methods and Systems for Ranking Items on a Presentation Area Based on Binary Outcomes |
US9529858B2 (en) * | 2014-03-06 | 2016-12-27 | Yahoo! Inc. | Methods and systems for ranking items on a presentation area based on binary outcomes |
CN111078026A (en) * | 2019-11-15 | 2020-04-28 | 北京乐我无限科技有限责任公司 | Input prompting method and device, electronic equipment and readable storage medium |
Also Published As
Publication number | Publication date |
---|---|
EP2206308A1 (en) | 2010-07-14 |
US20090125459A1 (en) | 2009-05-14 |
CN103886376A (en) | 2014-06-25 |
CN103886376B (en) | 2017-08-25 |
CA2703107A1 (en) | 2009-05-14 |
WO2009059419A8 (en) | 2010-07-15 |
JP2011505611A (en) | 2011-02-24 |
KR101451285B1 (en) | 2014-10-15 |
CA2703092A1 (en) | 2009-05-14 |
WO2009059420A8 (en) | 2010-07-15 |
CA2703107C (en) | 2016-08-16 |
IL204725A (en) | 2015-02-26 |
JP2013178815A (en) | 2013-09-09 |
JP5275362B2 (en) | 2013-08-28 |
KR20140095111A (en) | 2014-07-31 |
CN101849399B (en) | 2014-06-11 |
WO2009059420A1 (en) | 2009-05-14 |
EP2206308A4 (en) | 2013-08-21 |
CA3105860A1 (en) | 2009-05-14 |
CN101849399A (en) | 2010-09-29 |
JP5659397B2 (en) | 2015-01-28 |
EP2218235A4 (en) | 2013-10-09 |
CA2703092C (en) | 2021-08-03 |
EP2218235A1 (en) | 2010-08-18 |
KR20100098385A (en) | 2010-09-06 |
WO2009059419A1 (en) | 2009-05-14 |
US8019709B2 (en) | 2011-09-13 |
IL204725A0 (en) | 2010-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8019709B2 (en) | Method and system for rule-based content filtering | |
US8447718B2 (en) | Method and apparatus for filtering streaming data | |
US8478764B2 (en) | Method and apparatus for concurrent filtering of multiple components of streaming data | |
US8442928B2 (en) | Method and apparatus for employing rules to filter streaming data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: VANTRIX CORPORATION, CANADA Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:NORTON, RICHARD ELLIOTT;POIRIER-BEAUCHEMIN, LOUIS-RENE;HEROUX, ROBERT;AND OTHERS;REEL/FRAME:021809/0154;SIGNING DATES FROM 20081103 TO 20081104 |
|
AS | Assignment |
Owner name: WF FUND III LIMITED PARTNERSHIP, C.O.B. WELLINGTON Free format text: SECURITY AGREEMENT;ASSIGNOR:VANTRIX CORPORATION;REEL/FRAME:025907/0804 Effective date: 20110126 |
|
AS | Assignment |
Owner name: NXT CAPITAL, LLC, ITS SUCCESSORS AND ASSIGNS, ILLI Free format text: SECURITY AGREEMENT;ASSIGNOR:VANTRIX CORPORATION;REEL/FRAME:030053/0824 Effective date: 20130320 |
|
AS | Assignment |
Owner name: VANTRIX CORPORATION, CANADA Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:WF FUND III LIMITED PARTNERSHIP, C.O.B. WELLINGTON FINANCIAL FUND III AND WELLINGTON FINANCIAL LP;REEL/FRAME:030615/0063 Effective date: 20130611 |
|
STCB | Information on status: application discontinuation |
Free format text: ABANDONED -- FAILURE TO RESPOND TO AN OFFICE ACTION |
|
AS | Assignment |
Owner name: VANTRIX CORPORATION, CANADA Free format text: CHANGE OF ADDRESS;ASSIGNOR:VANTRIX CORPORATION;REEL/FRAME:041845/0022 Effective date: 20170209 |
|
AS | Assignment |
Owner name: VANTRIX CORPORATION, CANADA Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:NXT CAPITAL LLC;REEL/FRAME:042050/0722 Effective date: 20161206 |