java - Lucene Porter Stemmer 线程安全吗?

标签 java multithreading lucene solr nlp

简单问一下,Lucene 包 (Java) 中的 porter 词干分析器线程安全吗?

我猜答案是否定的,因为您需要设置当前字符串,调用 Stem 方法,然后获取当前 block 以获取词干单词。但也许我错过了一些东西 - 是否有线程安全的方法可以从 Lucene 中提取单个单词或字符串的词干?

有经验的人知道实例化一个 Porter Stemmer 实例然后在该 Stemmer 实例上使用同步块(synchronized block)并执行 setCurrent("..."); stem(); get(); 是否会更快吗?例程还是为要处理的每个字符串/文档创建新的波特词干分析器实例更快。

在本例中,我有数千个文档,每个文档都由一个线程池占用(即 1 个线程有一个文档)。

编辑仅供引用 - 使用模式示例:

import org.tartarus.snowball.ext.PorterStemmer;
...
private String stem(String word){
       PorterStemmer stem = new PorterStemmer();
       stem.setCurrent(word);
       stem.stem();
       return stem.getCurrent();
    }

干杯!

最佳答案

查看文档,似乎 PorterStemmer类是不可重入的,所以如果我是你,我会为每个线程构建一个实例。如果词干分析是程序所做的主要事情之一,并且没有其他方法让 CPU 核心保持忙碌,那么同步块(synchronized block)似乎是一个坏主意:程序将一直阻塞,等待词干分析器完成一份文件。我也不会为每个文档创建一个线程;每个核心一个线程的线程池可能是一个更明智的选择。

(没有示例代码,因为我什至无法从 API 文档中找出用法。RTFS 来了解这个东西是如何工作的...)

关于java - Lucene Porter Stemmer 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7483384/

相关文章:

Java,将二维数组与另一个二维数组的每次迭代进行比较以进行 OCR

java - 安全约束 <url-pattern> 行为异常 - websphere

multithreading - TensorFlow/Keras 多线程模型拟合

lucene - 如何检查 Lucene IndexWriter 实例是否有效/打开?

java - 在 apache solr 中搜索 *n@domain* 时出错

Java:继承类不能在方法参数中转换为父类(super class)

java - 最好使用的 keystore 是什么?

java - 线程数和 Java 应用程序性能

java - 当两个线程尝试访问同步块(synchronized block)时会发生什么?

mysql - Solr - 数据导入处理程序 - 完全导入 - 默认情况下 Clean=False?