TIKA - Phát hiện ngôn ngữ

Cần phát hiện ngôn ngữ

Để phân loại tài liệu dựa trên ngôn ngữ mà chúng được viết trên trang web đa ngôn ngữ, cần có công cụ phát hiện ngôn ngữ. Công cụ này phải chấp nhận các tài liệu không có chú thích ngôn ngữ (siêu dữ liệu) và thêm thông tin đó vào siêu dữ liệu của tài liệu bằng cách phát hiện ngôn ngữ.

Các thuật toán cho hồ sơ Corpus

Corpus là gì?

Để phát hiện ngôn ngữ của tài liệu, một cấu hình ngôn ngữ được xây dựng và so sánh với cấu hình của các ngôn ngữ đã biết. Tập hợp văn bản của những ngôn ngữ đã biết này được gọi làcorpus.

Ngữ liệu là một tập hợp các văn bản của một ngôn ngữ viết giải thích cách ngôn ngữ đó được sử dụng trong các tình huống thực tế.

Kho ngữ liệu được phát triển từ sách, bảng điểm và các nguồn dữ liệu khác như Internet. Độ chính xác của kho tài liệu phụ thuộc vào thuật toán lập hồ sơ mà chúng tôi sử dụng để tạo khung cho kho tài liệu.

Thuật toán lập hồ sơ là gì?

Cách phổ biến để phát hiện ngôn ngữ là sử dụng từ điển. Các từ được sử dụng trong một đoạn văn bản nhất định sẽ được khớp với những từ có trong từ điển.

Danh sách các từ thông dụng được sử dụng trong một ngôn ngữ sẽ là kho ngữ liệu đơn giản và hiệu quả nhất để phát hiện một ngôn ngữ cụ thể, ví dụ: các bài báo a, an, the bằng tiếng Anh.

Sử dụng Word Sets làm Corpus

Sử dụng tập hợp từ, một thuật toán đơn giản được đóng khung để tìm khoảng cách giữa hai kho ngữ liệu, sẽ bằng tổng chênh lệch giữa các tần số của các từ phù hợp.

Các thuật toán như vậy mắc phải các vấn đề sau:

  • Vì tần suất so khớp các từ là rất ít, thuật toán không thể hoạt động hiệu quả với các văn bản nhỏ có ít câu. Nó cần rất nhiều văn bản để khớp chính xác.

  • Nó không thể phát hiện ranh giới từ đối với các ngôn ngữ có câu ghép và những ngôn ngữ không có ngăn cách từ như dấu cách hoặc dấu chấm câu.

Do những khó khăn này trong việc sử dụng bộ từ làm ngữ liệu, các ký tự riêng lẻ hoặc nhóm ký tự được xem xét.

Sử dụng Bộ ký tự làm Corpus

Vì các ký tự thường được sử dụng trong một ngôn ngữ có số lượng hữu hạn, nên dễ dàng áp dụng một thuật toán dựa trên tần số từ chứ không phải ký tự. Thuật toán này thậm chí còn hoạt động tốt hơn trong trường hợp các bộ ký tự nhất định được sử dụng trong một hoặc rất ít ngôn ngữ.

Thuật toán này có những hạn chế sau:

  • Rất khó để phân biệt hai ngôn ngữ có tần số ký tự giống nhau.

  • Không có công cụ hoặc thuật toán cụ thể nào để xác định cụ thể một ngôn ngữ với sự trợ giúp của (dưới dạng ngữ liệu) bộ ký tự được sử dụng bởi nhiều ngôn ngữ.

Thuật toán N-gram

Những hạn chế nêu trên đã làm nảy sinh một cách tiếp cận mới trong việc sử dụng các chuỗi ký tự có độ dài nhất định cho kho ngữ liệu cấu hình. Nói chung, dãy ký tự như vậy được gọi là N-gram, trong đó N đại diện cho độ dài của dãy ký tự.

  • Thuật toán N-gram là một cách tiếp cận hiệu quả để phát hiện ngôn ngữ, đặc biệt trong trường hợp các ngôn ngữ châu Âu như tiếng Anh.

  • Thuật toán này hoạt động tốt với các văn bản ngắn.

  • Mặc dù có các thuật toán cấu hình ngôn ngữ nâng cao để phát hiện nhiều ngôn ngữ trong một tài liệu đa ngôn ngữ có nhiều tính năng hấp dẫn hơn, Tika sử dụng thuật toán 3 gam, vì nó phù hợp trong hầu hết các tình huống thực tế.

Phát hiện ngôn ngữ trong Tika

Trong số tất cả 184 ngôn ngữ tiêu chuẩn được tiêu chuẩn hóa bởi ISO 639-1, Tika có thể phát hiện 18 ngôn ngữ. Phát hiện ngôn ngữ trong Tika được thực hiện bằng cách sử dụnggetLanguage() phương pháp của LanguageIdentifierlớp học. Phương thức này trả về tên mã của ngôn ngữ ở định dạng Chuỗi. Dưới đây là danh sách 18 cặp mã ngôn ngữ được phát hiện bởi Tika -

da — tiếng Đan Mạch de — tiếng Đức et — tiếng Estonia el — tiếng Hy Lạp
vi — tiếng Anh es — tiếng Tây Ban Nha fi — tiếng Phần Lan fr — tiếng Pháp
hu — tiếng Hungary là — tiếng Iceland nó — tiếng Ý nl — tiếng Hà Lan
không — tiếng Na Uy pl — tiếng Ba Lan pt — tiếng Bồ Đào Nha ru — tiếng Nga
sv — tiếng Thụy Điển th — Thái

Trong khi khởi tạo LanguageIdentifier , bạn nên chuyển định dạng Chuỗi của nội dung được trích xuất, hoặc LanguageProfile đối tượng lớp.

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

Dưới đây là chương trình ví dụ để phát hiện ngôn ngữ trong 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);
   }
}

Lưu mã trên dưới dạng LanguageDetection.java và chạy nó từ dấu nhắc lệnh bằng các lệnh sau:

javac  LanguageDetection.java 
java  LanguageDetection

Nếu bạn thực hiện chương trình trên, nó sẽ đưa ra kết quả sau

Language of the given content is : en

Phát hiện ngôn ngữ của tài liệu

Để phát hiện ngôn ngữ của một tài liệu nhất định, bạn phải phân tích cú pháp nó bằng phương thức parse (). Phương thức parse () phân tích cú pháp nội dung và lưu trữ nội dung đó trong đối tượng trình xử lý, được chuyển cho nó như một trong các đối số. Truyền định dạng Chuỗi của đối tượng trình xử lý đến phương thức khởi tạo củaLanguageIdentifier lớp như hình dưới đây -

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

Dưới đây là chương trình hoàn chỉnh trình bày cách phát hiện ngôn ngữ của một tài liệu nhất định -

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());
   }
}

Lưu đoạn mã trên dưới dạng SetMetadata.java và chạy nó từ dấu nhắc lệnh -

javac  SetMetadata.java 
java  SetMetadata

Dưới đây là nội dung của Example.txt.

Hi students welcome to tutorialspoint

Nếu bạn thực hiện chương trình trên, nó sẽ cung cấp cho bạn kết quả sau:

Language name :en

Cùng với lọ Tika, Tika cung cấp ứng dụng Giao diện người dùng đồ họa (GUI) và ứng dụng Giao diện dòng lệnh (CLI). Bạn có thể thực thi một ứng dụng Tika từ dấu nhắc lệnh giống như các ứng dụng Java khác.