Buscar un término en japonés

Gracias por tu respuesta.

  1. Un párrafo de ejemplo aquí en katakana
    通報テスト9, 通報テスト11, 通報テスト8… etc.

  2. Un término de búsqueda de ejemplo que no funciona
    テスト
    El término “テスト” no funciona.


    Pero “通報” o “通報テスト” parecen funcionar correctamente.

  3. Confirmación de que la configuración regional de tu sitio está en japonés o de que search tokenize chinese japanese korean está habilitado
    Sí, he confirmado que ambos ajustes están configurados correctamente.


Sucedió algo increíble. Tras cambiar la ‘longitud mínima del término de búsqueda’ del valor predeterminado de 2 a 1, ahora podemos buscar en katakana. No sé por qué, pero ¿es relevante esta configuración?

Puedo reproducir esto y se debe principalmente a una combinación de

y

El término テスト se convierte en テ ス ト después de pasar por CppjiebaRb, lo que activa el protector de longitud mínima de búsqueda que tenemos.

@sam Esto es complicado de solucionar porque necesitamos un tokenizador adecuado para el japonés para resolver problemas de búsqueda como este de forma definitiva. Podemos hacer ajustes aquí y allá, pero será un juego de golpear topos.

No creo que exista un segmentador japonés adecuado que podamos usar.

Creo que lo mejor que podemos hacer aquí es simplemente reducir estos valores predeterminados a 1.

De lo contrario, estaríamos prohibiendo que las personas busquen “casa” en japonés (家), lo cual parece razonable… permitimos que las personas busquen “house” en inglés.

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?

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.

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.