Как вычислить сходство частоты букв?

Учитывая эти данные (относительная частота букв на обоих языках):

spanish => 'e' => 13.72, 'a' => 11.72, 'o' => 8.44, 's' => 7.20, 'n' => 6.83,
english => 'e' => 12.60, 't' => 9.37, 'a' => 8.34, 'o' => 7.70, 'n' => 6.80,

И затем вычисление частоты букв для строки "это тест" дает мне:

"t"=>21.43, "s"=>14.29, "i"=>7.14, "r"=>7.14, "y"=>7.14, "'"=>7.14, "h"=>7.14, "e"=>7.14, "l"=>7.14

Итак, что было бы хорошим подходом для сопоставления заданной частотной буквы с языком (и попытаться определить язык)? Я видел (и протестировал) несколько примеров, используя расстояние levenshtein, и кажется, что он работает нормально, пока вы не добавите больше языков.

"this is a test" gives (shortest distance:) [:english, 13] ...
"esto es una prueba" gives (shortest distance:) [:spanish, 13] ...
+8
29 мар. '13 в 19:38
источник поделиться
3 ответа

Рассматривали ли вы сходство с косинусом, чтобы определить количество сходства между двумя векторами? cosine similarity formula

Первым вектором будут частоты букв, извлеченные из тестовой строки (подлежащей классификации), а второй вектор будет для конкретного языка.

В настоящее время вы извлекаете однобуквенные частоты (униграммы). Я бы предложил извлечь более высокий порядок n-grams, например, биграммы или триграммы (и даже больше, если у вас было достаточно данных обучения). Например, для биграмм вы должны вычислять частоты "aa", "ab", "ac"... "zz", что позволит вам извлекать больше информации, чем если бы вы рассматривали только частоты одного символа.

Будьте осторожны, потому что вам нужно больше данных для обучения, когда вы используете n-граммы более высокого порядка, иначе у вас будет много 0-значений для комбинаций символов, которые вы ранее не видели.

Кроме того, вторая возможность - использовать tf-idf (весовые коэффициенты с инверсной частотой) вместо чистой буквы ().

Research

Вот хорошее слайд-шоу на идентификация языка для (очень) коротких текстов, в котором используются классификаторы машинного обучения (но также есть и другая хорошая информация).

Вот короткая статья Сравнение подходов идентификации языка на Short, Query-Style Texts, которые также могут оказаться полезными.

+11
29 мар. '13 в 20:57
источник

n-графики, безусловно, помогут с короткими текстами и помогут многое. С любым разумным текстом длины (абзац?), Простые частоты букв работают хорошо. В качестве примера я написал короткую демонстрацию этого, и вы можете загрузить исходный код http://georgeflanagin.com/free.code.php

Это последний пример на странице.

+1
15 мая '13 в 17:54
источник

Приведенные вами примеры состоят из короткого предложения. Статистика диктует, что если ваш вход был длиннее (например, абзац, уникальные частоты должны быть легче идентифицировать.

Если вы не можете полагаться на пользователя, предоставляющего более длинный ввод, возможно, посмотрите на обычные слова (например, is, as, and... и...) на этом языке, если соответствующие частоты букв совпадают?

+1
29 мар. '13 в 19:49
источник

Посмотрите другие вопросы по меткам или Задайте вопрос