如何以编程方式从DefaultGazetteer中删除Lookup

时间:2015-06-02 11:02:47

标签: java gate

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

我知道how to add new Lookup但是当我尝试删除它时,查找功能未被删除。

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

请帮忙!

2 个答案:

答案 0 :(得分:1)

(默认)地名录中有两个独立的内容:

  1. 有限状态机用于搜索源文本。

  2. 地理定义的线性定义,代表字典中所有单词列表。它不直接用于搜索文本。

  3. 在启动时,它们按如下方式使用:

    1. 从输入文件中读取线性定义。
    2. 有限状态机是根据定义构建的。
    3. 直接在地名词典实例上调用的gazetter.add()gazetter.remove()等方法仅修改有限状态机。这些变化将在地名词典的行为中显示,但不会出现在线性定义中。

      线性定义中的方法仅修改线性定义。您必须使用store()reInit()根据线性定义更新地名词典中的有限状态机。之后,他们将同步,地名录将寻找新的短语。这也意味着重新启动后,仅在状态机上进行的更改将会丢失。

      回答你的问题:

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

      如果你想从线性定义中删除短语,你必须使用各自的方法(我的previous answer中很快就会有描述)。

答案 1 :(得分:0)

您可能可以使用回答上一个问题Question about gazetteer update中描述的方法,但删除节点。猜猜您可以在javadoc中找到其他信息。

另一种选择(蛮力和稀有关键字更新)是: a)从您的管道中删除Gazetteer(并使用Factory.deleteResource从范围中删除) b)将.lst文件作为文件读取,每行显示纯文本 c)删除条目 d)将数据保存回以前的文件 e)重新启动地名词典并将新PR添加到您管道中的同一位置。

我认为第一种选择更适合于地名词典更新。