TIKA語言檢測

必要的語言檢測

對於基於它們寫在一個多語種網站的語言文件分類,語言檢測工具是必要的。這個工具應該接受無語言註釋(元數據)的文件,並通過檢測語言中添加這些信息在文檔的元數據。

算法性能分析語料庫

什麼是語料庫?

爲了檢測一個文檔的語言,語言信息被構造和用已知的語言的信息進行比較。設置這些已知的語言文字被稱爲語料庫。

語料庫是一種書面語言,解釋了語言用於實際生活中的文本的集合。

語料庫是從書本,成績單,而像其他的互聯網數據資源開發。語料庫的精度取決於我們使用幀性能分析算法。

什麼是性能分析算法?

檢測語言的常用方法是使用字典。在給定的一段文本中使用的詞語將與詞典進行匹配。

在語言中常用的單詞的列表將是最簡單有效的語料庫用於檢測特定的語言,例如, a, an,在英文中。

使用Word設置爲語料庫

使用字集,一個簡單的算法是框架找到兩個語料庫,其將等於的匹配單詞的頻率之間的差異的總和之間的距離。

此類算法有以下問題:

  • 因爲匹配單詞的頻率非常少,則該算法不能有效地與幾個句子小文本工作。它需要大量的文字進行準確匹配。

  • 它不能檢測到字邊界具有語言複合句,而那些具有類似空格或標點符號無字分隔。

由於在使用字集作爲語料庫這些困難,單個字符或字符組會被考慮。

使用字符集爲主體

因爲這是在一種語言中常用的字符是有限的數目,很容易應用基於單詞的頻率,而不是字符的算法。這種算法的工作更爲出色的情況下在一個或極少數語言中使用的特定的字符集。

此算法存在下列缺點:

  • 它是難以區分具有相似性質的頻率兩種語言。

  • 沒有任何特定的工具或算法來具體確定的幫助下(如文集)所使用的多語言字符集的語言。

N-gram算法

上述的缺點就產生了利用給定長度的字符序列爲分析語料的一種新方法。個字符的這樣的序列被稱爲N-gram,在一般情況下,N表示該字符序列的長度。

  • N元算法是一種有效的方法來檢測語言,特別是在案件歐洲語言如英語的。

  • 該算法與短文正常工作。

  • 雖然有高級語言紋算法來檢測多個語言中具有更吸引人的特徵的多語言文檔,Tika使用3-grams算法,因爲它適合於大多數實際情況。

Tika語言檢測

在所有由ISO639-1標準的184標準語言,Tika可檢測18種語言。語言檢測Tika是通過使用LanguageIdentifier類的getLanguage()方法。此方法返回字符串格式的語言代號。下面給出由Tika檢測出的18語言代碼對的列表中:

da—Danish

de—German

et—Estonian

el—Greek

en—English

es—Spanish

fi—Finnish

fr—French

hu—Hungarian

is—Icelandic

it—Italian

nl—Dutch

no—Norwegian

pl—Polish

pt—Portuguese

ru—Russian

sv—Swedish

th—Thai

實例化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

注意:假設sample.txt 有下列內容:

Hi students welcome to yiibai

它提供了以下的輸出:

Language name :en

隨着Tika jar,Tika提供了一個圖形用戶界面應用程序(GUI)和命令行界面(CLI)的應用程序。可以像其他Java應用程序在命令提示符下運行 Tika 的應用程序。