我目前为用户提供了一个选项,在过滤ngram频率的文本正文时,是否包含停用词。通常,这是按如下方式完成的:
snowballAnalyzer = new SnowballAnalyzer(Version.LUCENE_30, "English", stopWords);
shingleAnalyzer = new ShingleAnalyzerWrapper(snowballAnalyzer, this.getnGramLength());stopWords被设置为包含在ngram中的单词的完整列表,或者从它们中删除。this.getnGramLength());只包含当前ngram的长度,最大值为3。
如果我在过滤文本时使用停用词来过滤三元组的文本"satellite is definitely to Earth“,输出结果是:
No=1, Key=to, Freq=1
No=2, Key=definitely, Freq=1
No=3, Key=falling to earth, Freq=1
No=4, Key=satellite, Freq=1
No=5, Key=is, Freq=1
No=6, Key=definitely falling to, Freq=1
No=7, Key=definitely falling, Freq=1
No=8, Key=falling, Freq=1
No=9, Key=to earth, Freq=1
No=10, Key=satellite is, Freq=1
No=11, Key=is definitely, Freq=1
No=12, Key=falling to, Freq=1
No=13, Key=is definitely falling, Freq=1
No=14, Key=earth, Freq=1
No=15, Key=satellite is definitely, Freq=1但是如果我不对三元语法使用停用词,输出是这样的:
No=1, Key=satellite, Freq=1
No=2, Key=falling _, Freq=1
No=3, Key=satellite _ _, Freq=1
No=4, Key=_ earth, Freq=1
No=5, Key=falling, Freq=1
No=6, Key=satellite _, Freq=1
No=7, Key=_ _, Freq=1
No=8, Key=_ falling _, Freq=1
No=9, Key=falling _ earth, Freq=1
No=10, Key=_, Freq=3
No=11, Key=earth, Freq=1
No=12, Key=_ _ falling, Freq=1
No=13, Key=_ falling, Freq=1为什么我看到下划线?我会想到看到简单的单字图,“卫星坠落”,“坠落地球”和“卫星坠落地球”?绝对在我正在使用的停用词集中。
我可以用下划线过滤掉结果,但是...
发布于 2012-12-15 04:01:07
下划线表示“缺少停用词”。为了避免这种行为,您应该将enablePositionIncrements设置为false,但是SnowballAnalyzer (在4.0.0-Beta中已被弃用)不允许您这样做。
一种解决方案是首先使用不带停用词的StandardAnalyzer,然后使用StopFilter、SnowballFilter和ShingleFilter修饰输出。Lucene 4.0.0-Beta中的二元语法示例:
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_40, CharArraySet.EMPTY_SET);
TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(input));
StopFilter stopFilter = new StopFilter(Version.LUCENE_40, tokenStream, stopWords);
stopFilter.setEnablePositionIncrements(false);
SnowballFilter snowballFilter = new SnowballFilter(stopFilter, "English");
ShingleFilter bigramShingleFilter = new ShingleFilter(snowballFilter, 2, 2);希望这能让你走上正轨!
编辑
使用Lucene v4.4+不可能了,仍然在寻找一个很好的替代方案……
https://stackoverflow.com/questions/12491077
复制相似问题