I routinely use multiple instances of ConceptMapper, each with its own
dictionary, in a pipeline without any issues. I think Adam is correct
in his assessment. I have copied the section of a ConceptMapper AE
descriptor that deals with the dictionary. Make sure that the name
that appears on line 04 matches that on line 15, and make sure that
name is different from the name on your second ConceptMapper EA
descriptor.
01 <resourceManagerConfiguration>
02 <externalResources>
03 <externalResource>
04 <name>DictionaryFileNameONE</name>
05 <description>A file containing the dictionary. Modify this
URL to use a different dictionary.</description>
06 <fileResourceSpecifier>
07 <fileUrl>file:dict/dict_one.xml</fileUrl>
08 </fileResourceSpecifier>
09
<
implementationName
>
org
.apache
.uima
.conceptMapper.support.dictionaryResource.DictionaryResource_impl</
implementationName>
10 </externalResource>
11 </externalResources>
12 <externalResourceBindings>
13 <externalResourceBinding>
14 <key>DictionaryFile</key>
15 <resourceName> DictionaryFileNameONE </resourceName>
16 </externalResourceBinding>
17 </externalResourceBindings>
18 </resourceManagerConfiguration>
On Jun 19, 2008, at 9:42 PM, Ahmed Abdeen Hamed wrote:
I actually tried that suggestion and I had two different
DictionaryFile1
and DictionaryFile2 for instance. Even better, I created
ConceptMapper1 and
ConceptMapper2 and different type systems for each DictTerm1,
DictTerm2.
However, it is always only one file that is used. This is why I
about to
modify the code. My guess is, I need to store two different
concepMatter
objects one for each dictionary in any form of a data structure such
as an
ArrayList<ConceptMapper>. In the part where the conceptMapper object
is
loaded I need to pass those two conceptObjects one at a time. But, I
need to
know which part of that loads the conceptMapper. Although the
library is
only a handful of classes, still kinda tricky to follow the flow.
Thanks everyone!
Ahmed
On Thu, Jun 19, 2008 at 9:15 PM, Adam Lally <[EMAIL PROTECTED]>
wrote:
On Thu, Jun 19, 2008 at 3:12 PM, Ahmed Abdeen Hamed
<[EMAIL PROTECTED]> wrote:
My apologies that my question wasn't clear enough. I am trying to
use the
ConceptMapper example that was posted on the list a couple of days
ago.
However, the example came with one dictionary only. I have a need to
access
more than one dictionary. So, I created a primitive AE similar to
the
ConceptMapperOffsetTokenizer.xml and I added its entry to the
aggregate
AE
OffsetTokenizerMatcher.xml. However, the only dictionary that get
loaded
when the two primitive ones are listed on the aggregate is the
dictionary
listed in the ConceptMapperOffsetTokenizer.xml, not the second
dictionary
that I just created. On the other hand, if I list only one of them
in the
aggregate AE, the correct dictionary gets loaded.
This is a guess, but make sure that in the <externalResource> element
of the primitive descriptors, you use a different value of the <name>
field for each of your dictionaries. And then in the
<externalResourceBinding> element of each primitive descriptor, you
bind that primitive AE's resourceDependency to the appropriate
externalResource representing the dictionary that you want it to use.
If you use the same name for more than one externalResource, only one
will be used. Although I thought there was a warning in the log file
in this case - you may want to check for that. For this reason, it's
a good idea to use qualified names (like dotted names such as those
used for Java classes) for resources.
-Adam