由 deepset 维护
集成:HanLP
使用HanLP进行中文文本处理和Haystack
目录
概述
您可以在 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-haystack 在 Apache-2.0 许可的条款下分发。
