使用ac自动机匹配关键词
| 26 | |
| 27 | |
| 28 | class EntitySearcher(ModelBase): |
| 29 | """ |
| 30 | 使用ac自动机匹配关键词 |
| 31 | """ |
| 32 | _name = "graph_entity_searcher" |
| 33 | _model_path_base = os.path.join(get_app_root(), f"data/model/{_name}") |
| 34 | _logger: Logger = Logger(_name) |
| 35 | _search_key = Config.get_instance().get_with_nested_params("model", "graph-entity", "search-key") |
| 36 | |
| 37 | def __init__(self, *args, **kwargs): |
| 38 | super().__init__(name=self._name) |
| 39 | self._model = None |
| 40 | self._model_info = {} |
| 41 | self._dao = GraphDao() |
| 42 | self._node_entities = NodeEntities() |
| 43 | |
| 44 | def build(self, *args, **kwargs): |
| 45 | self._logger.info("building entity searcher") |
| 46 | self._model_status = ModelStatus.BUILDING |
| 47 | |
| 48 | try: |
| 49 | self._build_model() |
| 50 | except Exception as e: |
| 51 | self._logger.error(f"failed to build entity searcher: {e}") |
| 52 | self._model_status = ModelStatus.FAILED |
| 53 | return |
| 54 | |
| 55 | self._model_status = ModelStatus.READY |
| 56 | self._model_info.update(kwargs) |
| 57 | self._logger.logger.opt(colors=True).info("successfully <blue>built</blue> entity searcher") |
| 58 | |
| 59 | self.dump() |
| 60 | |
| 61 | def dump(self, **kwargs): |
| 62 | self._logger.info("dumping entity searcher") |
| 63 | |
| 64 | self._remove_obsolete_versions() |
| 65 | |
| 66 | self._dump_model() |
| 67 | self._dump_model_info(**kwargs) |
| 68 | |
| 69 | self._logger.logger.opt(colors=True).info("successfully <blue>dumped</blue> entity searcher") |
| 70 | |
| 71 | def reload(self, version: Optional[int] = None): |
| 72 | if not version: |
| 73 | version = self._version = get_version() |
| 74 | |
| 75 | self._logger.logger.opt(colors=True).info(f"<red>loading</red> entity searcher [version:{version}]") |
| 76 | |
| 77 | self._load_model_info(version) |
| 78 | if self._model_status == ModelStatus.READY: |
| 79 | |
| 80 | self._load_model(version) |
| 81 | self._logger.info(f"successfully <blue>loaded</blue> entity searcher [version:{version}]") |
| 82 | |
| 83 | else: |
| 84 | version = self.get_history_versions().pop() |
| 85 | if version: |
no test coverage detected