文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
API 参考

HanLP

Haystack 的 HanLP 集成

模块 haystack_integrations.components.preprocessors.hanlp.chinese_document_splitter

ChineseDocumentSplitter

一个用于中文文本的 DocumentSplitter。

'coarse' 代表粗粒度中文分词,'fine' 代表细粒度分词,默认为粗粒度分词。

与英语单词通常由空格分隔不同,中文文本是连续书写的,单词之间没有空格。中文词可以由多个字符组成。例如,英文单词“America”翻译成中文是“美国”,它由两个字符组成,但被视为一个单词。类似地,“Portugal”在中文中是“葡萄牙”,三个字符但一个词。因此,按词分割意味着按这些多字符标记分割,而不是简单地按单个字符或空格分割。

使用示例

doc = Document(content=
    "这是第一句话,这是第二句话,这是第三句话。"
    "这是第四句话,这是第五句话,这是第六句话!"
    "这是第七句话,这是第八句话,这是第九句话?"
)

splitter = ChineseDocumentSplitter(
    split_by="word", split_length=10, split_overlap=3, respect_sentence_boundary=True
)
splitter.warm_up()
result = splitter.run(documents=[doc])
print(result["documents"])

ChineseDocumentSplitter.__init__

def __init__(split_by: Literal["word", "sentence", "passage", "page", "line",
                               "period", "function"] = "word",
             split_length: int = 1000,
             split_overlap: int = 200,
             split_threshold: int = 0,
             respect_sentence_boundary: bool = False,
             splitting_function: Optional[Callable] = None,
             granularity: Literal["coarse", "fine"] = "coarse")

初始化 ChineseDocumentSplitter 组件。

参数:

  • split_by: 用于分割文档的单位。可以选择:
  • word 按空格(" ")分割
  • period 按句号(".")分割
  • page 按换页符("\f")分割
  • passage 按双换行符("\n\n")分割
  • line 按行分割("\n")
  • sentence 使用 HanLP 句子分词器进行分割
  • split_length: 每个分割的最大单位数。
  • split_overlap: 每个分割的重叠单位数。
  • split_threshold: 每个分割的最小单位数。如果一个分割的单位数少于阈值,则将其附加到前一个分割。
  • respect_sentence_boundary: 在按“word”分割时,选择是否尊重句子边界。如果为 True,则使用 HanLP 检测句子边界,确保分割仅发生在句子之间。
  • splitting_function: 当split_by 设置为“function”时是必需的。这是一个必须接受单个str 作为输入并返回一个liststr 作为输出的函数,表示分割后的块。
  • granularity: 中文分词的粒度,可以是 'coarse' 或 'fine'。

引发:

  • ValueError: 如果粒度不是 'coarse' 或 'fine'。

ChineseDocumentSplitter.run

@component.output_types(documents=list[Document])
def run(documents: List[Document]) -> Dict[str, List[Document]]

将文档分割成更小的块。

参数:

  • documents: 要分割的文档。

引发:

  • RuntimeError: 如果中文分词模型未加载。

返回值:

包含分割后文档的字典。

ChineseDocumentSplitter.warm_up

def warm_up() -> None

通过加载必要的模型来预热组件。

ChineseDocumentSplitter.chinese_sentence_split

def chinese_sentence_split(text: str) -> List[Dict[str, Any]]

将中文文本分割成句子。

参数:

  • text: 要分割的文本。

返回值:

分割后的句子列表。

ChineseDocumentSplitter.to_dict

def to_dict() -> Dict[str, Any]

将组件序列化为字典。

ChineseDocumentSplitter.from_dict

@classmethod
def from_dict(cls, data: Dict[str, Any]) -> "ChineseDocumentSplitter"

从字典反序列化组件。