Tika-language-detection

提供:Dev Guides
移動先:案内検索

TIKA-言語検出

言語検出の必要性

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

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

コーパスとは何ですか?

文書の言語を検出するために、言語プロファイルが作成され、既知の言語のプロファイルと比較されます。 これらの既知の言語のテキストセットは、「コーパス」として知られています。

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

コーパスは、書籍、トランスクリプト、およびインターネットなどの他のデータリソースから開発されます。 コーパスの精度は、コーパスのフレーム化に使用するプロファイリングアルゴリズムに依存します。

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

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

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

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

単語セットを使用して、単純なアルゴリズムがフレーム化され、2つのコーパス間の距離が検出されます。これは、一致する単語の頻度間の差の合計に等しくなります。

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

  • 一致する単語の頻度は非常に少ないため、アルゴリズムは、文が少ない小さなテキストでは効率的に機能しません。 正確に一致させるには、大量のテキストが必要です。
  • 複合文を含む言語、およびスペースや句読点などの単語区切り文字を持たない言語の単語境界を検出できません。

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

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

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

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

  • 同様の文字頻度を持つ2つの言語を区別することは困難です。
  • 複数の言語で使用される文字セットを(コーパスとして)使用して特定の言語を特定するための特定のツールやアルゴリズムはありません。

N-gramアルゴリズム

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

  • N-gramアルゴリズムは、特に英語のようなヨーロッパ言語の場合、言語検出のための効果的なアプローチです。
  • このアルゴリズムは、短いテキストでも問題なく機能します。
  • より魅力的な機能を備えた多言語ドキュメントの複数の言語を検出するための高度な言語プロファイリングアルゴリズムがありますが、Tikaはほとんどの実用的な状況に適しているため、3グラムアルゴリズムを使用します。

Tikaの言語検出

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

da—Danish de—German et—Estonian el—Greek
en—English es—Spanish fi—Finnish fr—French
hu—Hungarian is—Icelandic it—Italian nl—Dutch
no—Norwegian pl—Polish pt—Portuguese ru—Russian
sv—Swedish th—Thai
*LanguageIdentifier* クラスをインスタンス化する際、抽出するコンテンツのString形式、または *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 finddevguides

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

Language name :en

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