對于基于它們寫在一個多語種網(wǎng)站的語言文件分類,語言檢測工具是必要的。這個工具應(yīng)該接受無語言注釋(元數(shù)據(jù))的文件,并通過檢測語言中添加這些信息在文檔的元數(shù)據(jù)。
為了檢測一個文檔的語言,語言信息被構(gòu)造和用已知的語言的信息進行比較。設(shè)置這些已知的語言文字被稱為語料庫。
語料庫是一種書面語言,解釋了語言用于實際生活中的文本的集合。
語料庫是從書本,成績單,而像其他的互聯(lián)網(wǎng)數(shù)據(jù)資源開發(fā)。語料庫的精度取決于我們使用幀性能分析算法。
檢測語言的常用方法是使用字典。在給定的一段文本中使用的詞語將與詞典進行匹配。
在語言中常用的單詞的列表將是最簡單有效的語料庫用于檢測特定的語言,例如, a, an,在英文中。
使用字集,一個簡單的算法是框架找到兩個語料庫,其將等于的匹配單詞的頻率之間的差異的總和之間的距離。
此類算法有以下問題:
因為匹配單詞的頻率非常少,則該算法不能有效地與幾個句子小文本工作。它需要大量的文字進行準(zhǔn)確匹配。
它不能檢測到字邊界具有語言復(fù)合句,而那些具有類似空格或標(biāo)點符號無字分隔。
由于在使用字集作為語料庫這些困難,單個字符或字符組會被考慮。
因為這是在一種語言中常用的字符是有限的數(shù)目,很容易應(yīng)用基于單詞的頻率,而不是字符的算法。這種算法的工作更為出色的情況下在一個或極少數(shù)語言中使用的特定的字符集。
此算法存在下列缺點:
它是難以區(qū)分具有相似性質(zhì)的頻率兩種語言。
沒有任何特定的工具或算法來具體確定的幫助下(如文集)所使用的多語言字符集的語言。
上述的缺點就產(chǎn)生了利用給定長度的字符序列為分析語料的一種新方法。個字符的這樣的序列被稱為N-gram,在一般情況下,N表示該字符序列的長度。
N元算法是一種有效的方法來檢測語言,特別是在案件歐洲語言如英語的。
該算法與短文正常工作。
雖然有高級語言紋算法來檢測多個語言中具有更吸引人的特征的多語言文檔,Tika使用3-grams算法,因為它適合于大多數(shù)實際情況。
在所有由ISO639-1標(biāo)準(zhǔn)的184標(biāo)準(zhǔn)語言,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類,則應(yīng)該將內(nèi)容傳遞的字符串格式將被提取,或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()方法解析處理程序?qū)ο螅@是傳遞給它的參數(shù)的內(nèi)容,并將其存儲。通過LanguageIdentifier類對象處理,構(gòu)造函數(shù)的字符串的格式如下圖所示:
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上一篇:TIKA提取MP3文件下一篇:TIKA元數(shù)據(jù)提取