如何使用标记化来破坏单词和数字

时间:2014-11-13 17:26:09

标签: marklogic

是否可以为字段配置自定义标记化规则,以便将包含字母和数字的单词分解为单独的标记?例如,我喜欢字符串" 50pc"被分成两个代币" 50"和" pc"。

我可以为每个数字字符创建一个覆盖,将其视为符号,但这会给我三个字" 5"," 0"和" pc",这不是我想要的。

甚至可以使用标记化来执行此操作,还是需要预处理数据?

3 个答案:

答案 0 :(得分:2)

Tokenizer overrides旨在将10x4等表单拆分为104。没有边界字符的拆分一开始看起来是不可能的。但是......你可以使一个tokenizer覆盖特定于字段。所以这是一个(未经测试的)想法。

  • 创建一个使用admin:database-add-field-tokenizer-override的字段,将数字字符归类为removepunctuation。根据需要配置字段root,includes和exclude。
  • 创建另一个对字母字符执行相同操作的字段。
  • 单独保留普通的单词查询字段。

使用该配置,您仍然可以使用cts:word-query来匹配50pc,并使用cts:field-word-query来匹配50pc

但是,预处理可能仍然是处理50pc的最佳方式。这样你就可以在标记中包含单位,如<pieces xmlns="http://example.com/2014/units" value="50">50pc</pieces> - 或者沿着那些行包含的东西。从长远来看,这可能会给你更大的灵活性。

答案 1 :(得分:1)

简短回答:不,自定义标记化现在不会给你那么大的灵活性。

考虑是否存在三个令牌“5”,“0”,“pc”实际上是一个问题。这取决于您的应用程序,数据以及您正在进行的查询类型。它会对通配符产生影响,对于较长的数字,您可能会获得更复杂的查询或需要位置以使它们准确无法过滤,因为对于字段查询,数字会变成短语。您将获得比其他情况更长的术语列表,在某些情况下,这可能会导致问题。

答案 2 :(得分:0)

不确定,但这是答案:

tokenizer.wordChars('_', '_');

如果不是,请详细说明。