📘 **TELUS Agriculture & Consumer Goods** 如何通过 **Haystack Agents** 转变促销交易
由 deepset 维护

集成:HanLP

使用HanLP进行中文文本处理和Haystack

作者
MaChi
deepset

目录

概述

您可以在 Haystack 管道中使用 HanLP (Han Language Processing),或将其作为独立的组件用于 **中文文本处理**。HanLP 是一个全面的中文自然语言处理库,提供高级分词、句子分割和其他语言分析功能。

该集成提供了一个专用的 ChineseDocumentSplitter 组件,该组件能够理解中文文本的独特之处,例如词语之间缺乏空格以及中文词语的多字符性质。

安装

pip install hanlp-haystack

使用

基本配置

以下是使用 ChineseDocumentSplitter 的简单示例

from haystack import Document, Pipeline
from haystack.components.writers import DocumentWriter
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.preprocessors.hanlp import ChineseDocumentSplitter

# Create a document with Chinese text
doc = Document(content=
    "这是第一句话,这是第二句话,这是第三句话。"
    "这是第四句话,这是第五句话,这是第六句话!"
    "这是第七句话,这是第八句话,这是第九句话?"
)

# Initialize the splitter
splitter = ChineseDocumentSplitter(
    split_by="word",
    split_length=10,
    split_overlap=3,
    respect_sentence_boundary=True
)

# Warm up the component (loads the necessary models)
splitter.warm_up()

result = splitter.run(documents=[doc])
print(result["documents"])

高级配置

ChineseDocumentSplitter 支持多种配置选项

from haystack_integrations.components.preprocessors.hanlp import ChineseDocumentSplitter

splitter = ChineseDocumentSplitter(
    split_by="sentence",
    split_length=1000,
    split_overlap=200,
    split_threshold=0,
    respect_sentence_boundary=True,
    granularity="coarse"
)

可用的 split_by 选项

  • word: 按中文词语分割 (默认)
  • sentence: 使用 HanLP 句子分词器按句子分割
  • passage: 按双换行符 (\n\n) 分割
  • page: 按换页符 (\f) 分割
  • line: 按换行符 (\n) 分割
  • period: 按句号 (.) 分割
  • function: 使用自定义分割函数

粒度选项

  • coarse: 粗粒度中文分词 (默认)
  • fine: 细粒度中文分词

句子边界尊重

按词语分割时,可以确保分割尊重句子边界

from haystack import Document
from haystack_integrations.components.preprocessors.hanlp import ChineseDocumentSplitter

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])

自定义分割函数

您还可以使用自定义分割函数进行专门的文本处理

from haystack import Document
from haystack_integrations.components.preprocessors.hanlp import ChineseDocumentSplitter

def custom_chinese_split(text: str) -> list[str]:
    return text.split("。")

doc = Document(content="这是第一句话。这是第二句话。这是第三句话。")

splitter = ChineseDocumentSplitter(
    split_by="function",
    splitting_function=custom_chinese_split
)
splitter.warm_up()
result = splitter.run(documents=[doc])

与 Haystack 管道集成

ChineseDocumentSplitter 可以无缝集成到 Haystack 管道中

from haystack import Pipeline
from haystack.components.writers import DocumentWriter
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.preprocessors.hanlp import ChineseDocumentSplitter

document_store = InMemoryDocumentStore()

indexing_pipeline = Pipeline()
indexing_pipeline.add_component("splitter", ChineseDocumentSplitter(
    split_by="word",
    split_length=1000,
    split_overlap=200,
    respect_sentence_boundary=True
))
indexing_pipeline.add_component("writer", DocumentWriter(document_store=document_store))
indexing_pipeline.connect("splitter", "writer")

chinese_documents = [
    Document(content="这是第一个文档的内容。"),
    Document(content="这是第二个文档的内容。"),
]

indexing_pipeline.run({"splitter": {"documents": chinese_documents}})

许可证

hanlp-haystackApache-2.0 许可的条款下分发。