Back to Paradedb

Lindera

docs/documentation/tokenizers/available-tokenizers/lindera.mdx

0.24.22.5 KB
Original Source

The Lindera tokenizer is a more advanced CJK tokenizer that uses prebuilt Chinese, Japanese, or Korean dictionaries to break text into meaningful tokens (words or phrases) rather than on individual characters. Chinese Lindera uses the CC-CEDICT dictionary, Korean Lindera uses the KoDic dictionary, and Japanese Lindera uses the IPADIC dictionary.

By default, non-CJK text is lowercased, and punctuation is not ignored. As of version 0.22.4, whitespace is removed by default. On earlier versions it is preserved.

<CodeGroup> ```sql Chinese Lindera CREATE INDEX search_idx ON mock_items USING bm25 (id, (description::pdb.lindera(chinese))) WITH (key_field='id'); ```
sql
CREATE INDEX search_idx ON mock_items
USING bm25 (id, (description::pdb.lindera(korean)))
WITH (key_field='id');
sql
CREATE INDEX search_idx ON mock_items
USING bm25 (id, (description::pdb.lindera(japanese)))
WITH (key_field='id');
</CodeGroup>

To get a feel for this tokenizer, run the following command and replace the text with your own:

sql
SELECT 'Hello world! 你好!'::pdb.lindera(chinese)::text[];
ini
              text
------------------------
 {hello,world,!,你好,!}
(1 row)

Keep Whitespace

By default, whitespace is not tokenized. To include it, set keep_whitespace to true.

sql
SELECT 'Hello world! 你好!'::pdb.lindera(chinese, 'keep_whitespace=true')::text[];
ini
              text
--------------------------------
 {hello," ",world,!," ",你好,!}
(1 row)

NFKC Normalization

Set nfkc to true to apply Unicode NFKC normalization to the text before it is segmented. This collapses compatibility characters such as full-width Latin letters and digits to their canonical half-width forms, so that, for example, ABC and ABC produce the same tokens.

sql
SELECT 'ABC123'::pdb.lindera(japanese, 'nfkc=true', 'lowercase=false')::text[];
ini
   text
----------
 {ABC,123}
(1 row)

Reading Form

Set reading_form to true to replace each token with its dictionary reading form after segmentation. For Japanese (IPADIC), the surface form is replaced with its katakana reading; for Korean (KoDic), Hanja are replaced with their Hangul reading. This is supported for Japanese and Korean only.

sql
SELECT '日本語'::pdb.lindera(japanese, 'reading_form=true', 'lowercase=false')::text[];
ini
    text
------------
 {ニホンゴ}
(1 row)