По традиции, нужно подвести итоги уходящего года, и я решил перечитать свои посты. Перечитать-то перечитал, но как их оценить? Карма? Рейтинг? Просмотры? Слишком сухо и серьезно. Попугаи? Слишком несерьезно. Я решил измерять в Milfgard-ах.
Методика измерения: достаем посты Milfgard, и считаем частоту использования букв. Самый простой аналог фоносемантического анализа.
public static class SymbolsExtractor
{
private static readonly char[] _russianSymbols = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя".ToCharArray(); // 33 русских буквы
public static char[] RussianSymbols => _russianSymbols.ToArray();
public static Dictionary<char, double> SymbolsFrequences(this string text)
{
var symbolsQty = text.ToCharArray().Count(symbol => _russianSymbols.Contains(symbol)); // Длина текста (считаются лишь русские буквы)
double symbolPercentage = 1.00/symbolsQty;
var result = new Dictionary<char, double>();
foreach (char russianSymbol in _russianSymbols)
{
double inclusions = text.ToLower().ToCharArray()
.Count(textSymbol => textSymbol == russianSymbol) // Считаем сколько раз буква встречается в тексте
* (symbolPercentage); // Делим на длину текста
inclusions = Math.Round(inclusions, 3); // Округляем до долей процента
result.Add(russianSymbol, inclusions);
}
return result; // В результате: символы и их частоты
}
}
Я взял пять последних постов, пять первых, и посчитал медианы. Результат (Буква-Ранний Милфгард-Поздний Милфгард):
а | 0.0864 | 0.09 |
б | 0.0148 | 0.0172 |
в | 0.043 | 0.0388 |
г | 0.0164 | 0.0166 |
д | 0.0294 | 0.0292 |
... | ||
ъ | 0 | 0 |
ы | 0.0228 | 0.0204 |
ь | 0.0176 | 0.0186 |
э | 0.0038 | 0.0042 |
ю | 0.0064 | 0.0058 |
я | 0.0186 | 0.018 |
Как видно, отличие есть. Сравнивать, очевидно, надо с последними постами, я же провожаю 2016 год. Сравнить надо быстро: через два часа за стол. Поэтому среднеквадратичное отклонение от медианы Милфгарда не катит. Вместо этого я дополнительно беру медиану от постов Alizar, и сравниваю свою медиану с Милфгардовой и Ализаровой.
int result = 0;
foreach (var stat in stats)
{
double MilfgardDiff = Math.Abs(stat.NewMilfgard - stat.Oxoron); // Сравниваю медианы: мою и Milfgard
double AlizarDiff = Math.Abs(stat.Alizar - stat.Oxoron); // Сравниваю медианы: мою и Alizar
char res = MilfgardDiff > AlizarDiff ? 'M'
: Math.Abs(MilfgardDiff - AlizarDiff) < 0.0001 ? 'N'
: 'A';
if (res == 'M') result++; // Ближе к Milfgard
if (res == 'A') result--; // Ближе к Alizar
}
Console.WriteLine();
Console.WriteLine(result < 0 ? $"{-result} ALizar" : $"{result} Milfgard"); // Результат. Для меня - 8 Alizar
Как видим, полученный метод оценки прост и универсален. Область его применения чрезвычайно широка: можно сравнивать свое сходство с джавистами и шарпистами, рубистами и пхпешниками, эфШарпистами и хаскелистами. Также можно определить какой фреймворк JS лучше всего подходит вашей личности. Но какой бы результат не вышел — стремитесь к новым вершинам, коллеги, чтобы другие люди сравнивали себя с вами. С праздником!
P. S. Milfgard и Alizar выбраны исключительно для демонстрации работы метода, как одни из самых примечательных авторов хабры.
Комментарии (15)
ComodoHacker
01.01.2017 00:54Нужно сравнить с частотным словарем русского языка.
Oxoron
01.01.2017 04:00Увы, у меня, Alizar и Milfgard разные темы. Следовательно, и словари будут разными.
Плюс, я не спец в лингвистике, и далеко не уверен, что смогу составить словарь для одного автора за вечер, особенно для русского языка. По крайней мере, быстро нагуглить нужную библиотеку не получилось.ComodoHacker
01.01.2017 12:51На самом деле я имел в виду частоту букв в русском языке, как и у вас. https://duckduckgo.com/?q=частота+букв+в+русском+языке
Правда, оказывается, столько вариантов…
Milfgard
01.01.2017 09:32+3Частотность букв? Вот с кем надо сравнивать — Tios, пост про иероглифы.
А у vaily они прямо юникодом идут.
Mingun
01.01.2017 11:18+2private static readonly char[] _russianSymbols = "абвгдеёжзиклмнопрстуфхцчшщъыьэюя".ToCharArray(); // 32 русских буквы
А куда букву
й
подевали? Или это уже не буква?
maaGames
01.01.2017 12:40+3Сперва прочитал milf guard… В этом году обещаю стать чуточку менее похлым.)
ComodoHacker
01.01.2017 12:46+3… и чуточку более дошлым.
maaGames
01.01.2017 12:49+1На НГ подарил себе клавиатуру с cherry black, вместо мембранной. Ещё не привык, имею право опечатываться.) И вообще, первое января.
quazoops
Все справляют, но, как же не зайти на Хабру… С новым годом, ребят