【发布时间】:2015-08-16 03:16:57
【问题描述】:
我需要通过添加/删除单词来教地名词典。
我知道how to add new Lookup,但是当我尝试删除它时,查找并没有被删除。
gazetter.remove("string to be found"); // returns false
请帮忙!
【问题讨论】:
我需要通过添加/删除单词来教地名词典。
我知道how to add new Lookup,但是当我尝试删除它时,查找并没有被删除。
gazetter.remove("string to be found"); // returns false
请帮忙!
【问题讨论】:
您可能可以使用回答上一个问题Question about gazetteer update 中描述的方法,但要删除节点。猜猜您可以在 javadoc 中找到哪些附加信息。
另一种选择(蛮力和稀有关键字更新)是: a) 从您的管道中删除 Gazetteer(并使用 Factory.deleteResource 从范围中删除) b) 将 .lst 文件读取为每行带有纯文本的文件 c) 删除条目 d) 将数据保存回之前的文件 e) 重新初始化地名词典并将新 PR 添加到管道中的同一位置。
我认为第一个选项更适合地名录更新。
【讨论】:
(默认)地名词典中有两个不同的东西:
有限状态机用于搜索源文本。
地名词典的线性定义,表示词典中的所有单词列表。它不直接用于搜索文本。
在启动时,它们的使用方式如下:
在地名词典实例上直接调用的gazetter.add() 或gazetter.remove() 等方法仅修改有限状态机。更改将在地名词典的行为中可见,但在其线性定义中不可见。
线性定义的方法只修改线性定义。您必须使用store() 和reInit() 根据线性定义更新地名词典内的有限状态机。之后,它们将同步,并且地名词典将寻找新的短语。这也意味着仅在状态机上所做的更改将在重新初始化后丢失。
如果您的代码返回false,那么有限状态机中不存在该短语,并且地名词典无论如何都不会匹配文本中的此类短语。
如果您想从线性定义中删除该短语,您必须使用相应的方法(在我的previous answer 中有简短描述)。
【讨论】: