This is an automated email from the ASF dual-hosted git repository.

rzo1 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opennlp.git


The following commit(s) were added to refs/heads/main by this push:
     new b4f52fa02 OPENNLP-244: Document the BioNLP converter (#1175)
b4f52fa02 is described below

commit b4f52fa021c068d97b892454f27b2f9641112feb
Author: jerry317395616 <[email protected]>
AuthorDate: Thu Jul 16 16:26:43 2026 +0800

    OPENNLP-244: Document the BioNLP converter (#1175)
---
 .../BioNLP2004NameSampleStreamFactoryTest.java     | 24 +++++++
 opennlp-docs/src/docbkx/corpora.xml                | 74 ++++++++++++++++++++++
 2 files changed, 98 insertions(+)

diff --git 
a/opennlp-core/opennlp-formats/src/test/java/opennlp/tools/formats/BioNLP2004NameSampleStreamFactoryTest.java
 
b/opennlp-core/opennlp-formats/src/test/java/opennlp/tools/formats/BioNLP2004NameSampleStreamFactoryTest.java
index 25c19fa2c..2f0e45f1c 100644
--- 
a/opennlp-core/opennlp-formats/src/test/java/opennlp/tools/formats/BioNLP2004NameSampleStreamFactoryTest.java
+++ 
b/opennlp-core/opennlp-formats/src/test/java/opennlp/tools/formats/BioNLP2004NameSampleStreamFactoryTest.java
@@ -17,7 +17,9 @@
 
 package opennlp.tools.formats;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
 
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
@@ -32,6 +34,7 @@ import opennlp.tools.util.ObjectStream;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
 public class BioNLP2004NameSampleStreamFactoryTest extends
@@ -87,6 +90,27 @@ public class BioNLP2004NameSampleStreamFactoryTest extends
     }
   }
 
+  @Test
+  void testConvertManualExample() throws IOException {
+    String input = "IL-2\tB-DNA\n"
+        + "receptor\tI-DNA\n"
+        + "activates\tO\n"
+        + "T\tB-cell_type\n"
+        + "cells\tI-cell_type\n"
+        + ".\tO\n\n";
+    int types = BioNLP2004NameSampleStream.GENERATE_DNA_ENTITIES
+        | BioNLP2004NameSampleStream.GENERATE_CELLTYPE_ENTITIES;
+
+    try (ObjectStream<NameSample> stream = new BioNLP2004NameSampleStream(
+        () -> new 
ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8)), types)) {
+      NameSample sample = stream.read();
+      assertNotNull(sample);
+      assertEquals("<START:DNA> IL-2 receptor <END> activates "
+          + "<START:cell_type> T cells <END> .", sample.toString());
+      assertNull(stream.read());
+    }
+  }
+
   @Test
   void testCreateWithUnsupportedTypes() throws IOException {
     try (ObjectStream<NameSample> stream = factory.create(
diff --git a/opennlp-docs/src/docbkx/corpora.xml 
b/opennlp-docs/src/docbkx/corpora.xml
index db038f6f9..f42c9a6b6 100644
--- a/opennlp-docs/src/docbkx/corpora.xml
+++ b/opennlp-docs/src/docbkx/corpora.xml
@@ -522,6 +522,80 @@ path: /dev/opennlp/trunk/opennlp-tools/en-ontonotes.bin]]>
                </section>
        </section>
 
+       <section xml:id="tools.corpora.bionlp2004">
+               <title>BioNLP/NLPBA 2004</title>
+               <para>
+               The BioNLP/NLPBA 2004 shared task uses biomedical abstracts 
derived from the GENIA
+               corpus for named entity recognition. It defines five entity 
types:
+               <literal>DNA</literal>, <literal>RNA</literal>, 
<literal>protein</literal>,
+               <literal>cell_type</literal>, and <literal>cell_line</literal>. 
The
+               <link xlink:href="https://aclanthology.org/W04-1213/";>shared 
task paper</link>
+               describes the corpus and annotation task. OpenNLP identifies 
this input format as
+               <literal>bionlp2004</literal>.
+               </para>
+
+               <section xml:id="tools.corpora.bionlp2004.getting">
+                       <title>Getting the data</title>
+                       <para>
+                       A copy of the original training and evaluation files is 
available in the
+                       <filename>original-data</filename> directory of the
+                       <link 
xlink:href="https://github.com/spyysalo/jnlpba";>JNLPBA corpus repository</link>.
+                       The corpus is not distributed with OpenNLP. Review the 
terms supplied with the corpus
+                       before using or redistributing it.
+                       </para>
+               </section>
+
+               <section xml:id="tools.corpora.bionlp2004.format">
+                       <title>Input format</title>
+                       <para>
+                       The converter reads UTF-8 text with one token and one 
IOB tag per line, separated by a
+                       tab. A blank line ends a sentence. 
<literal>B-type</literal> starts an entity,
+                       <literal>I-type</literal> continues it, and 
<literal>O</literal> marks a token outside
+                       an entity. Lines beginning with 
<literal>###MEDLINE:</literal> mark document boundaries
+                       in the original corpus. For example:
+                       </para>
+                       <screen>
+<![CDATA[IL-2  B-DNA
+receptor       I-DNA
+activates      O
+T      B-cell_type
+cells  I-cell_type
+.      O
+
+]]>
+                       </screen>
+               </section>
+
+               <section xml:id="tools.corpora.bionlp2004.converting">
+                       <title>Converting the data</title>
+                       <para>
+                       Pass the desired entity types to 
<option>-types</option> as a comma-separated list. The
+                       values are case-sensitive and must use the names shown 
above. This command selects all
+                       five types and writes native OpenNLP name finder 
samples to
+                       <filename>jnlpba.train</filename>:
+                       </para>
+                       <screen>
+<![CDATA[$ opennlp TokenNameFinderConverter bionlp2004 \
+  -data original-data/train/Genia4ERtask1.iob2 \
+  -types DNA,protein,cell_type,cell_line,RNA \
+  > jnlpba.train]]>
+                       </screen>
+                       <para>
+                       The input example from the previous section is 
converted to:
+                       </para>
+                       <screen>
+<![CDATA[<START:DNA> IL-2 receptor <END> activates <START:cell_type> T cells 
<END> .]]>
+                       </screen>
+                       <para>
+                       To convert only a subset, list only those types, for 
example
+                       <literal>-types protein,cell_type</literal>. The 
resulting file can be passed to the
+                       standard <command>TokenNameFinderTrainer</command>. See
+                       <xref linkend="tools.namefind.training"/> for training
+                       parameters and data recommendations.
+                       </para>
+               </section>
+       </section>
+
        <section xml:id="tools.corpora.brat">
                <title>Brat Format Support</title>
                <para>

Reply via email to