--- title: Lindera description: Uses prebuilt dictionaries to tokenize Chinese, Japanese, and Korean text canonical: https://docs.paradedb.com/documentation/tokenizers/available-tokenizers/lindera --- 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. ```sql Chinese Lindera CREATE INDEX search_idx ON mock_items USING bm25 (id, (description::pdb.lindera(chinese))) WITH (key_field='id'); ``` ```sql Korean Lindera CREATE INDEX search_idx ON mock_items USING bm25 (id, (description::pdb.lindera(korean))) WITH (key_field='id'); ``` ```sql Japanese Lindera CREATE INDEX search_idx ON mock_items USING bm25 (id, (description::pdb.lindera(japanese))) WITH (key_field='id'); ``` 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 Expected Response 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 Expected Response text -------------------------------- {hello," ",world,!," ",你好,!} (1 row) ``` ## NFKC Normalization Set `nfkc` to `true` to apply [Unicode NFKC normalization](https://unicode.org/reports/tr15/) 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 Expected Response 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 Expected Response text ------------ {ニホンゴ} (1 row) ```