【问题标题】:Lucene 5.0 UnsupportedOperationExceptionLucene 5.0 UnsupportedOperationException
【发布时间】:2015-03-06 13:03:21
【问题描述】:

我使用 Lucene 5.0,我想添加自己的停用词。

    CharArraySet stopSet = StandardAnalyzer.STOP_WORDS_SET;
    stopSet.add("i");
    stopSet.add("m");
    stopSet.add("t");
    stopSet.add("can");
    stopSet.add("said");
    tokenStream = new StopFilter(tokenStream, stopSet);

这在how to add custom stop words using lucene in java 中找到。但它在我的工作中不起作用。问题如下。

Exception in thread "main" java.lang.UnsupportedOperationException
at org.apache.lucene.analysis.util.CharArrayMap$UnmodifiableCharArrayMap.put(CharArrayMap.java:606)
at org.apache.lucene.analysis.util.CharArraySet.add(CharArraySet.java:115)
at Main.main(Main.java:23)

我该如何解决。非常感谢。

【问题讨论】:

    标签: java lucene nlp


    【解决方案1】:

    StandardAnalyzer 的停止集是不可修改的集。所以你不能修改它。不过很容易处理,只需复制它:

    CharArraySet stopSet = CharArraySet.Copy(StandardAnalyzer.STOP_WORDS_SET);
    stopSet.add("i");
    //etc.
    

    然后您可以将该 stopset 传递到 StandardAnalyzer constructor,或使用它创建您自己的 StopFilter

    您所指的答案在这方面是不正确的。它在 Lucene 3.6 中也是不可修改的(至少早在 2.9 中)。

    等等……我写了那个答案。 尴尬

    【讨论】:

    • 谢谢。另一件事是,我需要读取一个大的 json 文件。你能推荐一种方法吗?
    • 这才是问题的正确解决方案。谢谢你。 @PatrickWAN 如果它解决了您的问题,请接受此答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2021-03-07
    • 1970-01-01
    • 2015-12-27
    • 2011-08-10
    • 2013-02-26
    相关资源
    最近更新 更多