Тезаурус проекта
Feb. 20th, 2015 03:39 pmКакие самые частые слова в языке программирования С++?
Пишем скриптик (комментарии добавлены при публикации):
Перловый скриптик wordcnt таков:
В результате на треть миллиона строк живого кода (nocomments) выходит около 38 тысяч разных умных слов. Частотный словарь начинается так:
(i, it и mod - имена переменных, Expr - имя типа, но не того, которого обычно переменная с именем mod)
Пишем скриптик (комментарии добавлены при публикации):
find Code -name '*.cc' -o -name '*.h' | \ находим все файлы с исходным кодом
xargs cat | \ собираем вместе
tee allsource | \ сохраняем чтоб было
sed s/#/@/g | \ не даем работать препроцессору
cpp | \ теперь он только комментарии удаляет
sed '/#/d;/^$/d' | \ удаляем вставленные препроцессором номера строк и пустые строки
sed "s/'\"'/@/g" | sed 's/\\[\\"]/@/g; s/"[^"]*"/ /g' \ ликвидируем всё в двойных кавычках
> nocomments
wordcnt < nocomments | \ частотный словарь алфавитно-цифровых последовательностей
sort -r -n -k 2 | \ сортируем
grep -v '^ *[0-9]' \ выбрасываем числа
> fullcnts
Перловый скриптик wordcnt таков:
while (<>) {
@words=split(/[\W\s]+/, $_);
foreach $word (@words) {
$wordcnt{$word}++;
}
}
foreach $word (keys(%wordcnt)) {
printf "%20s %d\n", $word, $wordcnt{$word};
}
В результате на треть миллиона строк живого кода (nocomments) выходит около 38 тысяч разных умных слов. Частотный словарь начинается так:
if 27202
const 21901
return 20803
int 13856
void 13070
char 12530
bool 10847
this 8959
std 8399
else 8278
case 7021
NULL 6896
i 6767
false 6288
it 5855
unsigned 5396
include 5287
true 5158
Expr 5046
mod 4678
string 4480
name 4358
break 4043
for 3868
c_str 3804
class 3742
size 3670
public 3633
(i, it и mod - имена переменных, Expr - имя типа, но не того, которого обычно переменная с именем mod)
no subject
Date: 2015-02-21 02:04 am (UTC)Покажи мне свой частотный анализ и я скажу какой код ты пишешь!
no subject
Date: 2015-02-21 02:14 am (UTC)Это я по мотивам code stylometry. Как в естественном языке автора можно с хорошей точностью установить по соотношению частот полудюжины самых частотных слов (союзов, предлогов, местоимений), так и в языке программирования должно быть можно.
В статье подход другой; он сложнее, но, по идее работает на более коротких образчиках: из ~630 строк много статистики о служебных словах не вытащить, приходится грамматику использовать. В крупном проекте индивидуальные особенности усредняются, и можно будет посмотреть, зависит ли распределение частот от предметной области, если кто-нибудь еще не поленится проанализировать.
no subject
Date: 2015-02-21 02:28 am (UTC)Язык тоже важен. На какой-нибудь Джаве около 60% кода вообще генерится средой. Что там можно нанализировать вопрос открытый. Вообще, я вижу что machine learning в последние годы стал модный тренд в computer sciences (за другие науки не скажу, не знаю). У нас на работе интерны тоже бросаются на амбразуру с machine learning наперевес. Результаты обычно так себе. Начинаю понимать Шкрёбиуса с его пессимистическим взглядом на современную науку. :)
П.С. Имя у девочки роскошное.
П.П.С Насчёт предметной области согласен. Большинство корпоративного кода это унылый boilerplate, такой же как и middle management и егойные кодеры. Никакой индивидуальности не обнаружишь.