Hi all,

I would appreciate some advice on how to best use Drools and how to write rules in my situation. I am new to Drools so my following descriptions might not be very accurate or clear.

I will be writing rules that compare SNOMED terminology expressions against similar expressions in the working memory. SNOMED is a medical terminology and it defines medical concepts by using attributes (relationships) and values. Both the attributes and the values are also concepts in the terminology. The concepts are hierarchical and they frequently have multiple inheritance as part of their definition. SNOMED expressions are basically one or more concepts (including nested concepts) composed together and they might have their properties refined and they might also have optional attributes set. There is an object model for these expressions and concepts. See the example below.

Basically, using a SNOMED expression (the query expression), it is possible to query a set of other expressions to see if one of them will satisfy the query criteria. There is an algorithm for applying this query to an expression and this algorithm can indicate if the query expression matches another expression or subsumes it. The other option is to send both expressions to a terminology service to perform this algorithm and get back a boolean result.

My question is about where I should implement this algorithm? How can I hook this algorithm into Drools so that Drools will treat these expressions in a special way? The usual type and value checks are not useful in this condition because the two expressions have to be first normalized and then compared. This normalization and comparison is done according to the SNOMED algorithms. Each attribute and value from both expressions will have to be tested to see if they have a parent-child relationship in the terminology’s semantic network.

The few options I thought of include treating expressions as strings. This will allow me to retrieve the expression string from each object in the working memory and then send it, along with the expression string in the rule, to the matching algorithm. The other option is to send the rule string to the memory object using an eval(). From what I know, I think that this will not be an efficient method because all the rules will fall under a single Java type.

The other option is to represent the expressions in their object form and have the objects implement the needed algorithms. In this case, how do I create an instance of this expression in a rule so that I can have it work with the expression objects in the memory?

A sample expression is shown below using a textual form. The terms could be removed and have the same expression represented using only the codes.

284196006|Burn of skin|:
246112005|Severity|=24484000|severe,
363698007|Finding Site|=
(113185004|Structure of skin between fourth and fifth toes|:272741003|Laterality|=7771000|left)

I am expecting that there will be a large number of rules and the working memory might have between 10 to 100 expressions.

Any ideas for how to approach this problem are greatly appreciated. I am interested in both a simple short term approach that I could use quickly and a more efficient long term approach.

Thank you,
Shahim

_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to