TIKA - การตรวจจับภาษา

ต้องการการตรวจจับภาษา

สำหรับการจัดประเภทเอกสารตามภาษาที่เขียนในเว็บไซต์หลายภาษาจำเป็นต้องใช้เครื่องมือตรวจจับภาษา เครื่องมือนี้ควรยอมรับเอกสารที่ไม่มีคำอธิบายประกอบภาษา (ข้อมูลเมตา) และเพิ่มข้อมูลนั้นในข้อมูลเมตาของเอกสารโดยการตรวจหาภาษา

อัลกอริทึมสำหรับ Profiling Corpus

Corpus คืออะไร?

ในการตรวจหาภาษาของเอกสารโปรไฟล์ภาษาจะถูกสร้างขึ้นและเปรียบเทียบกับโปรไฟล์ของภาษาที่รู้จัก ชุดข้อความของภาษาที่รู้จักเหล่านี้เรียกว่า acorpus.

คลังข้อมูลคือชุดของข้อความภาษาเขียนที่อธิบายถึงวิธีการใช้ภาษาในสถานการณ์จริง

คลังข้อมูลได้รับการพัฒนาจากหนังสือการถอดเสียงและแหล่งข้อมูลอื่น ๆ เช่นอินเทอร์เน็ต ความแม่นยำของคลังข้อมูลขึ้นอยู่กับอัลกอริทึมการทำโปรไฟล์ที่เราใช้ในการจัดกรอบคลังข้อมูล

อัลกอริทึมการทำโปรไฟล์คืออะไร?

วิธีทั่วไปในการตรวจจับภาษาคือการใช้พจนานุกรม คำที่ใช้ในข้อความที่กำหนดจะตรงกับคำที่อยู่ในพจนานุกรม

รายการคำทั่วไปที่ใช้ในภาษาหนึ่ง ๆ จะเป็นคลังข้อมูลที่เรียบง่ายและมีประสิทธิภาพที่สุดสำหรับการตรวจจับภาษาใดภาษาหนึ่งตัวอย่างเช่นบทความ a, an, the เป็นภาษาอังกฤษ.

การใช้ Word Sets เป็น Corpus

การใช้ชุดคำอัลกอริทึมง่ายๆจะถูกกำหนดกรอบเพื่อค้นหาระยะห่างระหว่างสององค์กรซึ่งจะเท่ากับผลรวมของความแตกต่างระหว่างความถี่ของคำที่ตรงกัน

อัลกอริทึมดังกล่าวประสบปัญหาต่อไปนี้ -

  • เนื่องจากความถี่ในการจับคู่คำน้อยมากอัลกอริทึมจึงไม่สามารถทำงานได้อย่างมีประสิทธิภาพกับข้อความขนาดเล็กที่มีประโยคไม่กี่ประโยค ต้องมีข้อความจำนวนมากเพื่อการจับคู่ที่ถูกต้อง

  • ไม่สามารถตรวจพบขอบเขตคำสำหรับภาษาที่มีประโยคประกอบและไม่มีตัวแบ่งคำเช่นช่องว่างหรือเครื่องหมายวรรคตอน

เนื่องจากปัญหาเหล่านี้ในการใช้ชุดคำเป็นคลังข้อมูลจึงมีการพิจารณาอักขระแต่ละตัวหรือกลุ่มอักขระ

ใช้ Character Sets เป็น Corpus

เนื่องจากอักขระที่ใช้กันทั่วไปในภาษานั้นมีจำนวน จำกัด จึงเป็นเรื่องง่ายที่จะใช้อัลกอริทึมโดยพิจารณาจากความถี่ของคำมากกว่าอักขระ อัลกอริทึมนี้ทำงานได้ดียิ่งขึ้นในกรณีที่ชุดอักขระบางชุดใช้ในภาษาเดียวหรือน้อยมาก

อัลกอริทึมนี้มีข้อบกพร่องดังต่อไปนี้ -

  • เป็นการยากที่จะแยกความแตกต่างของสองภาษาที่มีความถี่อักขระใกล้เคียงกัน

  • ไม่มีเครื่องมือหรืออัลกอริทึมเฉพาะเพื่อระบุภาษาโดยเฉพาะด้วยความช่วยเหลือของ (เป็นคลังข้อมูล) ชุดอักขระที่ใช้โดยหลายภาษา

อัลกอริทึม N-gram

ข้อเสียที่ระบุไว้ข้างต้นทำให้เกิดแนวทางใหม่ในการใช้ลำดับอักขระตามความยาวที่กำหนดสำหรับการจัดทำโปรไฟล์ ลำดับของอักขระดังกล่าวเรียกว่า N-gram โดยทั่วไปโดยที่ N หมายถึงความยาวของลำดับอักขระ

  • อัลกอริทึม N-gram เป็นแนวทางที่มีประสิทธิภาพสำหรับการตรวจจับภาษาโดยเฉพาะในกรณีของภาษายุโรปเช่นภาษาอังกฤษ

  • อัลกอริทึมนี้ทำงานได้ดีกับข้อความสั้น ๆ

  • แม้ว่าจะมีอัลกอริธึมการสร้างโปรไฟล์ภาษาขั้นสูงในการตรวจจับหลายภาษาในเอกสารหลายภาษาที่มีคุณสมบัติที่น่าสนใจมากขึ้น แต่ Tika ก็ใช้อัลกอริทึมขนาด 3 กรัมเนื่องจากเหมาะกับสถานการณ์จริง

การตรวจจับภาษาใน Tika

ในบรรดาภาษามาตรฐาน 184 ภาษาที่ได้มาตรฐาน ISO 639-1 Tika สามารถตรวจจับได้ 18 ภาษา การตรวจจับภาษาใน Tika ทำได้โดยใช้ไฟล์getLanguage() วิธีการของ LanguageIdentifierชั้นเรียน วิธีนี้ส่งคืนชื่อรหัสของภาษาในรูปแบบ String ด้านล่างนี้เป็นรายการคู่รหัสภาษา 18 คู่ที่ Tika ตรวจพบ -

ดา - เดนมาร์ก เดอ - เยอรมัน 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 () จะแยกวิเคราะห์เนื้อหาและจัดเก็บไว้ในอ็อบเจ็กต์ตัวจัดการซึ่งถูกส่งผ่านไปเป็นอาร์กิวเมนต์อย่างใดอย่างหนึ่ง ส่งผ่านรูปแบบสตริงของวัตถุตัวจัดการไปยังตัวสร้างของLanguageIdentifier class ดังรูปด้านล่าง -

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 ยังมีแอปพลิเคชัน Graphical User Interface (GUI) และแอปพลิเคชัน Command Line Interface (CLI) คุณสามารถเรียกใช้แอปพลิเคชัน Tika จากพรอมต์คำสั่งเช่นเดียวกับแอปพลิเคชัน Java อื่น ๆ