TIKA-언어 감지

언어 감지의 필요성

다국어 웹 사이트에서 작성된 언어에 따라 문서를 분류하려면 언어 감지 도구가 필요합니다. 이 도구는 언어 주석 (메타 데이터)이없는 문서를 허용하고 언어를 감지하여 문서의 메타 데이터에 해당 정보를 추가해야합니다.

코퍼스 프로파일 링을위한 알고리즘

코퍼스는 무엇입니까?

문서의 언어를 감지하기 위해 언어 프로필이 구성되고 알려진 언어의 프로필과 비교됩니다. 이러한 알려진 언어의 텍스트 세트를corpus.

말뭉치는 실제 상황에서 언어가 사용되는 방법을 설명하는 서면 언어 텍스트 모음입니다.

코퍼스는 책, 성적 증명서 및 인터넷과 같은 기타 데이터 리소스에서 개발됩니다. 말뭉치의 정확성은 말뭉치를 구성하는 데 사용하는 프로파일 링 알고리즘에 따라 다릅니다.

프로파일 링 알고리즘이란?

언어를 감지하는 일반적인 방법은 사전을 사용하는 것입니다. 주어진 텍스트에 사용 된 단어는 사전에있는 단어와 일치합니다.

특정 언어에 사용되는 일반적인 단어 목록은 기사와 같은 특정 언어를 감지하는 데 가장 간단하고 효과적인 말뭉치입니다. a, an, the 영어로.

단어 집합을 말뭉치로 사용

단어 집합을 사용하여 두 말뭉치 사이의 거리를 찾기 위해 간단한 알고리즘을 구성합니다. 이는 일치하는 단어의 빈도 차이의 합과 같습니다.

이러한 알고리즘에는 다음과 같은 문제가 있습니다.

  • 일치하는 단어의 빈도가 매우 적기 때문에 알고리즘은 문장이 적은 작은 텍스트에서는 효율적으로 작동하지 않습니다. 정확한 일치를 위해 많은 텍스트가 필요합니다.

  • 복합 문장이있는 언어와 공백이나 구두점과 같은 단어 구분선이없는 언어에 대해서는 단어 경계를 감지 할 수 없습니다.

단어 집합을 말뭉치로 사용하는 데있어 이러한 어려움으로 인해 개별 문자 또는 문자 그룹이 고려됩니다.

문자 집합을 코퍼스로 사용

언어에서 일반적으로 사용되는 문자는 한정되어 있기 때문에 문자가 아닌 단어 빈도를 기반으로 알고리즘을 적용하기 쉽습니다. 이 알고리즘은 하나 또는 매우 적은 언어에서 사용되는 특정 문자 집합의 경우 더 잘 작동합니다.

이 알고리즘은 다음과 같은 단점이 있습니다.

  • 비슷한 문자 빈도를 가진 두 언어를 구별하는 것은 어렵습니다.

  • 여러 언어에서 사용하는 문자 집합 (말뭉치)의 도움으로 언어를 구체적으로 식별하는 특정 도구 나 알고리즘은 없습니다.

N- 그램 알고리즘

위에서 언급 한 단점은 말뭉치를 프로파일 링하기 위해 주어진 길이의 문자 시퀀스를 사용하는 새로운 접근 방식을 야기했습니다. 이러한 문자 시퀀스를 일반적으로 N- 그램이라고하며 여기서 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-헝가리어 is-아이슬란드 어 it— 이탈리아어 nl-네덜란드어
no-노르웨이어 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 () 메서드는 내용을 구문 분석하고 인수 중 하나로 전달 된 핸들러 객체에 저장합니다. 핸들러 객체의 문자열 형식을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 jar와 함께 Tika는 그래픽 사용자 인터페이스 애플리케이션 (GUI) 및 명령 줄 인터페이스 (CLI) 애플리케이션을 제공합니다. 다른 Java 애플리케이션과 마찬가지로 명령 프롬프트에서 Tika 애플리케이션을 실행할 수 있습니다.