Aaaaa ok, so instead of

<entry>
<token>Peginterferon alfa-2a</token>
</entry>

i should have: (2 tokens)

<entry>
<token>Peginterferon</token>
<token>alfa-2a</token>
</entry>

I see...I'll produce a new Dictionary and let you know how i got on...Thanks, a lot...

Jim


On 24/02/12 12:48, Jörn Kottmann wrote:
Ahh, yes that is why it does not match multi-token entries.
In the posted dictionary two tokens are encoded as one.

Jörn

On 02/24/2012 12:39 PM, [email protected] wrote:
Jim,

The format is wrong. We already asked you to try using the
DictionaryBuilder tool:

input.txt:
--------
Lepirudin
Cetuximab
Dornase Alfa
Denileukin diftitox
Etanercept
Bivalirudin
Leuprolide
Peginterferon alfa-2a
Alteplase
--------

command:

bin/opennlp DictionaryBuilder -inputFile input.txt -outputFile output.xml
-encoding<encoding of inputFile>

output.xml
------
<?xml version="1.0" encoding="UTF-8"?>
<dictionary case_sensitive="false">
<entry>
<token>Etanercept</token>
</entry>
<entry>
<token>Dornase</token>
<token>Alfa</token>
</entry>
<entry>
<token>Peginterferon</token>
<token>alfa-2a</token>
</entry>
<entry>
<token>Alteplase</token>
</entry>
<entry>
<token>Leuprolide</token>
</entry>
<entry>
<token>Denileukin</token>
<token>diftitox</token>
</entry>
<entry>
<token>Bivalirudin</token>
</entry>
<entry>
<token>Cetuximab</token>
</entry>
<entry>
<token>Lepirudin</token>
</entry>
</dictionary>
------

Regards,
William

On Fri, Feb 24, 2012 at 8:38 AM, Jim - FooBar();<[email protected]>wrote:

On 24/02/12 05:09, James Kosin wrote:

Jim,

Maybe the problem is how you have created the dictionary.  The
DictionaryNameFinder's find() method is a greedy method that will match
as many tokens as possible.
If it isn't matching more than one token than that is probably all the
dictionary contains per entry.

Look at the simple example in the test packages for
opennlp.tools.namefind DictionaryNameFinderTest.java in the source
packages.

There has a good example.

James

Hi James,

Well, the dictionary i created manually...basically i extracted all the
drug-names from drugbank.xml and wrote them to a txt file (one entry per line). then i processed that text-file in order to produce the xml version of the proper dictionary. What i have after doing all that is a file with
contents of the type:

<?xml version="1.0" encoding="UTF-8"?>
<dictionary case_sensitive="false">
<entry><token>Lepirudin</**token></entry>
<entry><token>Cetuximab</**token></entry>
<entry><token>Dornase Alfa</token></entry>
<entry><token>Denileukin diftitox</token></entry>
<entry><token>Etanercept</**token></entry>
<entry><token>Bivalirudin</**token></entry>
<entry><token>Leuprolide</**token></entry>
<entry><token>Peginterferon alfa-2a</token></entry>
<entry><token>Alteplase</**token></entry>
......
......
......etc etc

As you can see some drugs are multi-word entities and also the first
character of each word is capitalized. Whenever i call the find() method
all i'm getting are the exact matches which means that case-sensitivity
doesn ot work either!!! For example i'm getting "Cetuximab" but not
"cetuximab"...so the problem is twofold...Firstly and more importantly I cannot find multi-word entities even though they do exist in the dictionary and the test data. Secondly, even though i'm setting case_sensitive="false" in both the xml file and the constructor of the DictionaryNameFinder, the
actual results that i 'm getting are always case-sensitive!!!

Can you see any problems with the xml file?

Jim




Reply via email to