我需要通过添加/删除单词来教地名词典。

我知道how to add new Lookup,但是当我尝试删除它时,并未删除Lookup。

gazetter.remove("string to be found"); // returns false


请帮忙!

最佳答案

(默认)地名词典中有两件事:


用于搜索源文本的有限状态机。
地名词典的线性定义,表示字典中所有单词的列表。它不直接用于搜索文本。


在启动时,它们的用法如下:


从输入文件中读取线性定义。
有限状态机是根据定义构造的。


直接在地名词典实例上调用的gazetter.add()gazetter.remove()之类的方法仅会修改有限状态机。更改将在地名词典的行为上可见,但在线性定义中不可见。

线性定义中的方法仅修改线性定义。您必须使用store()reInit()根据线性定义更新地名词典中的有限状态机。之后,它们将同步,并且地名词典将查找新短语。这也意味着重新初始化后,仅在状态机上所做的更改将丢失。

要回答您的问题:

如果您的代码返回了false,则该短语在有限状态机中不存在,并且地名词典无论如何都不会与文本中的该短语匹配。

如果要从线性定义中删除短语,则必须使用相应的方法(在我的previous answer中有简短描述)。

09-11 03:38