【问题标题】:How to remove a Lookup from DefaultGazetteer programatically如何以编程方式从默认地名词典中删除查找
【发布时间】:2015-08-16 03:16:57
【问题描述】:

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

我知道how to add new Lookup,但是当我尝试删除它时,查找并没有被删除。

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

请帮忙!

【问题讨论】:

    标签: java gate


    【解决方案1】:

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

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

    我认为第一个选项更适合地名录更新。

    【讨论】:

    • 谢谢。删除节点或重新初始化地名词典在线修改非常昂贵。临时解决方案:将排除的代码存储在地图中,编码后手动排除。
    • 如果地名词典很大,那么您可以创建一个机制,该机制将在主应用程序流程的同时初始化地名词典。然后在管道中替换它。许多选项可用于更新 GATE 资源。
    【解决方案2】:

    (默认)地名词典中有两个不同的东西:

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

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

    在启动时,它们的使用方式如下:

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

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

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

    回答您的问题:

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

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

    【讨论】:

      猜你喜欢
      • 2015-08-14
      • 2016-12-16
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多