You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opennlp.apache.org by kr...@apache.org on 2026/07/21 10:40:16 UTC

(opennlp) 11/12: OPENNLP-1894: Document lattice CJK tokenization with a mirror-tested example

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

krickert pushed a commit to branch OPENNLP-1894-lattice-cjk
in repository https://gitbox.apache.org/repos/asf/opennlp.git

commit 104cd0e2954c30a9bed1a157ba7ae38341fef572
Author: Kristian Rickert <kr...@gmail.com>
AuthorDate: Mon Jul 20 04:44:21 2026 -0400

    OPENNLP-1894: Document lattice CJK tokenization with a mirror-tested example
    
    Add a lattice tokenizer section to the manual citing LatticeUsageExampleTest.
---
 opennlp-docs/src/docbkx/tokenizer.xml | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/opennlp-docs/src/docbkx/tokenizer.xml b/opennlp-docs/src/docbkx/tokenizer.xml
index cd1d8a2dd..fbc74fbb2 100644
--- a/opennlp-docs/src/docbkx/tokenizer.xml
+++ b/opennlp-docs/src/docbkx/tokenizer.xml
@@ -538,5 +538,30 @@ wordTokenizer.tokenize("The quick brown fox.", (start, end, type) -> {
 				</programlisting>
 			</para>
 		</section>
+		<section xml:id="tools.tokenizer.lattice">
+			<title>Lattice tokenization for CJK</title>
+			<para>
+				Languages written without spaces need a dictionary-backed segmenter.
+				<code>LatticeTokenizer</code> scores paths over a mecab-format dictionary and
+				emits the cheapest segmentation with spans in original text coordinates.
+				<code>UnigramSegmenter</code> does the same from a plain frequency lexicon.
+				Install a dictionary archive with <code>MecabDictionaryInstaller</code>, load it
+				as a <code>MecabDictionary</code>, and tokenize.
+				<code>LatticeUsageExampleTest</code> asserts the install-load-tokenize and
+				lexicon flows shown here.
+				<programlisting language="java">
+<![CDATA[MecabDictionaryInstaller.install(archiveUri, dictionaryDirectory);
+LatticeTokenizer tokenizer =
+    new LatticeTokenizer(MecabDictionary.load(dictionaryDirectory));
+
+String[] tokens = tokenizer.tokenize(text);
+Span[] spans = tokenizer.tokenizePos(text);
+List<Morpheme> morphemes = tokenizer.analyze(text);
+
+UnigramSegmenter segmenter = UnigramSegmenter.load(Path.of("words.txt"));
+String[] words = segmenter.tokenize(text);]]>
+				</programlisting>
+			</para>
+		</section>
 	</section>
 </chapter>