RAntiquity
1.09K subscribers
295 photos
11 videos
5 files
545 links
Об античности на языке R и не только

@locusclassicus
Download Telegram
Виртуальный визит в Помпеи: как архитектура управляет нашим вниманием

Можно ли проанализировать взаимодействие человека и архитектурной среды? И причём тут ГИС и айтрекинг? Рассказываем, как люди ходят в гости к древним римлянам в VR-очках, чтобы лучше понять культуру и повседневную жизнь античного города.   

Кратко: о чем
статья?

Исследователи из Швеции предложили новый подход к проблеме визуального воздействия среды на человека. Их метод основан на совмещении географических информационных систем (ГИС, об их использовании историками мы уже рассказывали) и айтрекинга. Они уверены: то, как современный зритель смотрит на древнюю среду, поможет лучше понять культуру и повседневную жизнь древнего города Помпеи.

Участники проекта гуляли по трёхмерной модели помпейского дома в VR-очках. Полученные данные переносились в ГИС, благодаря чему стало ясно, как распределялось зрительное внимание. Например, его точно привлекали скульптурные изображения предков или божеств. А эротические фрески располагались таким образом, чтобы большую часть дня оставаться в тени — эффект визуального воздействия мог зависеть и от положения солнца в то или иное время суток.

Эти данные открывают новые возможности для анализа взаимодействия человека с архитектурной средой и выявляют истинную роль того или иного элемента в общем ансамбле здания — кому и когда он был доступен для обозрения, на какое время выставлялся на показ и когда был спрятан от посторонних глаз.

Подробнее об исследовании и о том, что и откуда можно было увидеть в воссозданном доме — в полной версии статьи.

Время чтения: 8 минут.

🤖 «Системный Блокъ» @sysblok
Please open Telegram to view this post
VIEW IN TELEGRAM
8
RAntiquity
❗️ Новая #задачка сегодня из рецензии Пауля Кейзера на книгу Леонарда Брэндвуда The Chronology of Plato's Dialogues (1990). Несколько лет назад, когда я впервые прочитала эту рецензию, я почти ничего не поняла, кроме того, что Б. совершает какие-то страшные…
Когда что-то говоришь вслух, особенно публично, всегда есть риск сказать глупость. И когда в комментариях к этому посту @aGricolaMZ указал мне на то, что результат Кейзера воспроизводится, только если забыть об объеме выборки, было неловко. С другой стороны, как мы знаем от Сократа, кто молчит, чтобы сойти за умного, тот остается один на один со своим невежеством. Если бы не этот пост, я бы не получила письма от самого Пауля Кейзера, в котором он подтверждает наблюдения ученейшего коллеги и тем самым дает мне урок быть внимательнее в задачках — а когда это невозможно, уметь признавать свою неправоту. Уважаю.
15💯6👏4👍2
🗳 Коллеги уже написали про ежегодную выставку достижений цифрового гуманитарного хозяйства, Digital Humanities Awards 2023.

А мы добавим, что в этом году в шортлисте несколькими именами представлена магистратура "Цифровые методы в гуманитарных науках" НИУ ВШЭ и даже, силы небесные, автор этого канала.

По ссылке можно нас (или кого-то еще) поддержать, чтобы мы и дальше вдохновенно радовали вас чем-нибудь таким эдаким.

В общем, вот наши номинации:

⭐️ BEST DH DATASET
Борис Орехов (руководитель программы), Russian-European literary relations of the 18th century – https://dataverse.pushdom.ru/dataset.xhtml?persistentId=doi:10.31860/openlit-2023.4-B003

⭐️ BEST DH TOOL OR SUITE OF TOOLS
Диана Есаян (выпускница программы), Direct Speech Extractor – https://github.com/diana-esaian/direct-speech-extractor-ru

⭐️ BEST DH TRAINING MATERIALS
Ольга Алиева (преподаватель программы), Computer text analysis with R – https://locusclassicus.github.io/text_analysis_2023/

⭐️ BEST DH SHORT PUBLICATION
Борис Орехов
, Identifying the style by a qualified reader on a short fragment of generated poetry – https://arxiv.org/abs/2306.02771

⭐️ BEST USE OF DH FOR FUN
Борис Орехов, Calendarium Romanum – https://vk.com/calendariumromanum

ℹ️ Не забудьте поделиться информацией с друзьями: голосовать могут все, вне зависимости от академического статуса и отношения к DH.

⌛️ Голосование продлится до 30 марта 2024 г. Голосовать можно в нескольких номинациях.

❗️Голосовать можно только один раз, но зато сами организаторы призывают делиться информацией с друзьями и коллегами, потому что одна из идей конкурса -- популяризация DH.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥6🔥4🍾3
Это мартовское утро я провожу, пытаясь добыть текст речи Лисия “Против Эратосфена” из #xml.

В Perseus нужный мне текст хранится под тегом <p> (параграф), но внутри каждого параграфа есть еще сноски по изданию Loeb, которые мне не нужны. Обычно там лежат разночтения. Например, вот такие:


<note resp="Loeb" anchored="true" xml:lang="lat"><foreign xml:lang="grc">δʼ</foreign> add. Scaliger</note>


Если так и оставить, то слова δʼ add. Scaliger тоже извлекутся, а мне они не нужны. Вот так это работает:


library(xml2)
test_xml <- '<top> нужный текст <div type="textpart"> <p> нужный текст <note> ненужный текст </note> нужный текст <note> ненужный текст </note> нужный текст</p></div></top>'

doc <- read_xml(test_xml) xml_text(doc)


Чинится просто:


remove_me <- xml_find_all(doc, "//note")
xml_remove(remove_me) xml_text(doc)


Можно перезаписать файл:


write_xml(doc, file = "new.xml")
9
Простой и универсальный способ создать филогенетическое дерево — использовать формат Ньюика, т.е. просто-напросто комбинацию скобок и запятых.


library(ape)
tr <- read.tree(text ="(Rest,(R,(Greek,Latin)));")

par(mfrow = c(2,2), mar = c(1,2,2,2), family = "Arial Narrow")
plot.phylo(tr, type = "unrooted", main = "unrooted")
plot.phylo(tr, type = "cladogram", main = "cladogram")
plot.phylo(tr, type = "phylogram", main = "phylogram")
plot.phylo(tr, type = "fan", main = "fan")


Вот такое, например, нехитрое у меня сегодня дерево активностей выходного дня.

#филогенетика
10
🌳 Придется вам потерпеть еще несколько постов про #филогенетика, пока я разбираюсь в теме. Этот пост о силе консенсуса, но совсем не того, о котором сегодня можно было бы подумать.

Допустим, у нас есть три дерева. Таких, как на картинке 1. Вот код для воспроизведения:

library(ape)
tr1 <- ape::read.tree(text = "((1,2),(3,4));")
tr2 <- ape::read.tree(text = "((1,3),(2,4));")
tr3 <- ape::read.tree(text = "((1,2),(3,4));")


par(mfrow = c(1, 3), mar = c(5,1,5,1), cex = 1)
plot.phylo(tr1, tip.color = 2 )
plot.phylo(tr2, tip.color = 2 )
plot.phylo(tr3, tip.color = 2 )

Кластеры 1-2, 3-4 встречаются в двух деревьях, остальные лишь в одном. Задача — найти наиболее устойчивые кластеры методом простого большинства. Это можно сделать при помощи консенсусных деревьев.

Сначала считаем консенсус, аргумент p указывает, что кластер должен быть представлен не менее, чем в половине деревьев. Также уточняем, что наши деревья укоренены:

cons <- consensus(list(tr1, tr2, tr3), p = 0.5, rooted = TRUE)

Консенсус тоже можно изобразить; дополнительно для узлов укажем силу консенсуса (2/3 = 0.67):

par(mfrow = c(1,1), mar = c(5,5,5,5))
plot.phylo(cons, tip.color = 2)
nodelabels(round(cons$node.label[3],2), 7, frame = "c", cex = 0.7)
nodelabels(round(cons$node.label[2],2), 6, bg = "yellow")

Это очень простое консенсусное дерево, построенное по методу простого большинства, которое позволяет «обобщить» несколько разных деревьев. Полезно не только эволюционным биологам, но и тем, кто работает с текстами. Чуть позже расскажу, как.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍94
Forwarded from aGricolaMZ
https://vectors2024.tilda.ws/digitalpast

тезисы до завтра а сама конференция 18 по 21 апреля
5
RAntiquity
🌳 Придется вам потерпеть еще несколько постов про #филогенетика, пока я разбираюсь в теме. Этот пост о силе консенсуса, но совсем не того, о котором сегодня можно было бы подумать. Допустим, у нас есть три дерева. Таких, как на картинке 1. Вот код для воспроизведения:…
🌳У консенсусных деревьев есть один очевидный недостаток. Допустим, у нас есть три неукорененных дерева, как на рис. 1.

library(ape)
tr1 <- ape::read.tree(text = "((1,2),(3,4));")
tr2 <- ape::read.tree(text = "((1,3),(2,4));")
tr3 <- ape::read.tree(text = "((1,4),(2,3));")

par(mfrow = c(1, 3), mar = c(5,0,5,0), cex = 1)
plot.phylo(tr1, tip.color = 2, type= "unrooted" )
plot.phylo(tr2, tip.color = 2, type= "unrooted" )
plot.phylo(tr3, tip.color = 2, type= "unrooted" )

Консенсусное дерево в таком случае никак не поможет: оно не допускает значений p < 0.5. Проверьте сами: код ниже вернет садовые вилы 🔱

par(mfrow = c(1,1))
cons.tr <- consensus(list(tr1, tr2, tr3), p = 0.5, rooted = F)
plot.phylo(cons)

В таких случаях на помощь приходит консенсусная сеть, строится с использованием пакета phangorn. На входе отдаем объект класса multiPhylo, это по сути просто три дерева в одном букете.

library(phangorn)
library(TreeTools)
mph <- as.multiPhylo(list(tr1, tr2, tr3))

cons.nw <- consensusNet(mph, prob = 0.3, rooted = F)

Объект cons.nw относится к классу networx. Его можно изобразить как в двух, так и в трех измерениях. Вот так (рис. 2):

plot(cons.nw, type = "2D")

Но вообще говоря самое веселое — это сеть в 3D. #филогенетика

library(rgl) 
movie3d(spin3d(axis=c(0,1,0), rpm=3), duration=10, dir = ".", type = "gif", webshot = F)
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Земля в иллюминаторе… 👩‍🚀
9👌2👍1🥰1
Forwarded from Vox mediaevistae
В следующую среду в 16.30 по московскому времени (20.30 по Красноярску) состоится заседание семинара «Цифровая среда», на котором я расскажу про автоматическую транскрипцию рукописей. Это будет обзорное выступление, на котором я обрисую историю распознавания печатного и рукописного текста, опишу пайплайн распознавания рукописи (способы добычи изображения; его сегментация на зоны (на примере kraken и YOLO рассмотрим два подхода: семантическую сегментацию и обнаружение объектов); сегментация на строки (здесь тоже поговорим про несколько подходов: paths, baselines, bounding boxes); сама транскрипция) и скажу несколько слов про то, как «улучшить» полученную транскрипцию (в частности, про свежие эксперименты с трансформерами).
Дискутантом выступит Глеб Шмидт, который великолепно разбирается и в тематическом моделировании, и в факторном анализе, и в стилометрии, и в HTR.
Чтобы послушать и присоединиться к дискуссии, нужно зарегистрироваться здесь.
🔥11👍41
🌳 Снова #филогенетика. Зачем строить несколько деревьев?

Дело в том, что результат кластеризации зависит от нескольких параметров:
📌 число предикторов (например, наиболее частотных слов для разных произведений);
📌 расстояние, которое используется для попарных сравнений (евклидово, городских кварталов, др.)
📌 метод связи при иерархической кластеризации (метод полной связи, метод средней связи, метод Уорда и др.);

Иногда добавление или удаление буквально одного слова меняет структуру дерева. Поэтому бывает необходимо сравнить разные деревья. Выше мы уже видели один способ это сделать — консенсусное дерево. Но оно дает уже результат обобщения, а иногда интересно посмотреть на исходные деревья, сопоставить их попарно.

Для этого удобно построить tanglegram, в R это проще всего сделать при помощи пакета dendextend.


library(stylo)
library(dendextend)

data("galbraith")
data <- as.data.frame.matrix(galbraith)[c(1,2, 9, 10, 16, 17),c(1:30)]
distmx <- dist(scale(data))

d1 <- as.dendrogram(hclust(distmx, method ="average")) %>% set("labels_col", value = c("skyblue", "orange", "grey40"), k=3) %>% set("branches_k_color", value = c("skyblue", "orange", "grey40"), k = 3)

d2 <- as.dendrogram(hclust(distmx, method ="ward.D2")) %>% set("labels_col", value = c("skyblue", "orange", "grey40"), k=3) %>% set("branches_k_color", value = c("skyblue", "orange", "grey40"), k = 3)

dlist <- dendlist(d1, d2)

par(family = "Arial Bold")
tanglegram(dlist, common_subtrees_color_lines = FALSE, highlight_distinct_edges = TRUE, highlight_branches_lwd=FALSE, margin_inner=10, lwd=2, axes=FALSE, main_left = "Cредняя", main_right = "Уорд", lab.cex = 1.3)


На картинке видно, что одно из сочинений Дж. Роулинг попадает в разные кластеры в зависимости от метода связи, хотя для кластеризации использовалась одна и та же матрица расстояний.
Please open Telegram to view this post
VIEW IN TELEGRAM
😱6👍4
🌳 Консенсусное дерево легко построить в пакете Stylo, в том числе используя GUI (графический интерфейс).

Нажимать на кнопки легко и приятно, но есть нюансы. Во-первых, не получится кастомизировать внешний вид дерева, а, во-вторых, в Stylo реализована достаточно специфическая процедура бутстрепа (повторных выборок).

Вот что пишут разработчики:

Under the FEATURES tab, users can define the minutes of the MFW division and sampling procedure, using the increment, the minimum and maximum parameters. For minimum = 100, maximum = 3000, and increment = 50, stylo will run subsequent analyses for the following frequency bands: 100 MFW, 50–150 MFW, 100–200 MFW, ..., 2900–2950 MFW, 2950–3000 MFW.



Для консенсуса нужно много деревьев, и Stylo будет строить эти деревья в заданном интервале. Это значит, что последние деревья будут построены уже не на основе самой частотной лексики, т.е. скорее всего на них отразится тематика текстов, входящих в корпус.

В некоторых случаях это работает неплохо. Например, для моего тренировочного греческого корпуса хватило 100-500 mfw, и почти все авторы (кроме Аристида) благополучно разошлись по своим домикам на дереве 🏡 (см. рисунок).

Но, возможно, вам понадобятся другие идеи для консенсуса. Разные расстояния. Разные методы кластеризации. Случайные выборки из первых двух сотен слов или еще что-то. Тогда придется самим строить сразу множество деревьев. Как это сделать грамотно, расскажем в следующих выпусках нашего кулинарного цифрового шоу. #филогенетика
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍1
🗣Приглашаем на презентацию проектных работ студентов 2го курса магистратуры по Digital Humanities НИУ ВШЭ.

В этом году темы проектов посвящены исследованию деколонизации музеев, индвидиуального стиля Платона, особенностям советского кинопроката, библиографии детской литературы, наскальной живописи, многобразию лингвистики как науки и сохранению цифровой памяти.

📆 Встреча пройдет 23 марта в 16.00.

Регистрация по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥81
Если изучить изнанку функции stylo(), которая вызывает GUI в одноименном пакете, то можно заметить, что за консенсусное дерево там отвечает пакет для работы с филогенетическими данными под названием Ape 🦍

Что делает машинка, когда вы заказываете у нее консенсусное дерево? Принимает на входе матрицу с 1 … N столбцами, в которых хранится частотность для слов. Потом отбирает первые сколько-то слов (скажем, сотню или сколько скажете), считает расстояние, строит на основе матрицы расстояний дерево, складывает его в корзинку. Потом берет следующую сотню слов, считает расстояние, строит дерево, складывает в корзинку… Ну вы поняли. Получается букет деревьев.

Звучит как итерация, а такие задачи в R решаются при помощи цикла for или пакета purrr. Функции map() из пакета purrr надо вручить другую функцию, у меня это пользовательская get_tree(). Она берет случайные 100 столбцов в таблице с частотностями galbraith из пакета Stylо, считает евклидово расстояние между документами и строит дерево.

library(stylo)
library(ape)
library(purrr)

data("galbraith")
df <- as.data.frame.matrix(galbraith)[c(1,2, 9, 10, 16, 17),]

get_tree <- function(df) {
X <- df[ , sample(3000, replace = T, size = 100)]
distmx <- dist(scale(X))
tr <- as.phylo(hclust(distmx))
tr
}

Запускаем ее 4 раза при помощи map, получаем список из 4-х деревьев. Тем же map() печатаем сразу четыре дерева одной строчкой кода 🧙🪄

set.seed(123)
result <- map(1:4, ~get_tree(df))

# отдельные деревья
par(mfrow = c(2, 2), mar = c(1,1,1,1))
map(1:4, ~print(plot(result[[.]])))

Так можно построить и 100, и 1000 деревьев, попробуйте. О том, что с ними делать дальше — чуть позже. #филогенетика
Please open Telegram to view this post
VIEW IN TELEGRAM
6
На результат стилометрического исследования древнегреческих текстов может влиять не только жанр и тема (как у нормальных людей), но и особенности кодировки, диалекта и даже неприятная издательская практика писать по-разному несобственные дифтонги (т.е. дифтонги с первым долгим гласным).

Как объяснить машине, что iota adscriptum и iota subscriptum — это одно и то же? И к автору не имеет никакого отношения. Для гласных, которые всегда долгие, можно настроить автозамену. Вот мое решение:


library(stringr)

ortho_fix <- function(string) { string %>% str_replace_all( c("ῶι"="ῷ", "ωι"="ῳ", "ὧι"="ᾧ", "ὦι"="ᾦ", "ηι"="ῃ", "ῆι"="ῇ", "ἦι"="ᾖ", "ἧι"="ᾗ")) }

test_string <- c("ἑκάστωι ἔργωι καὶ πράγματι", "σὺν πολλῶι χρόνωι", "καὶ τῆι ἐξ ὀλίγου χρόνου εὐδοξίαι")

test_string %>% ortho_fix()


А вот с альфой так поступить не получится, потому что αι не всегда можно заменить на ᾳ. В раздумьях.
#regex
🤝63👍1
Рано расслабляться. Еще сигма в середине слова (на стыке морфем) в старых изданиях.
😭4😱2
Forwarded from DH CLOUD
Вестник Digital Humanities: что делают цифровые гуманитарии с большими языковыми моделями и где смотреть (и оценивать!) достижения DH-хозяйства

Несмотря на непрекращающиеся драматические события в разных точках планеты, научная DH-жизнь продолжается. А значит, и мы продолжаем рассказывать о ней в новых выпусках «Вестника Digital Humanities». В мартовском выпуске — отчет о недавней немецкой DH-конференции и LLM-воркшопе на ней, статья о конкуренции гуманитариев с большими языковыми моделями, анонс семинара по цифровому распознаванию рукописей и приглашение проголосовать за DH-awards этого года.

https://mailchi.mp/d654715e70ab/digital-humanities-16506350?e=ed4cb54ab6
5🔥2
Наука (в широком смысле techne) отличается от ненауки рефлексией по поводу инструментов и методов. Землемер вполне способен на практике применять теорему Пифагора, но он никогда не задумается о проблеме соизмеримости, связанной с этой теоремой. Дачник, соорудивший стол из старой дверной створки, — еще не плотник. Обращение к цифровым методам, когда оно диктуется не внутренней потребностью исследователя, а внешними обстроятельствами, неизбежно принимает вид «бриколажа».

В наши дни бриколер — это тот, кто творит сам, самостоятельно, используя подручные средства в отличие от средств, используемых специалистом. …Бриколер способен выполнить огромное число разнообразных задач. Но в отличие от инженера ни одну из них он не ставит в зависимость от добывания сырья и инструментов, задуманных и обеспечиваемых в соответствии с проектом: мир его инструментов замкнут, и правило игры всегда состоит в том, чтобы устраиваться с помощью «подручных средств», то есть на каждый момент с ограниченной совокупностью причудливо подобранных инструментов и материалов… Совокупность бриколерских средств определяется не каким-либо проектом (что бы предполагало, как у инженера, существование и наборов инструментов, и проектов разного рода, по меньшей мере в теории); она определяется лишь своим инструментальным использованием, иначе говоря, если употребить язык бриколера, элементы собираются и сохраняются по принципу «это может всегда сгодиться».

К. Леви-Стросс. Неприрученная мысль (1962).

Форсированная цифровизация — это массовое производство бриколеров. А науке, как учил великий Гумбольдт, нужны свобода и досуг.
🔥105