Что такое биграммы

В одном из проектов(о нем позже) мне нужно было понимать, текстовая часть строки имела какой -то смысл, или это просто набор символов Можно конечно собрать словарь из 100000 слов, и проверять наличие слова в данном словаре, но у этого способа есть несколько минусов 1. Слово может быть в другой форме (гора → к горе) 2. В тексте может быть сленг, имена, кривые записи 3. Да и вообще задача часто не “найти слово”, а понять — это похоже на нормальный язык или нет

Для таких задач можно использовать n-граммы, например биграммы.. В чем суть, мы берём какой-то набор слов, близкий к нашей теме, например первые что страниц войны и мира, проходимся циклом по каждому слову и составляем из него пары букв. Например у Сетки биграмма будет следующая: Се Ет Тк Ка Затем при появлении той или иной биграммы, мы либо записываем ее в словарь, если ее там ещё нет, или добавляем +1 к количеству у уже добавленной в словарь биграммы На выходе мы получим словарь, с 1089(в лучшем случае, когда мы охватили все сочетания русских букв(33*33)) ключами, значением у них будет количество появлений каждой биграммы внутри нашего словаря, посчитав общее количество биграмм, мы сможем посчитать вероятность появления каждой биграммы. Отталкиваясь от этих вероятностей мы сможем довольно точно оценить, что строка "Сетка" - читаемое человеком слово, а строка "ьъвлкдц"- человеком не читается Помимо биграм, аналогичным способом можно строить три, четыре и сколькоугоднограммы, все зависит от вашей задачи) Напоминаю, что я новичок в этом, и буду только рад, если кто-то с опытом поправит меня в каких то моментах, собственно ради этого я здесь) Кстати вот мой пример кода, который рассчитывает частоту n-грамм из txt файла: https://github.com/UUSC/ngramm\_counter

P.S. добавив к биграммам логику цепей Маркова, мы получим предсказатель следующей буквы/слова, с которым вы каждый день сталкиваетесь внутри поисковика)

Что такое биграммы | Сетка — социальная сеть от hh.ru