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

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)

Стандарт ECMAScript - https://tc39.es/ecma262/