JavaScript | Функция определения русского языка в строке

JavaScript | Функция определения русского языка в строке

Как определить существование русского языка в строке (в тексте) при помощи JavaScript?

Мы хотим по строке понимать, есть ли в ней русский текст (или символы), а также если их очень много, то приравнивать данную строку к русскому языку. Как это сделать?

Мы будем отталкиваться от символов русского алфавита. Это 66 символов. На каждую букву приходится два регистра — строчный и заглавный.

let rualph = [«а»,»б»,»в»,»г»,»д»,»е»,»ё»,»ж»,»з»,»и»,»й»,»к»,»л»,»м»,»н»,»о»,»п»,»р»,»с»,»т»,»у»,»ф»,»х»,»ц»,»ч»,»ш»,»щ»,»ъ»,»ы»,»ь»,»э»,»ю»,»я», «А»,»Б»,»В»,»Г»,»Д»,»Е»,»Ё»,»Ж»,»З»,»И»,»Й»,»К»,»Л»,»М»,»Н»,»О»,»П»,»Р»,»С»,»Т»,»У»,»Ф»,»Х»,»Ц»,»Ч»,»Ш»,»Щ»,»Ъ»,»Ы»,»Ь»,»Э»,»Ю»,»Я»];

 

Нейтральные символы в текстах

У нас есть массив из искомых символов русского языка и теперь нам нужен ещё один массив из нейтральных символов. Что имеется ввиду?

Нейтральные символы — это все возможные знаки препинания в предложении, которые не являются частями алфавита какого-нибудь языка. Список таких символов может быть очень большим, но мы ограничимся самыми популярными.

let arrneutralchars = [‘ ‘, ‘,’,’.’,’!’,’?’,’:’,’;’,’/’,’\\’,’\»,’\»‘,'(‘,’)’,'[‘,’]’,'{‘,’}’,’+’,’-‘,’=’,’_’];

 

Какова цель массива из нейтральных символов?

Когда мы будем анализировать строку, тогда мы будем исключать из неё нейтральные символы, чтобы правильно рассчитать количества русских букв в противовес всем остальным буквам. Также правильный расчёт поможет нам высчитать правильный процент.

 

Условие определения русского языка

Какое количество русских символов можно считать достаточным, чтобы с уверенность сказать, что текст преимущественно русский?

Предлагаю остановиться на 50%. Если русских букв больше 50% — значит текст преимущественно русский.

Итоговый вид функции:

function langru(str){

    // Русский алфавит включает в себя 66 символов букв в двух регистрах

    let rualph = [«а»,«б»,«в»,«г»,«д»,«е»,«ё»,«ж»,«з»,«и»,«й»,«к»,«л»,«м»,«н»,«о»,«п»,«р»,«с»,«т»,«у»,«ф»,«х»,«ц»,«ч»,«ш»,«щ»,«ъ»,«ы»,«ь»,«э»,«ю»,«я»,«А»,«Б»,«В»,«Г»,«Д»,«Е»,«Ё»,«Ж»,«З»,«И»,«Й»,«К»,«Л»,«М»,«Н»,«О»,«П»,«Р»,«С»,«Т»,«У»,«Ф»,«Х»,«Ц»,«Ч»,«Ш»,«Щ»,«Ъ»,«Ы»,«Ь»,«Э»,«Ю»,«Я»];

 

    // Получаем массив символов из строки текста

    let arrfromstr = […str];

 

    // Массив с нейтральными символами, не имеющими отношения к языку

    let arrneutralchars = [‘ ‘, ‘,’,‘.’,‘!’,‘?’,‘:’,‘;’,‘/’,\\,\’,,‘(‘,‘)’,‘[‘,‘]’,‘{‘,‘}’,‘+’,‘-‘,‘=’,‘_’];

 

    // Находим разницу между массивами

    for (r of arrneutralchars){

        arrfromstr = arrfromstr.filter(i=>!i.includes(r));

    }

 

    console.log(‘Фильтрованный массив из оригинальной строки: ‘,arrfromstr);

 

    // Считаем количество русских символов в строке после вычета нейтральных символов

    console.log(‘Длина строки без нейтральных символов: ‘, arrfromstr.length);

 

    let percru = arrfromstr.filter(i=>rualph.includes(i)).length * 100 / arrfromstr.length;

 

    // Считаем процент русских символов в строке после вычета нейтральных символов

    console.log(‘Процент русских символов: ‘, percru);

 

    if(percru>50){

        return true;

    };

 

    // Если не попадаем в условие, тогда возвращаем ЛОЖЬ (русского языка недостаточно в строке)

    return false;

}

Как работает функция определения русского языка в строке?

Вызывать функцию будем в 3 примера:

langru('Маша кушала еду.');           // 100 процентов
langru('Маша купила Lamborgini.');    // 50 процентов
langru('My name is Маша!');           // 33.3 процента

Скриншот работы из браузера:

Функция определения русского языка в тексте в строке - JavaScript
Функция определения русского языка в тексте в строке — JavaScript

Для удобства анализа информации в консоль выведена дополнительная информация по вызовам функций с разными переданными строками.

В первом случае мы видим, что функция определила текст как русский на 100 процентов.

Во втором случае русских символов было всего 50 процентов, а значит его нельзя назвать русским.

Ну и третий вариант получился ниже 34 процентов, а значит это точно не русский язык.

 

Чувствительность функции

Данную функцию можно удобно настроить для своих задач по определению русского текста в строке JavaScript. Для этого достаточно поменять цифру в условной конструкции IF.

Для меньшей чувствительности можно установить значение менее 50 но не менее 5, например.

Всегда помните что у нас имеется всего 100 вариантов. От нуля до 100 процентов. Функция не защищена от ошибки, поэтому правьте внимательно.

 

Как можно улучшить средние значения?

Согласитесь, что число в 50% может встречаться в анализах довольно часто. Например это могут быть заголовки товаров в интернет магазинах, где категория представляет из себя русские символы, а название товара — английские.

В таких случаях можно учитывать количество слов в строке. Или можно расставить приоритеты. Например, если строка начинается на русское слово, то текст будет иметь отношение к русскому.

Напридумывать можно много всего. Зависит от задачи.

 

Информационные ссылки

JavaScript | Русский алфавит

JavaScript | Строки (String)

Стандарт ECMAScripthttps://tc39.es/ecma262/