TIKA - Dil Tespiti
Dil Algılama İhtiyacı
Belgelerin çok dilli bir web sitesinde yazıldıkları dile göre sınıflandırılması için bir dil algılama aracına ihtiyaç vardır. Bu araç, dil ek açıklaması (meta veriler) içermeyen belgeleri kabul etmeli ve dili algılayarak bu bilgileri belgenin meta verilerine eklemelidir.
Corpus Profilleme Algoritmaları
Corpus nedir?
Bir belgenin dilini tespit etmek için bir dil profili oluşturulur ve bilinen dillerin profiliyle karşılaştırılır. Bu bilinen dillerin metin kümesi, bircorpus.
Bir külliyat, dilin gerçek durumlarda nasıl kullanıldığını açıklayan bir yazılı dilin metinlerinin bir koleksiyonudur.
Derleme kitaplardan, transkriptlerden ve İnternet gibi diğer veri kaynaklarından geliştirilmiştir. Derlemenin doğruluğu, derlemeyi çerçevelemek için kullandığımız profil oluşturma algoritmasına bağlıdır.
Profil Oluşturma Algoritmaları nedir?
Dilleri tespit etmenin yaygın yolu sözlük kullanmaktır. Belirli bir metin parçasında kullanılan sözcükler sözlüklerde bulunan sözcüklerle eşleştirilecektir.
Bir dilde yaygın olarak kullanılan kelimelerin listesi, belirli bir dili, örneğin makaleleri tespit etmek için en basit ve etkili külliyat olacaktır a, an, the İngilizcede.
Kelime Kümelerini Derlem olarak Kullanma
Sözcük kümeleri kullanılarak, iki cisim arasındaki mesafeyi bulmak için basit bir algoritma oluşturulur ve bu, eşleşen kelimelerin frekansları arasındaki farkların toplamına eşit olacaktır.
Bu tür algoritmalar aşağıdaki sorunlardan muzdariptir -
Eşleşen kelimelerin sıklığı çok daha az olduğu için, algoritma az cümle içeren küçük metinlerle verimli bir şekilde çalışamaz. Doğru eşleşme için çok fazla metne ihtiyaç vardır.
Bileşik cümleleri olan diller ve boşluklar veya noktalama işaretleri gibi kelime bölücüler içermeyen diller için kelime sınırlarını tespit edemez.
Sözcük kümelerini külliyat olarak kullanmadaki bu zorluklar nedeniyle, tek tek karakterler veya karakter grupları dikkate alınır.
Karakter Kümelerini Derlem Olarak Kullanma
Bir dilde yaygın olarak kullanılan karakterler sayı olarak sonlu olduğundan, karakterlerden ziyade kelime frekanslarına dayalı bir algoritma uygulamak kolaydır. Bu algoritma, bir veya birkaç dilde belirli karakter kümelerinin kullanılması durumunda daha da iyi çalışır.
Bu algoritma aşağıdaki dezavantajlardan muzdariptir -
Benzer karakter frekanslarına sahip iki dili ayırt etmek zordur.
Bir dili, birden çok dil tarafından kullanılan karakter kümesinin yardımıyla (külliyat olarak) özel olarak tanımlamak için belirli bir araç veya algoritma yoktur.
N-gram Algoritması
Yukarıda belirtilen dezavantajlar, belirli bir uzunluktaki karakter dizilerini korpusu profillemek için kullanma konusunda yeni bir yaklaşıma yol açtı. Bu tür karakter dizileri genel olarak N-gram olarak adlandırılır; burada N, karakter dizisinin uzunluğunu temsil eder.
N-gram algoritması, özellikle İngilizce gibi Avrupa dilleri söz konusu olduğunda, dil algılama için etkili bir yaklaşımdır.
Bu algoritma kısa metinlerle iyi çalışıyor.
Daha çekici özelliklere sahip çok dilli bir belgede birden çok dili algılamak için gelişmiş dil profili oluşturma algoritmaları olsa da, Tika çoğu pratik durumda uygun olduğu için 3 gramlık algoritmayı kullanır.
Tika'da Dil Algılama
ISO 639-1 tarafından standartlaştırılan 184 standart dil arasında Tika, 18 dili algılayabilir. Tika'da dil tespiti,getLanguage() yöntemi LanguageIdentifiersınıf. Bu yöntem, dilin kod adını String biçiminde döndürür. Aşağıda, Tika tarafından tespit edilen 18 dil kodu çiftinin listesi verilmiştir -
da — Danca | de — Almanca | et — Estonca | el — Yunanca |
en — İngilizce | es - İspanyolca | fi - Fince | fr - Fransızca |
hu — Macar | İzlandaca | o - İtalyanca | nl — Hollandaca |
hayır - Norveççe | pl — Lehçe | pt — Portekizce | ru — Rusça |
sv — İsveççe | th - Tayca |
Örneklenirken LanguageIdentifier sınıf, ayıklanacak içeriğin String formatını veya bir LanguageProfile sınıf nesnesi.
LanguageIdentifier object = new LanguageIdentifier(“this is english”);
Aşağıda, Tika'da Dil algılama için örnek program verilmiştir.
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);
}
}
Yukarıdaki kodu farklı kaydedin LanguageDetection.java ve aşağıdaki komutları kullanarak komut isteminden çalıştırın -
javac LanguageDetection.java
java LanguageDetection
Yukarıdaki programı çalıştırırsanız aşağıdaki çıktıyı verir gives
Language of the given content is : en
Bir Belgenin Dil Tespiti
Belirli bir belgenin dilini algılamak için, parse () yöntemini kullanarak ayrıştırmanız gerekir. Parse () yöntemi, içeriği ayrıştırır ve bağımsız değişkenlerden biri olarak kendisine iletilen işleyici nesnesinde depolar. İşleyici nesnesinin String formatını,LanguageIdentifier aşağıda gösterildiği gibi sınıf -
parser.parse(inputstream, handler, metadata, context);
LanguageIdentifier object = new LanguageIdentifier(handler.toString());
Aşağıda verilen bir belgenin dilinin nasıl tespit edileceğini gösteren eksiksiz bir program verilmiştir -
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());
}
}
Yukarıdaki kodu SetMetadata.java olarak kaydedin ve komut isteminden çalıştırın -
javac SetMetadata.java
java SetMetadata
Aşağıda, Example.txt'nin içeriği verilmiştir.
Hi students welcome to tutorialspoint
Yukarıdaki programı çalıştırırsanız, size şu çıktıyı verecektir -
Language name :en
Tika jar ile birlikte Tika, bir Grafik Kullanıcı Arayüzü uygulaması (GUI) ve bir Komut Satırı Arayüzü (CLI) uygulaması sağlar. Bir Tika uygulamasını da diğer Java uygulamaları gibi komut isteminden çalıştırabilirsiniz.