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作为输入并返回一个list的str作为输出的函数,表示分割后的块。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"
从字典反序列化组件。
