Pesquise um termo em japonês

Obrigado pela sua resposta.

  1. Um parágrafo de exemplo aqui em katakana
    通報テスト9, 通報テスト11, 通報テスト8… etc

  2. Um termo de busca de exemplo que você tem e que não está funcionando
    テスト
    O “テスト” não está funcionando.


    Mas o “通報” ou “通報テスト” parece estar funcionando corretamente.

  3. Confirmação de que o locale do seu site está em japonês ou que search tokenize chinese japanese korean está habilitado
    Sim, confirmei que ambas as configurações estão corretas.


Uma coisa incrível aconteceu. Após alterar o ‘comprimento mínimo do termo de busca’ do valor padrão de 2 para 1, agora conseguimos pesquisar por katakana. Não sei o motivo, mas essa configuração é relevante?

Consigo reproduzir isso e é principalmente devido a uma combinação de

e

O termo テスト é convertido para テ ス ト após passar pelo CppjiebaRb, o que aciona o protetor min_search_length que temos.

@sam Isso é complicado de corrigir, pois precisamos de um tokenizador adequado para o japonês para resolver problemas de busca como esse de vez. Podemos fazer ajustes aqui e ali, mas será um jogo de ‘quem bate no topo’.

Não acredito que exista um segmentador japonês adequado que possamos usar.

Acho que o melhor a fazer aqui é simplesmente reduzir esses padrões para 1.

Caso contrário, estaremos impedindo que as pessoas busquem por “casa” em japonês, o que parece razoável (家) … permitimos que as pessoas busquem por “casa” em inglês.

Não uso Ruby atualmente nem sei qual é o requisito do Discourse, mas parece haver uma gem para “mecab”.

Cheguei a este tópico porque descobri que a busca por algumas palavras não funciona em minha instância pública hospedada. Eu tenho

  • termo de busca mínimo: 1
  • busca tokenizada chinês, japonês, coreano: ativado
  • localidade padrão: japonês

Se bem me lembro, inicializei o site com a localidade em inglês e depois mudei a configuração para japonês.

As palavras que descobri que falharam na busca são “北側”, “真上”, “一般”. Essas palavras estão em este tópico. Muitas palavras funcionam, mas essas não. Não vejo nenhum padrão se uma palavra funciona ou não.

Existe alguma maneira de verificar o índice de busca gerado na instância hospedada? Posso ler Ruby e japonês, então se houver uma maneira de ver como o Discourse gera o índice de busca para CJK, talvez eu possa ajudar.

CppjiebaRb, ou cppjieba, mencionado por @tgxworld parece ser para chinês. É usado para a localidade japonesa?

O Mecab não é uma opção, infelizmente, ele é GPL e preferimos apenas adotar licenças MIT e BSD em dependências.

Temos um PR que adicionará TinySegmenter: Javascriptだけで実装されたコンパクトな分かち書きソフトウェア, que tem uma licença compatível. Você pode testar a segmentação e nos informar como funciona? Há um formulário no site que você pode usar para testar.

Eu tentei o tiny_segmenter do Rubygems e, pelo menos, ele gera as palavras que listei no comentário 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 一般
 "北側",
 "真上",
 "一般",
 "一般",
 "一般",
 "北側",
 "一般",

Uma rápida pesquisa sobre o TinySegmenter me disse que o modelo que ele usa não é tão bom. Existe um gerador de modelo para ele.

Ainda não tentei.