感谢您的回复。
-
此处为一段使用片假名的示例文本
通報テスト9、通報テスト11、通報テスト8……等 -
您遇到无法搜索的示例关键词
テスト
“テスト”无法搜索。
但“通報”或“通報テスト”似乎能正常搜索。
-
确认您的站点语言环境是否为日语,或是否已启用
search tokenize chinese japanese korean
是的,我已确认这两项设置均已正确配置。
发生了一件不可思议的事。我们将“最小搜索词长度”从默认值 2 改为 1 后,现在可以搜索片假名了。我不清楚原因,但这个设置是否相关呢?
我可以复现这个问题,这主要是由于以下两者的组合导致的:
和
术语 テスト 在经过 CppjiebaRb 处理后变成了 テ ス ト,这触发了我们设置的 min_search_length 保护机制。
@sam 这个问题很难修复,因为我们需要一个合适的日语分词器,以彻底解决此类搜索问题。我们可以在这里或那里做一些调整,但这将是一场“打地鼠”的游戏。
我认为不存在可用的合适日语分词器。
我认为最好的做法是将这些默认值简单地调整为 1。
否则,我们将禁止用户使用日语搜索“家”(家),这似乎不太合理……我们允许用户使用英语搜索“house”。
我这些天不使用 Ruby,也不知道 Discourse 的要求,但似乎有一个用于“MeCab”的 gem。
我之所以来到这个话题,是因为我发现搜索某些词在我托管的公共实例上不起作用。我有
我记得,我最初是用英文初始化网站,后来才将其更改为日语。
我发现搜索失败的词是“北側”、“真上”、“一般”。这些词在这个话题中。许多词可以搜索,但这些词不行。我看不到词语是否能搜索的任何模式。
有没有办法检查托管实例上生成的搜索索引?我能读 Ruby 和日语,所以如果有一种方法可以看到 Discourse 如何为 CJK 生成搜索索引,我或许能提供一些帮助。
@tgxworld 提到的 CppjiebaRb 或 cppjieba 似乎是用于中文的。它是否用于日语环境?
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 告诉我它使用的模型不是很好。有一个模型生成器。
不过我还没试过。