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 me gusta

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 me gusta

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 Me gusta

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 Me gusta

Actualmente no uso Ruby ni conozco los requisitos de Discourse, pero parece haber una gema para “MeCab”.

Llegué a este tema porque descubrí que la búsqueda de algunas palabras no funciona en mi instancia pública alojada. Tengo:

  • longitud mínima del término de búsqueda: 1
  • tokenización de búsqueda chino, japonés, coreano: habilitada
  • idioma predeterminado: japonés

Si mal no recuerdo, inicialicé el sitio con el idioma inglés y luego cambié la configuración a japonés.

Las palabras que encontré que fallaron en la búsqueda son “北側”, “真上”, “一般”. Estas palabras están en este tema. Muchas palabras funcionan, pero estas no. No veo ningún patrón sobre si una palabra funciona o no.

¿Hay alguna forma de comprobar el índice de búsqueda generado en la instancia alojada? Puedo leer tanto Ruby como japonés, así que si hay alguna forma de ver cómo Discourse genera el índice de búsqueda para CJK, podría ser de ayuda.

CppjiebaRb, o cppjieba, mencionado por @tgxworld, parece ser para chino. ¿Se utiliza para el idioma japonés?

2 Me gusta

Mecab no es una opción, lamentablemente, tiene licencia GPL y preferimos solo usar licencias MIT y BSD en las dependencias.

Tenemos una PR que añadirá TinySegmenter: Javascriptだけで実装されたコンパクトな分かち書きソフトウェア que tiene una licencia compatible. ¿Puedes probar la segmentación y decirnos qué tal funciona? Hay un formulario en el sitio web que puedes usar para probar.

2 Me gusta

He probado tiny_segmenter de Rubygems y al menos genera las palabras que he listado en el comentario anterior.

# 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 一般
 "北側",
 "真上",
 "一般",
 "一般",
 "一般",
 "北側",
 "一般",

Una búsqueda rápida sobre TinySegmenter me dijo que el modelo que utiliza no es tan bueno. Hay un generador de modelos para ello.

Aunque no lo he probado.

3 Me gusta