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

DocumentLanguageClassifier

使用此组件按语言对文档进行分类,并将语言信息添加到元数据中。

pipeline 中的最常见位置MetadataRouter 之前
强制运行变量"documents": 文档列表
输出变量"documents": 文档列表
API 参考Classifiers (分类器)
GitHub 链接https://github.com/deepset-ai/haystack/blob/main/haystack/components/classifiers/document_language_classifier.py

概述

DocumentLanguageClassifier 会对文档进行语言分类,并将检测到的语言添加到其元数据中。如果文档的文本与初始化时指定的任何语言都不匹配,则将其分类为“unmatched”。默认情况下,分类器会对英语(“en”)文档进行分类,其余的分类为“unmatched”。

在 init 方法中使用languages 变量(使用 ISO 代码)可以指定支持的语言集。

要根据语言将文档路由到管道的各个分支,请在MetadataRouter 组件之后立即使用DocumentLanguageClassifier.

要使用相同的逻辑对纯文本进行分类和路由,请使用TextLanguageRouter 组件。

用法

安装langdetect 包即可使用DocumentLanguageClassifier 组件。

pip install langdetect

单独使用

下面,我们使用DocumentLanguageClassifier 来分类英语和德语文档。

from haystack.components.classifiers import DocumentLanguageClassifier
from haystack import Document

documents = [
    Document(content="Mein Name ist Jean und ich wohne in Paris."),
    Document(content="Mein Name ist Mark und ich wohne in Berlin."),
    Document(content="Mein Name ist Giorgio und ich wohne in Rome."),
    Document(content="My name is Pierre and I live in Paris"),
    Document(content="My name is Paul and I live in Berlin."),
    Document(content="My name is Alessia and I live in Rome."),
]

document_classifier = DocumentLanguageClassifier(languages = ["en", "de"])
document_classifier.run(documents = documents)

在 pipeline 中

下面,我们使用在索引管道中使用 DocumentLanguageClassifier,将英语和德语文档索引到 InMemoryDocumentStore 的两个不同索引中,并为每种语言使用嵌入模型。InMemoryDocumentStore,使用每种语言的嵌入模型。

from haystack import Pipeline
from haystack import Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.classifiers import DocumentLanguageClassifier
from haystack.components.embedders import SentenceTransformersDocumentEmbedder
from haystack.components.writers import DocumentWriter
from haystack.components.routers import MetadataRouter

document_store_en = InMemoryDocumentStore()
document_store_de = InMemoryDocumentStore()

document_classifier = DocumentLanguageClassifier(languages = ["en", "de"])
metadata_router = MetadataRouter(rules={"en": {"language": {"$eq": "en"}}, "de": {"language": {"$eq": "de"}}})
english_embedder = SentenceTransformersDocumentEmbedder()
german_embedder = SentenceTransformersDocumentEmbedder(model="PM-AI/bi-encoder_msmarco_bert-base_german")
en_writer = DocumentWriter(document_store = document_store_en)
de_writer = DocumentWriter(document_store = document_store_de)

indexing_pipeline = Pipeline()
indexing_pipeline.add_component(instance=document_classifier, name="document_classifier")
indexing_pipeline.add_component(instance=metadata_router, name="metadata_router")
indexing_pipeline.add_component(instance=english_embedder, name="english_embedder")
indexing_pipeline.add_component(instance=german_embedder, name="german_embedder")
indexing_pipeline.add_component(instance=en_writer, name="en_writer")
indexing_pipeline.add_component(instance=de_writer, name="de_writer")

indexing_pipeline.connect("document_classifier.documents", "metadata_router.documents")
indexing_pipeline.connect("metadata_router.en", "english_embedder.documents")
indexing_pipeline.connect("metadata_router.de", "german_embedder.documents")
indexing_pipeline.connect("english_embedder", "en_writer")
indexing_pipeline.connect("german_embedder", "de_writer")

indexing_pipeline.run({"document_classifier": {"documents": [Document(content="This is an English sentence."), Document(content="Dies ist ein deutscher Satz.")]}})

相关链接

在我们的 API 参考中查看参数详情