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 อื่น ๆ