【发布时间】:2020-10-22 23:47:10
【问题描述】:
我想对Best Beat Makers 之类的字符串进行标记,以几乎类似于 NGram 的方式为每个单词生成标记,例如:
IN: "Best Beat Makers"
OUT: ["Best", "Beat", "Makers", "Best Beat", "Best Beat Makers"]
^ ^
| |
How can I generate these tokens?
结果应该不包含"Beat Makers",因为我只想以复合方式(例如word1、word1 + word2、word1 + word2 + word3等)而不是组合(例如 word1、word1 + word2、word2 + word3 等)。
目前,我只能使用StandardTokenizerFactory 或ClassicTokenizerFactory 生成前三个标记,而传统的NGramTokenizerFactory 仅适用于单词的字符(并且在索引方面有点昂贵)。
我考虑过的一个选项是使用StandardTokenizerFactory 获取前三个令牌,然后创建一个copyField 到另一个字段,该字段使用PatternTokenizerFactory 并定义了一个正则表达式来获取最后两个令牌,但我会如果可能的话,更愿意只使用一个字段来获取我需要的令牌。
如果您更熟悉 ElasticSearch,我仍然想听听您的想法,因为 Solr 和 ES 之间的分词器或多或少相似,可能会将我推向正确的方向。谢谢!
【问题讨论】: