Search a term in Japanese

Thank you for your reply.

  1. A sample paragraph here in katakana
    通報テスト9,通報テスト11,通報テスト8…etc

  2. A sample search term that you have that is not working
    テスト
    The “テスト” is not working.


    But the “通報” or “通報テスト” seems to be working correctly.

  3. Confirmation that your site locale is in Japanese or that search tokenize chinese japanese korean is enabled
    Yes, I have confirmed that both settings are set correctly.


1 « J'aime »

An incredible thing happened. After changing the ‘min search term length’ from the default value of 2 to 1, we are now able to search for katakana. I don’t know why, but is this setting relevant?

1 « J'aime »

I can repro this and it is mainly due to a combination of

https://github.com/discourse/discourse/blob/e8a842ab8cbbabe92fe33cfc4bbe5f839d4543e9/lib/search.rb#L66-L69

and

https://github.com/discourse/discourse/blob/e8a842ab8cbbabe92fe33cfc4bbe5f839d4543e9/lib/search.rb#L242-L243

The term テスト is converted to テ ス ト after going through CppjiebaRb and this trips the min_search_length protector we have.

@sam This is tricky to fix because we need a proper tokenizer for Japanese to resolve search issues like this for good. We can do tweaks here and there but it is going to be a game of wack a mole.

3 « J'aime »

I don’t think there exists a proper Japanese segmentar we can use.

I think the best thing to do here is simply tone down these defaults to 1.

https://github.com/discourse/discourse/blob/580383dff342a9a12f2270a8224b91c12f0e6ca7/config/site_settings.yml#L1837-L1844

Otherwise we are banning people from searching for house in Japanese which seems reasonable (家) … we allow people to search for house in English.

2 « J'aime »

Je n’utilise plus Ruby de nos jours et j’ignore les exigences de Discourse, mais il semble y avoir une gem pour “mecab”.

Je suis arrivé à ce sujet parce que j’ai constaté que la recherche de certains mots ne fonctionne pas sur mon instance publique hébergée. J’ai :

  • longueur minimale du terme de recherche : 1
  • tokenisation de recherche chinois japonais coréen : activée
  • locale par défaut : japonais

Si ma mémoire est bonne, j’ai initialisé le site avec la locale anglaise et l’ai changée en japonais plus tard.

Les mots dont la recherche a échoué sont “北側”, “真上”, “一般”. Ces mots se trouvent dans ce sujet. De nombreux mots fonctionnent, mais ceux-ci non. Je ne vois aucun schéma quant au fonctionnement ou non d’un mot.

Existe-t-il un moyen de vérifier l’index de recherche généré sur l’instance hébergée ? Je peux lire le Ruby et le japonais, donc s’il existe un moyen de voir comment Discourse génère l’index de recherche pour le CJK, je pourrais peut-être aider.

CppjiebaRb, ou cppjieba, mentionné par @tgxworld semble être pour le chinois. Est-il utilisé pour la locale japonaise ?

2 « J'aime »

Mecab n’est malheureusement pas une option, il est sous licence GPL et nous préférons n’accepter que les licences MIT et BSD pour les dépendances.

Nous avons une PR qui ajoutera TinySegmenter: Javascriptだけで実装されたコンパクトな分かち書きソフトウェア qui a une licence compatible. Pouvez-vous tester la segmentation et nous faire savoir comment elle fonctionne, il y a un formulaire sur le site web que vous pouvez utiliser pour tester.

2 « J'aime »

J’ai essayé tiny_segmenter de Rubygems et au moins il génère les mots que j’ai listés dans le commentaire précédent.

# coding: utf-8
require 'tiny_segmenter'
require 'pp'

s = File.read('topic27.txt')

ts = TinySegmenter.new
sg = ts.segment(s, ignore_punctuation: true)
pp(sg)
bundle exec ruby test.rb | grep -e 北側 -e 真上 -e 一般
 "北側",
 "真上",
 "一般",
 "一般",
 "一般",
 "北側",
 "一般",

Une recherche rapide sur TinySegmenter m’a appris que le modèle qu’il utilise n’est pas aussi bon. Il existe un générateur de modèles pour cela.

Je ne l’ai pas encore essayé cependant.

3 « J'aime »