|
@@ -1,8 +1,8 @@
|
|
|
from typing import Any
|
|
|
|
|
|
from configs import dify_config
|
|
|
-from core.rag.datasource.keyword.jieba.jieba import Jieba
|
|
|
from core.rag.datasource.keyword.keyword_base import BaseKeyword
|
|
|
+from core.rag.datasource.keyword.keyword_type import KeyWordType
|
|
|
from core.rag.models.document import Document
|
|
|
from models.dataset import Dataset
|
|
|
|
|
@@ -13,16 +13,19 @@ class Keyword:
|
|
|
self._keyword_processor = self._init_keyword()
|
|
|
|
|
|
def _init_keyword(self) -> BaseKeyword:
|
|
|
- config = dify_config
|
|
|
- keyword_type = config.KEYWORD_STORE
|
|
|
-
|
|
|
- if not keyword_type:
|
|
|
- raise ValueError("Keyword store must be specified.")
|
|
|
-
|
|
|
- if keyword_type == "jieba":
|
|
|
- return Jieba(dataset=self._dataset)
|
|
|
- else:
|
|
|
- raise ValueError(f"Keyword store {keyword_type} is not supported.")
|
|
|
+ keyword_type = dify_config.KEYWORD_STORE
|
|
|
+ keyword_factory = self.get_keyword_factory(keyword_type)
|
|
|
+ return keyword_factory(self._dataset)
|
|
|
+
|
|
|
+ @staticmethod
|
|
|
+ def get_keyword_factory(keyword_type: str) -> type[BaseKeyword]:
|
|
|
+ match keyword_type:
|
|
|
+ case KeyWordType.JIEBA:
|
|
|
+ from core.rag.datasource.keyword.jieba.jieba import Jieba
|
|
|
+
|
|
|
+ return Jieba
|
|
|
+ case _:
|
|
|
+ raise ValueError(f"Keyword store {keyword_type} is not supported.")
|
|
|
|
|
|
def create(self, texts: list[Document], **kwargs):
|
|
|
self._keyword_processor.create(texts, **kwargs)
|