搜索日语术语

感谢您的回复。

  1. 此处为一段使用片假名的示例文本
    通報テスト9、通報テスト11、通報テスト8……等

  2. 您遇到无法搜索的示例关键词
    テスト
    “テスト”无法搜索。


    但“通報”或“通報テスト”似乎能正常搜索。

  3. 确认您的站点语言环境是否为日语,或是否已启用 search tokenize chinese japanese korean
    是的,我已确认这两项设置均已正确配置。


发生了一件不可思议的事。我们将“最小搜索词长度”从默认值 2 改为 1 后,现在可以搜索片假名了。我不清楚原因,但这个设置是否相关呢?

我可以复现这个问题,这主要是由于以下两者的组合导致的:

术语 テスト 在经过 CppjiebaRb 处理后变成了 テ ス ト,这触发了我们设置的 min_search_length 保护机制。

@sam 这个问题很难修复,因为我们需要一个合适的日语分词器,以彻底解决此类搜索问题。我们可以在这里或那里做一些调整,但这将是一场“打地鼠”的游戏。

我认为不存在可用的合适日语分词器。

我认为最好的做法是将这些默认值简单地调整为 1。

否则,我们将禁止用户使用日语搜索“家”(家),这似乎不太合理……我们允许用户使用英语搜索“house”。

我这些天不使用 Ruby,也不知道 Discourse 的要求,但似乎有一个用于“MeCab”的 gem。

我之所以来到这个话题,是因为我发现搜索某些词在我托管的公共实例上不起作用。我有

  • 最小搜索词长度:1
  • 搜索分词中文、日文、韩文:启用
  • 默认语言:日语

我记得,我最初是用英文初始化网站,后来才将其更改为日语。

我发现搜索失败的词是“北側”、“真上”、“一般”。这些词在这个话题中。许多词可以搜索,但这些词不行。我看不到词语是否能搜索的任何模式。

有没有办法检查托管实例上生成的搜索索引?我能读 Ruby 和日语,所以如果有一种方法可以看到 Discourse 如何为 CJK 生成搜索索引,我或许能提供一些帮助。

@tgxworld 提到的 CppjiebaRbcppjieba 似乎是用于中文的。它是否用于日语环境?

Mecab 不幸不是一个选项,它是 GPL 的,我们更倾向于在依赖项中只采用 MIT 和 BSD 许可证。

我们有一个 PR 将添加 http://chasen.org/~taku/software/TinySegmenter/,它具有兼容的许可证。你能试用一下分词功能,并告诉我们它的效果如何吗?网站上有一个表单可供测试。

我尝试了 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 告诉我它使用的模型不是很好。有一个模型生成器。

不过我还没试过。