On 11/19/2012 02:01 PM, Alexander Klenner wrote:
Hi Yason, Roberto and others,

we ran into the same problem after one day of using Drools. Using an artificial 
index however doesn't work for us since we have many Annotations and a complex 
TypeSystem, we had to retouch all our AEs to get this index working - not 
possible for us.

What do you think about an ArrayList, where all Annotations of one Type are 
stored in their order of appearance (e.g. sorted by Begin). Instead of only 
adding all Annotationen classes to Drools we now also add this ArrayList, which 
we create in our Drools AE? Does such an approach make sense? We can ask for 
their respective ordering by using indexOf(Object).
This would work in Drools but it looks quite time consuming (if you have a lot of annotations, you would have a linear scan of your ArrayList for each /indexOf/ call).

I would try one of this:

*1.* use a /Map/ instead of an /ArrayList/ with /key = annotationId/ (or whatever else can identify one of your annotations) and /value = position/ in the list This is quite simple to create and position values can be retrieved more efficiently

*2.* use a /wrapper bean/ around your annotation so you can write your drools rules without using "external" info (from a /list/ or /map/)
e.g.
if you have a bean like AnnotationWrapper --> { int position, Annotation annot }
then you can write something like

/when
  $t1: AnnotationWrapper (annot.text = "Mr.", $pos:position)
$t2: AnnotationWrapper (annot.ortho = "capitalized", position == ($pos + 1))
then
  create NE($t1.annot.start, $t2.annot.end)
end
/
I think that solution *2* is more "drools friendly" (because it can use direct "match" on a bean property instead of calling methods on an /array/ or a /map/, so it should be more efficient for RETE algorithm).

Hope it helps,
/Raf/

Reply via email to