- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
出于特定目的,我在 Apache Lucene 中实现了自己的分析器。在对术语进行索引之前,需要应用某些过滤器。我认为更改过滤器的应用顺序并不重要。但似乎确实如此。例如;
analyzer = new Analyzer(){
@Override
protected TokenStreamComponents createComponents(String fieldName){
AttributeFactory factory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY;
Tokenizer source = new NGramTokenizer(factory,3,10);
TokenStream filter = new NewlineFilter(source);
filter = new LowerCaseFilter(filter);
filter = new UsefulGrams(getVersion(), filter, usefulGramSet);
filter = new EmptySpaceFilter(filter);
return new TokenStreamComponents(source,filter);
};
};
我的分词器正在生成克,然后换行符被剪切,所有大小写都降低。之后,我只希望我认为“有用”的克应该出现在索引中,该过滤器会消除无用的克。最后,它过滤掉完全由空白空间组成的克。
根据我持有的数据集,此顺序生成 316 个索引术语。但是如果我改变过滤器的顺序;
analyzer = new Analyzer(){
@Override
protected TokenStreamComponents createComponents(String fieldName){
AttributeFactory factory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY;
Tokenizer source = new NGramTokenizer(factory,3,10);
TokenStream filter = new UsefulGrams(getVersion(), source, usefulGramSet);
filter = new NewlineFilter(filter);
filter = new EmptySpaceFilter(filter);
filter = new LowerCaseFilter(filter);
return new TokenStreamComponents(source,filter);
};
};
这会产生 350 个索引术语。请注意,“第一个”过滤器必须使用 SOURCE TOKENIZER,但其他过滤器使用 FILTER TOKENSTREAM。如果我将 SOURCE 放入每个参数中,它会给出与“addsuppression”相关的警告。
我的问题是,应用这些过滤器的顺序应该是什么?我想应用所有这些(全部小写,只是我选择的术语,没有空克,没有换行符),不会认为这会被任何东西改变,显然它会改变。
最佳答案
是的,顺序很重要。过滤器按顺序应用于文本。
当一个过滤器的操作会影响另一个过滤器的结果时,这一点很重要。对于词干分析器来说,这种情况很容易发生。
如果我有一个 SynonymFilter sith 同义词(viking -> seafarer)和一个 EnglishStemFilter,那么 viking 最终将是
如果我将词干分析器放在 SynonymFilter 之前:
至于您的分析仪的正确排序,我不知道。主要问题似乎是在哪里放置 UsefulGrams
过滤器,我不知道它实际上是做什么的。
关于java - Apache Lucene中 "order of applying filters"背后的逻辑是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37375813/
我正在寻找匹配 /(?=\W)(gimme)(?=\W)/gi 或类似的东西。 \W 应该是零宽度字符来包围我的实际匹配项。 也许有一些背景。我想用添加的文字填充替换某些单词(总是 \w+),但前提是
如何在不使用 Intent 连接到 VPN 服务的情况下以编程方式检测流量是否正在通过 VPN。有系统调用吗? 最佳答案 这个有效: private boolean checkVPN() {
我是一名优秀的程序员,十分优秀!