Наткнувшись в Introduction to Information Retrieval на Heaps' law (с ростом объема текста количество уникальных слов растет как степенная функция, для ангоийского языка показатель степени где-то между 0.4 и 0.6) мне жутко захотелось проверить его на реальныйх текстах и сравнить распределение для разных авторов.
Начал я с Достоевского и его романов "Бесы" и "Преступление и наказание". Действительно, получилась зависимость похожая на степенную:
По x - количество слов, по y - количество уникальных слов.
Давайте сравним с каким-нибудь другим автором. Например с Донцовой. Из её многочисленный произведений я взял "Стриптиз Жар-птицы", "Диета для трех поросят" и "Фейсконтроль на главкую роль". Не скрою, я ожидал, что график Достоевского будет выше. Все-таки сравниваем одного из величайших писателей и автора многочисленный одинаковых детективов. Словарный запас Достоейского должен быть больше, количество уникальных слов у него должно расти быстрее. Посмотрим, что получилось:
Вот так, может быть действительно "...Достоевский писатель не великий, а довольно посредственный, со вспышками непревзойденного юмора, которые, увы, чередуются с длинными пустошами литературных банальностей..." (Набоков). С кем бы еще сравнить? Кто находится вне конкуренции? Кто написал "Войну и мир", в конце концов? Итак, добавим романы Льва Толстого "Война и мир" и "Анна Каренина".
Может не зря Донцова так хорошо продается... Добавим Акунина ("Азазель", "Турецкий гамбит", "Левиафан").
Ну хоть кто-то потеснил Донцову с первого места. И разница между ними существенная (во всяком случае большая, чем между Толстым и Достоевским). Может быть разница из-за эпох, в которых творили писатели? Добавим еще какого-нибудь классика из 20-го века. Мне на ум пришел Шолохов ("Тихий Дон").
Шолохов обходит Акунина. Так что может быть дело во времени и развитии языка. Ну или ошибка в коде:) Кстати вот он:
Начал я с Достоевского и его романов "Бесы" и "Преступление и наказание". Действительно, получилась зависимость похожая на степенную:
По x - количество слов, по y - количество уникальных слов.
Давайте сравним с каким-нибудь другим автором. Например с Донцовой. Из её многочисленный произведений я взял "Стриптиз Жар-птицы", "Диета для трех поросят" и "Фейсконтроль на главкую роль". Не скрою, я ожидал, что график Достоевского будет выше. Все-таки сравниваем одного из величайших писателей и автора многочисленный одинаковых детективов. Словарный запас Достоейского должен быть больше, количество уникальных слов у него должно расти быстрее. Посмотрим, что получилось:
Вот так, может быть действительно "...Достоевский писатель не великий, а довольно посредственный, со вспышками непревзойденного юмора, которые, увы, чередуются с длинными пустошами литературных банальностей..." (Набоков). С кем бы еще сравнить? Кто находится вне конкуренции? Кто написал "Войну и мир", в конце концов? Итак, добавим романы Льва Толстого "Война и мир" и "Анна Каренина".
Может не зря Донцова так хорошо продается... Добавим Акунина ("Азазель", "Турецкий гамбит", "Левиафан").
Ну хоть кто-то потеснил Донцову с первого места. И разница между ними существенная (во всяком случае большая, чем между Толстым и Достоевским). Может быть разница из-за эпох, в которых творили писатели? Добавим еще какого-нибудь классика из 20-го века. Мне на ум пришел Шолохов ("Тихий Дон").
Шолохов обходит Акунина. Так что может быть дело во времени и развитии языка. Ну или ошибка в коде:) Кстати вот он:
List<Integer> getDistribution(final List<Reader> sources,
final int step) throws IOException {
long words = 0;
final Set<String> uniqueWords = new HashSet<String>();
final List<Integer> result = new ArrayList<Integer>();
for (final Reader r : sources) {
final StreamTokenizer tokenizer = new StreamTokenizer(r);
tokenizer.quoteChar('.');
int tokenType;
while ((tokenType = tokenizer.nextToken()) != TT_EOF) {
if (tokenType == TT_WORD) {
uniqueWords.add(tokenizer.sval.toLowerCase());
words++;
if (words % step == 0) {
result.add(uniqueWords.size());
}
}
}
}
return result;
}





Комментариев нет:
Отправить комментарий