Tika 简明教程
TIKA - Language Detection
Need for Language Detection
对于根据多语言网站中书写语言对文档进行分类,需要使用语言检测工具。此工具应接受没有语言注释(元数据)的文档,并通过检测语言将该信息添加到文档的元数据中。
Algorithms for Profiling Corpus
What is Corpus?
要检测文档的语言,需要构建语言配置文件,并将其与已知语言的配置文件进行比较。这些已知语言的文本集称为 corpus 。
语料库是一组书面语言的文本集合,用于说明在实际情况下如何使用该语言。
语料库是从书籍、成绩单以及互联网等其他数据资源开发的。语料库的准确性取决于我们用来构建语料库的分析算法。
What are Profiling Algorithms?
检测语言的常用方法是使用词典。文中给定的一段文字中使用的单词将与词典中的单词进行匹配。
特定语言中使用的常用单词列表将成为用于检测特定语言的最简单且最有效的语料库,例如,英语中的冠词 a 、 an 、 the 。
Using Word Sets as Corpus
使用单词集,一个简单的算法把两个语料库之间的距离表达为匹配单词的频率之间的差值的求和。
此类算法有以下问题:
-
由于匹配单词的频率非常低,该算法无法有效处理只有几个句子的短文。它需要大量文本才能进行精确匹配。
-
它无法检测具有复合句的语言的单词边界,以及没有空格或标点符号等单词分隔符的语言的单词边界。
由于在使用单词集作为语料库中存在这些困难,因此考虑单个字符或字符组。
Language Detection in Tika
在 ISO 639-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 |
在实例化 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
Language Detection of a Document
要检测给定文档的语言,你必须使用 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
下面给出 Example.txt 的内容。
Hi students welcome to tutorialspoint
如果您执行上述程序,它将为您提供以下输出 -
Language name :en
除了 Tika Jar,Tika 还提供了图形用户界面应用程序 (GUI) 和命令行界面 (CLI) 应用程序。你也可以像其他 Java 应用程序一样从命令提示符执行 Tika 应用程序。