Снова география. Павсаний, Страбон и даже Плиний Старший тоже нанесены на карту при помощи онлайн-инструмента под названием Recogito. Разработкой и тегированием занимался тот же Элтон Баркер, который соорудил карту Геродота.
Recogito — это бесплатный, очень простой, но достаточно удобный онлайн-инструмент, в 2018 получивший приз как лучший DH-tool в Digital Humanities Awards 2018. Он позволяет работать в командах над аннотированием текстов.
Размеченные таким образом именованные сущности можно затем экспортировать в ГИС.
💡 Загружаете свой текст (на любом языке) и можете — например, по мере чтения его со студентами — добавлять какую-нибудь разметку. Вот вам идея для цифровой проектной работы, которая не требует кодинга.
💡 Кстати, csv или json с координатами локаций у Павсания, Страбона и Плиния вполне можно скачать и использовать в учебных целях. На картинке Страбон для привлечения внимания. #карты
Recogito — это бесплатный, очень простой, но достаточно удобный онлайн-инструмент, в 2018 получивший приз как лучший DH-tool в Digital Humanities Awards 2018. Он позволяет работать в командах над аннотированием текстов.
Размеченные таким образом именованные сущности можно затем экспортировать в ГИС.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13🔥2
Несколько лет назад, когда я впервые прочитала эту рецензию, я почти ничего не поняла, кроме того, что Б. совершает какие-то страшные статистические грехи. Пришло время разобраться, какие именно.
Dittenberger then examined Plato’s use of comparative particles (ὥσπερ and καθάπερ), but the results are fuzzy at best (pp. 19-20). B. tries (p. 19) to make them more precise by noting a decreasing rate, counted as uses per page, from Euthd., Meno, Gorg., Crat., Phdo., Symp., Lysis (0.80) to Phdr., Rep., Theaet. (0.61), and thence to Parm., Phil., Soph., Pol., Tim., Crit., and Laws (0.40). In … comparing the three numbers [B.] claims a clear trend but he fails to determine whether it is in fact statistically significant. Briefly the uncertainty σ for each ratio would be respectively 0.80 ± 0.15, 0.61 ± 0.08, and 0.40 + 0.07, and the level of significance of the pairwise differences would be z = 1.1 (73 % ) and z = 2.0 (95 %).
Простыми словами: Б. считает, что в ранней, средней и поздней группе сравнительные наречия встречаются с убывающей частотностью (в пересчете на страницу текста): соответственно 0.80 (7 диалогов), 0.61 (3 диалога) и 0.40 (7 диалогов). Как он пишет,
Clearly there can be no doubt of the direction of the trend.
Однако сомнения есть. Кейзер считает не только среднее, но и стандартное отклонение для каждой группы: 0.15, 0.08, 0.07 соответственно. Это дает ему возможность попарно сравнить, есть ли значимая разница в средних (формула).
z1 <- (0.8 - 0.61) / sqrt( 0.15^2 + 0.08^2) # 1.1
z2 <- (0.61 - 0.4) / sqrt( 0.08^2 + 0.07^2) # 1.97
Ура, мы получаем те же значения, что и Кейзер. От них можно перейти к вероятности:
pnorm(abs(z1), lower.tail = F) * 2 # 27%
pnorm(abs(z2), lower.tail = F) * 2 # 5%
Таким образом с вероятностью 27% для групп 1 и 2 и с вероятностью 5% для групп 2 и 3 выборочные средние происходят из одной популяции. Кейзер говорит о 73% и 95% (т.е. 1 – p) уверенности, чего, с его точки зрения, недостаточно:
That is, those are the probabilities that the difference is significant—and most statisticians would consider anything less than 95% (I and most physicists prefer 99%) as insignificant. B. calculates (pp. 21-2) various ratios, which suffer from the same defect.
Очень непросто иногда читать рецензии.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥1
Друзья, в первую очередь студенты и аспиранты, если у кого-то есть охота поговорить со мной о философии и цифровизации, можно до 17 марта подать заявку здесь. Если там будет мноооого и философии чуть-чуть цифровизации, то ок (и наоборот тоже ок). Просто хороший повод собраться и поговорить.
Telegram
Antibarbari HSE
3-24 мая 2024 г. на Факультете гуманитарных наук НИУ ВШЭ состоится II научная конференция студентов и аспирантов «TERRA HOMINIS – 2024».
Конференцию откроет пленарное заседание, которое будет сопровождаться 13 секциями, отражающими основные направления…
Конференцию откроет пленарное заседание, которое будет сопровождаться 13 секциями, отражающими основные направления…
❤4💘3🔥1
Forwarded from Системный Блокъ
Виртуальный визит в Помпеи: как архитектура управляет нашим вниманием
Можно ли проанализировать взаимодействие человека и архитектурной среды? И причём тут ГИС и айтрекинг? Рассказываем, как люди ходят в гости к древним римлянам в VR-очках, чтобы лучше понять культуру и повседневную жизнь античного города.
Кратко: о чем статья?
Исследователи из Швеции предложили новый подход к проблеме визуального воздействия среды на человека. Их метод основан на совмещении географических информационных систем (ГИС, об их использовании историками мы уже рассказывали) и айтрекинга. Они уверены: то, как современный зритель смотрит на древнюю среду, поможет лучше понять культуру и повседневную жизнь древнего города Помпеи.
Участники проекта гуляли по трёхмерной модели помпейского дома в VR-очках. Полученные данные переносились в ГИС, благодаря чему стало ясно, как распределялось зрительное внимание. Например, его точно привлекали скульптурные изображения предков или божеств. А эротические фрески располагались таким образом, чтобы большую часть дня оставаться в тени — эффект визуального воздействия мог зависеть и от положения солнца в то или иное время суток.
Эти данные открывают новые возможности для анализа взаимодействия человека с архитектурной средой и выявляют истинную роль того или иного элемента в общем ансамбле здания — кому и когда он был доступен для обозрения, на какое время выставлялся на показ и когда был спрятан от посторонних глаз.
Подробнее об исследовании и о том, что и откуда можно было увидеть в воссозданном доме — в полной версии статьи.
Время чтения: 8 минут.
🤖 «Системный Блокъ» @sysblok
Можно ли проанализировать взаимодействие человека и архитектурной среды? И причём тут ГИС и айтрекинг? Рассказываем, как люди ходят в гости к древним римлянам в VR-очках, чтобы лучше понять культуру и повседневную жизнь античного города.
Кратко: о чем статья?
Исследователи из Швеции предложили новый подход к проблеме визуального воздействия среды на человека. Их метод основан на совмещении географических информационных систем (ГИС, об их использовании историками мы уже рассказывали) и айтрекинга. Они уверены: то, как современный зритель смотрит на древнюю среду, поможет лучше понять культуру и повседневную жизнь древнего города Помпеи.
Участники проекта гуляли по трёхмерной модели помпейского дома в VR-очках. Полученные данные переносились в ГИС, благодаря чему стало ясно, как распределялось зрительное внимание. Например, его точно привлекали скульптурные изображения предков или божеств. А эротические фрески располагались таким образом, чтобы большую часть дня оставаться в тени — эффект визуального воздействия мог зависеть и от положения солнца в то или иное время суток.
Эти данные открывают новые возможности для анализа взаимодействия человека с архитектурной средой и выявляют истинную роль того или иного элемента в общем ансамбле здания — кому и когда он был доступен для обозрения, на какое время выставлялся на показ и когда был спрятан от посторонних глаз.
Подробнее об исследовании и о том, что и откуда можно было увидеть в воссозданном доме — в полной версии статьи.
Время чтения: 8 минут.
Please open Telegram to view this post
VIEW IN TELEGRAM
Системный Блокъ
Айтрекинг в восприятии архитектурной среды
Как проанализировать восприятие архитектурной среды с помощью айтрекинга, 3D-моделирования и ГИС? Узнаем в новом материале «Системного Блока».
❤8
RAntiquity
Когда что-то говоришь вслух, особенно публично, всегда есть риск сказать глупость. И когда в комментариях к этому посту @aGricolaMZ указал мне на то, что результат Кейзера воспроизводится, только если забыть об объеме выборки, было неловко. С другой стороны, как мы знаем от Сократа, кто молчит, чтобы сойти за умного, тот остается один на один со своим невежеством. Если бы не этот пост, я бы не получила письма от самого Пауля Кейзера, в котором он подтверждает наблюдения ученейшего коллеги и тем самым дает мне урок быть внимательнее в задачках — а когда это невозможно, уметь признавать свою неправоту. Уважаю.
❤15💯6👏4👍2
А мы добавим, что в этом году в шортлисте несколькими именами
По ссылке можно нас (или кого-то еще) поддержать, чтобы мы и дальше вдохновенно радовали вас чем-нибудь таким эдаким.
В общем, вот наши номинации:
Борис Орехов (руководитель программы), Russian-European literary relations of the 18th century – https://dataverse.pushdom.ru/dataset.xhtml?persistentId=doi:10.31860/openlit-2023.4-B003
Диана Есаян (выпускница программы), Direct Speech Extractor – https://github.com/diana-esaian/direct-speech-extractor-ru
Ольга Алиева (преподаватель программы), Computer text analysis with R – https://locusclassicus.github.io/text_analysis_2023/
Борис Орехов, Identifying the style by a qualified reader on a short fragment of generated poetry – https://arxiv.org/abs/2306.02771
Борис Орехов, Calendarium Romanum – https://vk.com/calendariumromanum
ℹ️ Не забудьте поделиться информацией с друзьями: голосовать могут все, вне зависимости от академического статуса и отношения к DH.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
DH CLOUD
🎉А вот ежегодная выставка достижения цифрового гуманитарного хозяйства. Можно проголосовать за то, что понравилось, а можно просто полюбоваться. Номинации:
✨Best DH Data Vizualizations
✨Best DH Dataset
✨Best DH Short Publication
✨Best DH Tool
✨Best DH Training…
✨Best DH Data Vizualizations
✨Best DH Dataset
✨Best DH Short Publication
✨Best DH Tool
✨Best DH Training…
❤🔥6🔥4🍾3
Это мартовское утро я провожу, пытаясь добыть текст речи Лисия “Против Эратосфена” из #xml.
В Perseus нужный мне текст хранится под тегом
Если так и оставить, то слова δʼ add. Scaliger тоже извлекутся, а мне они не нужны. Вот так это работает:
Чинится просто:
Можно перезаписать файл:
В 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
👍9❤4
Forwarded from aGricolaMZ
❤5
RAntiquity
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
Forwarded from Vox mediaevistae
В следующую среду в 16.30 по московскому времени (20.30 по Красноярску) состоится заседание семинара «Цифровая среда», на котором я расскажу про автоматическую транскрипцию рукописей. Это будет обзорное выступление, на котором я обрисую историю распознавания печатного и рукописного текста, опишу пайплайн распознавания рукописи (способы добычи изображения; его сегментация на зоны (на примере kraken и YOLO рассмотрим два подхода: семантическую сегментацию и обнаружение объектов); сегментация на строки (здесь тоже поговорим про несколько подходов: paths, baselines, bounding boxes); сама транскрипция) и скажу несколько слов про то, как «улучшить» полученную транскрипцию (в частности, про свежие эксперименты с трансформерами).
Дискутантом выступит Глеб Шмидт, который великолепно разбирается и в тематическом моделировании, и в факторном анализе, и в стилометрии, и в HTR.
Чтобы послушать и присоединиться к дискуссии, нужно зарегистрироваться здесь.
Дискутантом выступит Глеб Шмидт, который великолепно разбирается и в тематическом моделировании, и в факторном анализе, и в стилометрии, и в HTR.
Чтобы послушать и присоединиться к дискуссии, нужно зарегистрироваться здесь.
dhri.timepad.ru
«Автоматическая транскрипция рукописей: подходы, инструменты, проблемы». Доклад С.А.Яцык на семинаре „Цифровая среда“ DHRI@SFU…
27 марта 2024 года в 16:30 (msk) / 20:30 (krsk) состоится очередное заседание научно-методического семинара «Цифровая среда» Института цифровых гуманитарных исследований (DHRI) Сибирского федерального университета. На семинаре выступит Светлана Александровна…
🔥11👍4❤1
Дело в том, что результат кластеризации зависит от нескольких параметров:
Иногда добавление или удаление буквально одного слова меняет структуру дерева. Поэтому бывает необходимо сравнить разные деревья. Выше мы уже видели один способ это сделать — консенсусное дерево. Но оно дает уже результат обобщения, а иногда интересно посмотреть на исходные деревья, сопоставить их попарно.
Для этого удобно построить 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 реализована достаточно специфическая процедура бутстрепа (повторных выборок).
Вот что пишут разработчики:
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
В этом году темы проектов посвящены исследованию деколонизации музеев, индвидиуального стиля Платона, особенностям советского кинопроката, библиографии детской литературы, наскальной живописи, многобразию лингвистики как науки и сохранению цифровой памяти.
Регистрация по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤1
Если изучить изнанку функции 🦍
Что делает машинка, когда вы заказываете у нее консенсусное дерево? Принимает на входе матрицу с 1 … N столбцами, в которых хранится частотность для слов. Потом отбирает первые сколько-то слов (скажем, сотню или сколько скажете), считает расстояние, строит на основе матрицы расстояний дерево, складывает его в корзинку. Потом берет следующую сотню слов, считает расстояние, строит дерево, складывает в корзинку… Ну вы поняли. Получается букет деревьев.
Звучит как итерация, а такие задачи в R решаются при помощи цикла
Запускаем ее 4 раза при помощи map, получаем список из 4-х деревьев. Тем же🪄
Так можно построить и 100, и 1000 деревьев, попробуйте. О том, что с ними делать дальше — чуть позже. #филогенетика
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
rdrr.io
stylo source: R/stylo.R
R/stylo.R defines the following functions: stylo
❤6
На результат стилометрического исследования древнегреческих текстов может влиять не только жанр и тема (как у нормальных людей), но и особенности кодировки, диалекта и даже неприятная издательская практика писать по-разному несобственные дифтонги (т.е. дифтонги с первым долгим гласным).
Как объяснить машине, что iota adscriptum и iota subscriptum — это одно и то же? И к автору не имеет никакого отношения. Для гласных, которые всегда долгие, можно настроить автозамену. Вот мое решение:
А вот с альфой так поступить не получится, потому что αι не всегда можно заменить на ᾳ. В раздумьях.
#regex
Как объяснить машине, что iota adscriptum и iota subscriptum — это одно и то же? И к автору не имеет никакого отношения. Для гласных, которые всегда долгие, можно настроить автозамену. Вот мое решение:
library(stringr)
ortho_fix <- function(string) { string %>% str_replace_all( c("ῶι"="ῷ", "ωι"="ῳ", "ὧι"="ᾧ", "ὦι"="ᾦ", "ηι"="ῃ", "ῆι"="ῇ", "ἦι"="ᾖ", "ἧι"="ᾗ")) }
test_string <- c("ἑκάστωι ἔργωι καὶ πράγματι", "σὺν πολλῶι χρόνωι", "καὶ τῆι ἐξ ὀλίγου χρόνου εὐδοξίαι")
test_string %>% ortho_fix()
А вот с альфой так поступить не получится, потому что αι не всегда можно заменить на ᾳ. В раздумьях.
#regex
🤝6❤3👍1
RAntiquity
На результат стилометрического исследования древнегреческих текстов может влиять не только жанр и тема (как у нормальных людей), но и особенности кодировки, диалекта и даже неприятная издательская практика писать по-разному несобственные дифтонги (т.е. дифтонги…
За модой следить некогда. Следим за типографскими конвенциями. Этих значит тоже надо добавить в
ortho_fix()🙈5😱2