Для классификации документов на основе языка, на котором они написаны на многоязычном веб-сайте, необходим инструмент определения языка. Этот инструмент должен принимать документы без языковой аннотации (метаданные) и добавлять эту информацию в метаданные документа, обнаруживая язык.
Алгоритмы для профилирования корпуса
Что такое корпус?
Чтобы определить язык документа, создается языковой профиль и сравнивается с профилем известных языков. Набор текстов этих известных языков известен как корпус .
Корпус — это набор текстов письменного языка, который объясняет, как язык используется в реальных ситуациях.
Корпус разработан из книг, стенограмм и других источников данных, таких как Интернет. Точность корпуса зависит от алгоритма профилирования, который мы используем для формирования корпуса.
Что такое алгоритмы профилирования?
Распространенным способом обнаружения языков является использование словарей. Слова, используемые в данном фрагменте текста, будут сопоставляться с теми, которые есть в словарях.
Список общих слов, используемых в языке, будет наиболее простым и эффективным набором для определения конкретного языка, например статей a , an , the на английском языке.
Использование наборов слов в качестве корпуса
Используя наборы слов, простой алгоритм создается, чтобы найти расстояние между двумя корпусами, которое будет равно сумме разностей между частотами совпадающих слов.
Такие алгоритмы страдают от следующих проблем —
-
Поскольку частота совпадения слов очень мала, алгоритм не может эффективно работать с небольшими текстами, имеющими несколько предложений. Для точного соответствия нужно много текста.
-
Он не может определить границы слов для языков, имеющих составные предложения, и для языков, не имеющих разделителей слов, таких как пробелы или знаки препинания.
Поскольку частота совпадения слов очень мала, алгоритм не может эффективно работать с небольшими текстами, имеющими несколько предложений. Для точного соответствия нужно много текста.
Он не может определить границы слов для языков, имеющих составные предложения, и для языков, не имеющих разделителей слов, таких как пробелы или знаки препинания.
Из-за этих трудностей в использовании наборов слов в качестве корпуса рассматриваются отдельные символы или группы символов.
Использование наборов символов в качестве корпуса
Поскольку символы, которые обычно используются в языке, имеют конечное число, легко применить алгоритм, основанный на частотах слов, а не на символах. Этот алгоритм работает даже лучше в случае определенных наборов символов, используемых в одном или очень немногих языках.
Этот алгоритм имеет следующие недостатки:
-
Трудно различить два языка с одинаковыми частотами символов.
-
Не существует специального инструмента или алгоритма для конкретной идентификации языка с помощью (как корпус) набора символов, используемого несколькими языками.
Трудно различить два языка с одинаковыми частотами символов.
Не существует специального инструмента или алгоритма для конкретной идентификации языка с помощью (как корпус) набора символов, используемого несколькими языками.
Алгоритм N-граммы
Указанные выше недостатки привели к новому подходу использования последовательностей символов заданной длины для составления корпуса. Такая последовательность символов обычно называется N-граммами, где N представляет длину последовательности символов.
-
Алгоритм N-граммы является эффективным подходом для определения языка, особенно в случае европейских языков, таких как английский.
-
Этот алгоритм отлично работает с короткими текстами.
-
Хотя существуют усовершенствованные алгоритмы профилирования языков для обнаружения нескольких языков в многоязычном документе, имеющем более привлекательные функции, Tika использует алгоритм 3 грамма, который подходит в большинстве практических ситуаций.
Алгоритм N-граммы является эффективным подходом для определения языка, особенно в случае европейских языков, таких как английский.
Этот алгоритм отлично работает с короткими текстами.
Хотя существуют усовершенствованные алгоритмы профилирования языков для обнаружения нескольких языков в многоязычном документе, имеющем более привлекательные функции, Tika использует алгоритм 3 грамма, который подходит в большинстве практических ситуаций.
Обнаружение языка в Тике
Среди всех 184 стандартных языков, стандартизированных по ISO 639-1, Tika может распознавать 18 языков. Определение языка в Tika осуществляется с помощью метода getLanguage () класса LanguageIdentifier . Этот метод возвращает кодовое имя языка в формате String. Ниже приведен список из 18 пар кодов языков, обнаруженных Тикой.
да-датский | де-немецкий | е-эстонский | эль-греческий |
ан-английски | эс-испанский | фи-фински | FR-французский |
Hu-венгерский | это-исландский | он-итальянский | п-нидерландский |
нет-норвежский | пл-Польский | пт-Portuguese | ру-русский |
св-Swedish | го-тайская |
При создании экземпляра класса LanguageIdentifier вы должны передать формат 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.