コンテンツにスキップ

LanguageDetector

文書がどの言語で書かれていたかを名指しするポート。

英語版が原文です。

プロトコル:

  • LanguageDetector.detect(text: str) -> tuple[LanguageScore, ...]
  • LanguageDetectorProvider.language_detectors() -> tuple[LanguageDetector, ...]

LanguageDetector は、あるテキストがどの言語で書かれているかを述べるための境界です。エンコードごとに、読み取れたページ 1 枚につき一度、すべてのリーダーがページを生成した後、何かが埋め込まれる前に尋ねられます。そして渡されるのはバイト列ではなくテキストです — これが、これが SourceObserver ではない理由のすべてです。

回答は LanguageScore のタプルで、確信度の高い順に並び、それぞれが小文字の ISO 639-1 コードと [0, 1] の数値を運びます。空のタプルは「意見なし」を意味します。判定するには短すぎるテキスト、あるいはインストール済みだが未設定のエンジンです。不在は決してゼロではありません。較正された確信度を持たない機能が 0.0 ではなく何も報告しないのと同じです。

一つのディストリビューションが、サードパーティが使うのと同じエントリーポイントグループを通じて出荷されます。indx-language-lingualingualang エクストラの背後で包みます。素の pip install indx は何も検出せず、そのブロックは languages キーをまったく持ちません。何も観察せず、どの URI も解決しないのと同じ、包み隠しのない欠落です。

プリフライトはコンテンツをデコードしません。そして言語は文字についての事実です。language_hint はスライス 2 からスライス 13 までルーターのプライベートな PreflightContext に置かれ、一度も代入されませんでした。システムのその側では誰にも埋められなかったからです — オブザーバーはページ数を数え、テキストレイヤーの状態を報告しますが、一語も読みません。それを削除し、読み取りの後に尋ねることが、このフィールドを初めて答えられるものにします。

もう一つの候補は機能種別でしたが、構造上排除されます。CapabilityKind は閉じており、その上のラダーも閉じており、検出器は何もルーティングしません。これはまさに Chunker と同じ形です — 読み取りの後に適用され、ルーティング決定ではなく実行出力を変えるポートです。

入力は一つのテキストだけです。検出器のディストリビューションは indx-interfaces だけに依存し、ソースのバイト列も、メディアタイプも、計画も見ることはありません。してはならないのは、文字が支持する以上のことを主張することです — エグゼキューターはその回答をブロックに書き込み、そこでインデックスが絞り込みに使うものになります。

raise はソースではなく検出器についての判定なので、エグゼキューターはそれをログに残し、次の検出器に尋ねます。オブザーバーの raise とは異なります。注釈の対象であるテキストはすでに読み取られ、その対価が払われており、注釈のためにエンコードを失うのは割に合いません。

LanguageDetectorProviderChunkerProvider と同じように任意です。検出器は ID を名乗らず、記述子にも加わらず、機能スナップショットにまったく公表されません。インストールしても、計画が束縛されているものは何も動きません。

  • 推測するくらいなら何も返さない。短い文字列はどの統計的検出器でも自信たっぷりに、そして誤って採点されます。入力長の下限は検出器自身が定めるもので、indx-language-lingua は 20 文字に定めています。
  • ISO 639-1 を小文字で報告する。インデックスが保存するのはコードであり、エンジン独自の列挙名はそのエンジンの都合です。
  • 降順に並べる。[0] を読む呼び出し側が答えを読めるように。
  • モジュールスコープを安価に保つ。検出はスナップショット構築中にすべてのプロバイダーモジュールをインポートするため、エンジンのインポートは detect() の内側に、モデルの構築は最初の呼び出しの背後に置く。

一つの属性は意図的にプロトコルの外にあり、False をデフォルトとして読まれます。プロトコルに宣言されたメンバーは、isinstance と型チェッカーの両方が要求するメンバーになるからです。builtin = Trueindx-language-lingua が設定するもので、レジストリはインストール済みの検出器をそれより前に並べます — ページを取るのは最初の答えなので、indx が同梱するものは、それを上書きするためにデプロイがインストールしたものの後に尋ねられなければなりません。

DocumentExecutor.encode は、テキストを生成した各ページについて、意見を持つ最初の検出器に尋ね、その回答をページブロックの metadataLANGUAGES_METADATA_KEY として書き込み、文書自身の回答を文書ブロックに書き込みます。何も読めなかったページは、ゼロを寄与するのではなく何も寄与しません。

文書の回答はページの平均で、各スコアがどれだけのテキストに対して算出されたかで重み付けされます。単純平均では、六語しかない扉ページが一章分を上回ってしまいます。これは generic-ocr の自己申告確信度についてすでに重み付けが正した誤りと同じものです。

キーは予約されています。EncodeRequest.metadatalanguages をきっぱり拒否し、呼び出し側のラベルが検出器の回答に静かに置き換えられることを許しません。呼び出し側のメタデータと検出された側が文書ブロックの metadata を共有しているのは、まさにそのためです — 一つのスロット、一つの衝突規則、それを信頼境界で述べる。

これらのいずれについても POLICY_VERSION は動かず、機能スナップショット ID は前後でバイト単位まで同一です。検出器は出力への注釈であり、ルーティング決定ではありません。