我正在尝试将 JLanguageTool 与 JavaFX 和 RichtextFX 结合使用,以获得一个 GUI,它可以对 a 中的给定输入进行拼写检查Codearea
并突出显示拼写错误的单词。我的问题是,即使对于带有少量拼写错误(3 个拼写错误)的小句子(6 个单词),我的程序也需要 10-12 秒才能执行(仅拼写检查部分)。我已经尝试通过停用我不需要的规则来优化我的程序。这是我的代码:
import org.languagetool.JLanguageTool;
import org.languagetool.language.GermanyGerman;
import org.languagetool.rules.Category;
import org.languagetool.rules.CategoryId;
import org.languagetool.rules.RuleMatch;
import java.io.IOException;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LanguageToolTest {
private static JLanguageTool tool = new JLanguageTool(new GermanyGerman());
public static void prepareRule(){
Map <CategoryId, Category> akku = tool.getCategories();
for (var entry : akku.entrySet()){
if (!entry.getKey().toString().contains("EMPFOHLENE_RECHTSCHREIBUNG")
&& !entry.getKey().toString().contains("CASING")
&& !entry.getKey().toString().contains("TYPOS")
&& !entry.getKey().toString().contains("COMPOUNDING")
&& !entry.getKey().toString().contains("PUNCTUATION")
&& !entry.getKey().toString().contains("CONFUSED_WORDS")
&& !entry.getKey().toString().contains("SEMANTICS")){
tool.disableCategory(entry.getKey());
}
}
}
public static void main(String[] args) {
prepareRule();
Instant start = Instant.now();
Map<Integer, List<String>> test = new HashMap<>();
int index = 0;
try {
List<RuleMatch> matches = tool.check("Heilike makrele hier ist echter Tecst");
for (RuleMatch match : matches){
List<String> temp = new ArrayList<>();
index = match.getFromPos();
int end = match.getToPos();
String idk = "Heilike makrele hier ist echter Tecst".substring(index, end);
temp.add(idk);
temp.addAll(match.getSuggestedReplacements());
test.put(match.getFromPos(), temp);
}
Instant stop = Instant.now();
Duration timeElapsed = Duration.between(start, stop);
System.out.println(test.toString());
System.out.println("Hat " + timeElapsed.toMillis() + " Millisekunden gedauert.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
和输出:
{0=[Heilike, Heilige, Heiligen, Heidecke, Heilig, Heinicke, Heiliger, Heiliges, Heiligem, Beilage, Heiligt, Heike, Heiligte, Fällige, Herlocke, Heutige, Wellige, Heftige, Eilige, Häufige, Seidige], 32=[Tecst, Eckt, Deckt, Test, Täks, Deckst, Erst, Teast, Lässt, Des, Meist, Fest, Heißt, Jetzt, Setzt, Weist, Recht, Text, West, Wächst, Geist], 8=[makrele, Makrele, makele, mäkele, sakrale, magere, mangele, Makrelen, Nägele, Häcksel, Häckseln, angele, dackele, fackele, fächele, hagele, häckseln, häkele, lächele, magerere, magerte]}
Hat 12483 Millisekunden gedauert.
解释地图:我Key
存储发现的错误的起始索引以供进一步处理,List
值存储索引 0 处拼写错误的单词列表,并在以下指标上推荐替换。
在我的实际代码中,地图被返回并针对突出显示部分进行处理。
据我了解 JLanguageTool 的文档,它不是线程安全的,因此我不能对它进行多线程处理。
关于如何改进我的代码/优化某些调用以减少性能影响的任何建议?