<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#ffffff" text="#000000">
Hello,<br>
<br>
I am trying to implement rules handling "Sentence",
"ManualAnnotation" objects (imagine someone highligthing words of
the document). Basically "Sentence" objects have "start" and "end"
positions (fields) into the text of a document, and they are
Comparable according to their location into the document.<br>
<br>
I need to write rules using the notion "window of consecutive
sentences". <br>
<br>
Basically I am not very interested by those "SentenceWindow"
objects, I just need them to define a kind of proximity between
"ManualAnnotation" objects.<br>
What I eventually need in the "when" of my rule is something like:<br>
<br>
<tt>when<br>
... maybe something creating the windows<br>
a1 : ManualAnnotation ()<br>
a2 : ManualAnnotation (this != a1)<br>
SentenceWindow (this includes a1, this includes a2)<br>
then<br>
... do something with a1 and a2 since they are "close" to each
other<br>
end</tt><br>
<br>
As I don't know the "internals" of Drools, I would like to have your
opinion about what the best "idiom":<br>
<ul>
<li>create all SentenceWindow objects and insert them in the
working memory, then write rules against all the facts (SentenceWindow
and ManualAnnotation)<br>
</li>
<li>implement an accumulator that will create a list of
SentenceWindow object </li>
</ul>
<br>
The first option could look like:<br>
<br>
<code></code><code>rule "Create sentence windows"<br>
when<br>
# find 3 consecutive sentences<br>
s1 : Sentence()<br>
s2 : Sentence(this > s1)<br>
s3 : Sentence(this > s2)<br>
not Sentence(this != s2 && > s1 && <
s3)<br>
then<br>
SentenceWindow swindow = new SentenceWindow();<br>
swindow.setStart(s1.getStart());<br>
swindow.setTheend(s3.getEnd());<br>
insert(swindow);<br>
end</code><br>
<br>
... Then use the first rule "as is".<br>
<br>
The accumulator option could look like (I am not really sure the
syntax is correct) :<br>
<br>
<tt>when<br>
<b>$result : ArrayList() from accumulate ( $s: Sentence(),
buildwindows($s))</b><br>
</tt><tt> a1 : ManualAnnotation ()<br>
a2 : ManualAnnotation (this != a1)<br>
<b> SentenceWindows (this includes a1, this includes a2) </b></tt><b><tt>from
$result</tt></b><br>
<tt>
then<br>
... </tt><tt>do something with a1 and a2 since they are
"close" to each other</tt><br>
<tt>
end</tt><br>
<br>
Is it possible to decide if one way is best than the other?<br>
<br>
And one last question: it is possible to "parametrize" an
accumulator (in order to provide the number of sentences that should
be put in the windows)?<br>
I mean something like:<br>
<br>
<tt>when<br>
$result : ArrayList() from accumulate ( $s: Sentence(), <b>buildwindows(3,</b>
$s))<br>
</tt><br>
<br>
Thanks in advance for you insights,<br>
<br>
Best regards,<br>
<br>
Bruno.<br>
</body>
</html>