Мне нужно научить Gazetteer, добавляя/удаляя слова.
Я знаю как добавить новый поиск, но когда я пытался его удалить, Lookup не удалился.
gazetter.remove("string to be found"); // returns false
Любая помощь, пожалуйста!
Мне нужно научить Gazetteer, добавляя/удаляя слова.
Я знаю как добавить новый поиск, но когда я пытался его удалить, Lookup не удалился.
gazetter.remove("string to be found"); // returns false
Любая помощь, пожалуйста!
Внутри справочника (по умолчанию) есть две отдельные вещи:
Конечный автомат, используемый для поиска исходного текста.
Линейное определение географического справочника, в котором представлены все списки слов в словаре. Он не используется непосредственно для поиска текста.
При запуске они используются следующим образом:
Такие методы, как gazetter.add()
или gazetter.remove()
, вызываемые непосредственно в экземпляре географического справочника, изменяют только конечный автомат. Изменения будут видны в поведении географического справочника, но не в его линейном определении.
Методы из линейного определения изменяют только линейное определение. Вы должны использовать store()
и reInit()
для обновления конечного автомата внутри географического справочника в соответствии с линейным определением. После этого они будут синхронизированы, и справочник будет искать новые фразы. Это также означает, что изменения, сделанные только на машине состояний, будут потеряны после повторной инициализации.
Если ваш код вернул false
, то фраза не присутствовала в конечном автомате, и географический справочник все равно не нашел бы такую фразу в тексте.
Если вы хотите удалить фразу из линейного определения, вы должны использовать соответствующие методы (кратко описанные в моем предыдущем ответе).
Вероятно, вы могли бы использовать подход, описанный в ответе на ваш предыдущий вопрос Вопрос о географическом справочнике update, но с удалением узлов. Угадайте, что дополнительную информацию вы можете найти в javadoc.
Другой вариант (грубая сила и обновление с редкими ключевыми словами): а) удалить Gazetteer из вашего конвейера (и из области действия с помощью Factory.deleteResource) б) прочитать файл .lst как файл с простым текстом в строке в) удалить записи г) сохранить данные обратно в предыдущий файл e) повторно запустите географический справочник и добавьте новый PR в то же место в вашем конвейере.
Я думаю, что первый вариант больше подходит для обновления справочника.