TIKA - Определение языка
Необходимость определения языка
Для классификации документов на многоязычном веб-сайте по языку, на котором они написаны, необходим инструмент определения языка. Этот инструмент должен принимать документы без языковой аннотации (метаданных) и добавлять эту информацию в метаданные документа, определяя язык.
Алгоритмы профилирования корпуса
Что такое Корпус?
Чтобы определить язык документа, создается языковой профиль, который сравнивается с профилем известных языков. Текстовый набор этих известных языков известен какcorpus.
Корпус - это набор текстов на письменном языке, который объясняет, как этот язык используется в реальных ситуациях.
Корпус разработан на основе книг, стенограмм и других источников данных, таких как Интернет. Точность корпуса зависит от алгоритма профилирования, который мы используем для формирования корпуса.
Что такое алгоритмы профилирования?
Распространенный способ определения языков - использование словарей. Слова, использованные в данном фрагменте текста, будут сопоставлены со словами в словарях.
Список общих слов, используемых в языке, будет самым простым и эффективным корпусом для обнаружения определенного языка, например, статей a, an, the по-английски.
Использование наборов слов как корпуса
Используя наборы слов, создается простой алгоритм, чтобы найти расстояние между двумя корпусами, которое будет равно сумме разностей между частотами совпадения слов.
Такие алгоритмы страдают от следующих проблем -
Поскольку частота совпадений слов очень мала, алгоритм не может эффективно работать с небольшими текстами, состоящими из нескольких предложений. Для точного совпадения требуется много текста.
Он не может определять границы слов для языков, в которых есть составные предложения, и языков, не имеющих разделителей слов, таких как пробелы или знаки препинания.
Из-за этих трудностей при использовании наборов слов в качестве корпуса рассматриваются отдельные символы или группы символов.
Использование наборов символов в качестве корпуса
Поскольку количество символов, которые обычно используются в языке, конечно, легко применить алгоритм, основанный на частотах слов, а не на символах. Этот алгоритм работает даже лучше в случае использования определенных наборов символов на одном или нескольких языках.
Этот алгоритм страдает следующими недостатками:
Трудно различить два языка с одинаковой частотой символов.
Не существует специального инструмента или алгоритма для конкретной идентификации языка с помощью (в виде корпуса) набора символов, используемого несколькими языками.
N-граммовый алгоритм
Указанные выше недостатки привели к новому подходу к использованию символьных последовательностей заданной длины для профилирования корпуса. Такая последовательность символов обычно называется N-граммами, где N представляет собой длину последовательности символов.
Алгоритм N-грамм - эффективный подход для определения языка, особенно в случае европейских языков, таких как английский.
Этот алгоритм отлично работает с короткими текстами.
Хотя существуют расширенные алгоритмы профилирования языков для обнаружения нескольких языков в многоязычном документе с более привлекательными функциями, Tika использует алгоритм 3-граммов, так как он подходит в большинстве практических ситуаций.
Определение языка в Tika
Среди всех 184 стандартных языков, стандартизированных ISO 639-1, Tika может определять 18 языков. Определение языка в Tika осуществляется с помощьюgetLanguage() метод LanguageIdentifierкласс. Этот метод возвращает кодовое имя языка в строковом формате. Ниже приведен список из 18 пар язык-код, обнаруженных Tika:
da - датский | де - немецкий | et - эстонский | эл - греческий |
en — английский | es - испанский | fi - финский | fr - французский |
hu - венгерский | is - исландский | it - итальянский | nl - голландский |
нет - норвежский | pl - польский | pt - португальский | ru - русский |
sv - шведский | th - тайский |
При создании экземпляра LanguageIdentifier class, вы должны передать формат String извлекаемого содержимого или 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 () анализирует содержимое и сохраняет его в объекте-обработчике, который был передан ему как один из аргументов. Передайте формат String объекта-обработчика конструктору объекта-обработчика.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, Tika предоставляет приложение с графическим интерфейсом пользователя (GUI) и приложение интерфейса командной строки (CLI). Вы можете запустить приложение Tika из командной строки, как и другие приложения Java.