Search a term in Japanese

Спасибо за ваш ответ.

  1. Пример абзаца здесь на катакане
    通報テスト 9, 通報テスト 11, 通報テスト 8… и т.д.

  2. Пример поискового запроса, который у вас не работает
    テスト
    Поиск по «テスト» не работает.


    Однако поиск по «通報» или «通報テスト», похоже, работает корректно.

  3. Подтверждение того, что локаль вашего сайта — японская или что включена опция search tokenize chinese japanese korean
    Да, я подтвердил, что оба параметра настроены правильно.


Произошло нечто удивительное. После изменения параметра «минимальная длина поискового запроса» со стандартного значения 2 на 1 теперь можно искать по катакане. Не знаю, почему это сработало, но имеет ли эта настройка к этому отношение?

Я могу воспроизвести эту проблему, и она в основном обусловлена сочетанием

и

Термин テスト преобразуется в テ ス ト после обработки через CppjiebaRb, что вызывает срабатывание нашего ограничителя min_search_length.

@sam Исправить это непросто, поскольку для окончательного решения подобных проблем с поиском по-японски нам нужен корректный токенизатор. Мы можем вносить точечные правки, но это превратится в бесконечную борьбу с последствиями.

Я не думаю, что существует подходящий японский сегментатор, который мы могли бы использовать.

Думаю, лучшее решение здесь — просто снизить эти значения по умолчанию до 1.

Иначе мы будем запрещать людям искать слово «дом» на японском (家), что кажется нелогичным, раз мы разрешаем искать его на английском.

В наши дни я не использую Ruby и не знаю требований Discourse, но, похоже, существует gem для «mecab».

Я обратился к этой теме, потому что обнаружил, что поиск некоторых слов не работает на моем публичном хостинге. У меня установлены следующие параметры:

  • минимальная длина поискового термина: 1
  • токенизация поиска для китайского, японского и корейского языков: включена
  • локаль по умолчанию: японская

Насколько я помню, я инициализировал сайт с английской локалью, а позже изменил настройку на японскую.

Слова, которые не удалось найти при поиске: «北側», «真上», «一般». Эти слова содержатся в этой теме. Многие слова работают, но эти — нет. Я не вижу никакой закономерности в том, почему одно слово ищется, а другое — нет.

Есть ли способ проверить сгенерированный поисковый индекс на хостинге? Я владею как Ruby, так и японским языком, поэтому, если существует способ увидеть, как Discourse генерирует поисковый индекс для CJK-языков, я могу быть полезен.

CppjiebaRb или cppjieba, упомянутые @tgxworld, судя по всему, предназначены для китайского языка. Используются ли они для японской локали?

K сожалению, MeCab не подходит, так как он распространяется под лицензией GPL, а мы предпочитаем использовать только зависимости с лицензиями MIT и BSD.

У нас есть pull-запрос, который добавит TinySegmenter: Javascriptだけで実装されたコンパクトな分かち書きソフトウェア — у него совместимая лицензия. Пожалуйста, попробуйте сегментацию и сообщите, насколько хорошо она работает. На сайте есть форма, которую можно использовать для тестирования.

Я попробовал tiny_segmenter из Rubygems, и, по крайней мере, он генерирует слова, которые я перечислил в предыдущем комментарии.

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

Краткий поиск информации о TinySegmenter показал, что используемая им модель не очень качественная. Для неё есть генератор моделей.

Однако я его ещё не пробовал.