TIKA-言語検出

言語検出の必要性

多言語サイトで書かれている言語に基づいてドキュメントを分類するには、言語検出ツールが必要です。このツールは、言語注釈(メタデータ)のないドキュメントを受け入れ、言語を検出することによってその情報をドキュメントのメタデータに追加する必要があります。

コーパスをプロファイリングするためのアルゴリズム

コーパスとは何ですか?

ドキュメントの言語を検出するために、言語プロファイルが作成され、既知の言語のプロファイルと比較されます。これらの既知の言語のテキストセットは、corpus

コーパスは、実際の状況で言語がどのように使用されるかを説明する、書かれた言語のテキストのコレクションです。

コーパスは、本、成績証明書、およびインターネットなどの他のデータリソースから開発されています。コーパスの精度は、コーパスのフレーム化に使用するプロファイリングアルゴリズムによって異なります。

プロファイリングアルゴリズムとは何ですか?

言語を検出する一般的な方法は、辞書を使用することです。特定のテキストで使用されている単語は、辞書にある単語と一致します。

言語で使用される一般的な単語のリストは、特定の言語、たとえば冠詞を検出するための最も単純で効果的なコーパスになります aanthe 英語で。

コーパスとしての単語セットの使用

単語セットを使用して、2つのコーパス間の距離を見つけるための単純なアルゴリズムが組み立てられます。これは、一致する単語の頻度間の差の合計に等しくなります。

このようなアルゴリズムには、次の問題があります。

  • 一致する単語の頻度が非常に少ないため、アルゴリズムは、文が少ない小さなテキストを効率的に処理できません。正確に一致させるには、多くのテキストが必要です。

  • 複合文のある言語や、スペースや句読点などの単語の区切りがない言語の単語境界は検出できません。

単語セットをコーパスとして使用することはこれらの困難さのため、個々の文字または文字グループが考慮されます。

コーパスとしての文字セットの使用

言語で一般的に使用される文字の数は有限であるため、文字ではなく単語の頻度に基づいたアルゴリズムを適用するのは簡単です。このアルゴリズムは、1つまたはごく少数の言語で使用される特定の文字セットの場合にさらにうまく機能します。

このアルゴリズムには、次の欠点があります。

  • 文字の頻度が似ている2つの言語を区別することは困難です。

  • 複数の言語で使用される文字セットを(コーパスとして)使用して言語を具体的に識別するための特定のツールやアルゴリズムはありません。

Nグラムアルゴリズム

上記の欠点は、コーパスのプロファイリングに特定の長さの文字シーケンスを使用する新しいアプローチを生み出しました。このような文字シーケンスは、一般にN-gramと呼ばれ、Nは文字シーケンスの長さを表します。

  • N-gramアルゴリズムは、特に英語などのヨーロッパ言語の場合、言語検出に効果的なアプローチです。

  • このアルゴリズムは、短いテキストで正常に機能します。

  • より魅力的な機能を備えた多言語ドキュメント内の複数の言語を検出するための高度な言語プロファイリングアルゴリズムがありますが、Tikaは、ほとんどの実際的な状況に適しているため、3グラムアルゴリズムを使用します。

Tikaでの言語検出

ISO 639-1によって標準化された184の標準言語すべての中で、Tikaは18の言語を検出できます。Tikaでの言語検出は、getLanguage() の方法 LanguageIdentifierクラス。このメソッドは、言語のコード名を文字列形式で返します。以下に示すのは、Tikaによって検出された18の言語コードペアのリストです。

da-デンマーク語 de-ドイツ語 et-エストニア語 el-ギリシャ語
en-英語 es-スペイン語 fi-フィンランド語 fr-フランス語
hu-ハンガリー語 は—アイスランド語 それ—イタリア語 nl-オランダ語
いいえ-ノルウェー語 pl-ポーランド語 pt-ポルトガル語 ru-ロシア語
sv-スウェーデン語 th-タイ語

インスタンス化中 LanguageIdentifier クラスの場合、抽出するコンテンツの文字列形式を渡すか、 LanguageProfile クラスオブジェクト。

LanguageIdentifier object = new LanguageIdentifier(“this is english”);

以下に、Tikaでの言語検出のサンプルプログラムを示します。

import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.language.LanguageIdentifier;

import org.xml.sax.SAXException;

public class LanguageDetection {

   public static void main(String args[])throws IOException, SAXException, TikaException {

      LanguageIdentifier identifier = new LanguageIdentifier("this is english ");
      String language = identifier.getLanguage();
      System.out.println("Language of the given content is : " + language);
   }
}

上記のコードを次のように保存します LanguageDetection.java 次のコマンドを使用して、コマンドプロンプトから実行します-

javac  LanguageDetection.java 
java  LanguageDetection

上記のプログラムを実行すると、次の出力が得られます。

Language of the given content is : en

ドキュメントの言語検出

特定のドキュメントの言語を検出するには、parse()メソッドを使用してドキュメントを解析する必要があります。parse()メソッドはコンテンツを解析し、引数の1つとして渡されたハンドラーオブジェクトに格納します。ハンドラオブジェクトの文字列形式をのコンストラクタに渡しますLanguageIdentifier 以下に示すクラス-

parser.parse(inputstream, handler, metadata, context);
LanguageIdentifier object = new LanguageIdentifier(handler.toString());

以下に示すのは、特定のドキュメントの言語を検出する方法を示す完全なプログラムです。

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandler;
import org.apache.tika.language.*;

import org.xml.sax.SAXException;

public class DocumentLanguageDetection {

   public static void main(final String[] args) throws IOException, SAXException, TikaException {

      //Instantiating a file object
      File file = new File("Example.txt");

      //Parser method parameters
      Parser parser = new AutoDetectParser();
      BodyContentHandler handler = new BodyContentHandler();
      Metadata metadata = new Metadata();
      FileInputStream content = new FileInputStream(file);

      //Parsing the given document
      parser.parse(content, handler, metadata, new ParseContext());

      LanguageIdentifier object = new LanguageIdentifier(handler.toString());
      System.out.println("Language name :" + object.getLanguage());
   }
}

上記のコードをSetMetadata.javaとして保存し、コマンドプロンプトから実行します-

javac  SetMetadata.java 
java  SetMetadata

以下にExample.txtの内容を示します。

Hi students welcome to tutorialspoint

上記のプログラムを実行すると、次の出力が得られます-

Language name :en

Tikaは、Tika jarに加えて、グラフィカルユーザーインターフェイスアプリケーション(GUI)とコマンドラインインターフェイス(CLI)アプリケーションを提供します。他のJavaアプリケーションと同様に、コマンドプロンプトからTikaアプリケーションを実行することもできます。