Rechercher un terme en japonais

Merci pour votre réponse.

  1. Un paragraphe d’exemple ici en katakana
    通報テスト 9, 通報テスト 11, 通報テスト 8… etc.

  2. Un terme de recherche que vous avez et qui ne fonctionne pas
    テスト
    Le terme “テスト” ne fonctionne pas.


    Mais “通報” ou “通報テスト” semblent fonctionner correctement.

  3. Confirmation que la localisation de votre site est en japonais ou que search tokenize chinese japanese korean est activé
    Oui, j’ai confirmé que les deux paramètres sont correctement configurés.


Une chose incroyable s’est produite. Après avoir modifié la « longueur minimale du terme de recherche » de la valeur par défaut de 2 à 1, nous pouvons maintenant rechercher des katakana. Je ne sais pas pourquoi, mais ce paramètre est-il pertinent ?

Je peux reproduire ce problème, qui est principalement dû à une combinaison de

et

Le terme テスト est converti en テ ス ト après avoir passé par CppjiebaRb, ce qui déclenche le protecteur min_search_length que nous avons mis en place.

@sam C’est délicat à corriger car nous avons besoin d’un véritable tokenizeur pour le japonais pour résoudre définitivement des problèmes de recherche comme celui-ci. Nous pouvons apporter des ajustements ici et là, mais cela ressemblera à un jeu de marteau-piqueur.

Je ne pense pas qu’il existe un segmenteur japonais approprié que nous puissions utiliser.

Je pense que la meilleure chose à faire ici est simplement de réduire ces valeurs par défaut à 1.

Autrement, nous empêchons les gens de rechercher « maison » en japonais, ce qui semble raisonnable (家) … alors que nous autorisons les recherches de « maison » en anglais.

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 ?

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.

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.