Skip to content

Commit 7c4290b

Browse files
author
IvAnastasia
committed
New data and orthography unifier
0 parents  commit 7c4290b

File tree

1,948 files changed

+5567231
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,948 files changed

+5567231
-0
lines changed

.DS_Store

14 KB
Binary file not shown.

.gitignore

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
.Rproj.user/*
2+
.Rproj.user
3+
*.Rproj
4+
.Rhistory
5+
.RData
6+
.Ruserdata
7+
*.~lock.*
8+
*/asya_features_dec2023.csv
9+
*/phonetics_nikita.csv
10+
*/other_ilya.csv
11+
*/lexicon_moroz_full.csv
12+
*/kostya_oblique.csv
13+
*/nastya_verb_review-2.xlsx
14+
*/NINA rutul_dialectology_merged_raw_data.xlsx
15+
*/noun_features_2023-05-25.csv
16+
*/rutul_dialectology_Maks.xlsx
17+
*/nastya_verb_review-5.xlsx
18+
*/nastya_verb_review-6.xlsx
19+
/.quarto/
20+
*/netkachev_Rutul_data.csv
21+
*/asya_features.csv
22+
*/kostya_features.csv
23+
*/nikita_phonology_3.csv
24+
*/rutul_dialectology_ilya.csv
25+
*/rutul_dialects_200.csv
26+
*/verb_2024-02-04.xlsx

001_Agreement_in_obliqueness.qmd

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
---
2+
title: "Agreement in obliqueness"
3+
author: "Asya Alekseeva"
4+
date: 2025-08-28
5+
format: html
6+
css: styles.css
7+
---
8+
9+
```{r setup, include=FALSE}
10+
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE, fig.width = 9.5)
11+
```
12+
13+
The map shows whether the form of the attributive (possessor) noun depends on the case of the head noun (agreement in obliqueness). We elicited three contexts: ‘(my) brother's knife’ (the head noun ‘knife’ is in the nominative and belongs to Gender 4), ‘I slaughtered a sheep with (my) brother's knife’ (the head noun ‘knife’ is in an oblique case and belongs to Gender 4), ‘(my) brother's dog’ (the head noun ‘dog’ is in the nominative and belongs to Gender 3). In Ikhrek and Khnov, the first contexts shows the attributive suffix *-d* (*šuˤ-d kantʼ* [brother-ATTR knife]), and -dɨ in the two other contexts *-dɨ* (*šuˤ-dɨ kantʼi-fan* [brother-ATTR knife.OBL-COMIT]; *šuˤ-dɨ χij* [brother-ATTR dog]). In other dialects the suffix *-dɨ* is used in all contexts. In (Tairova 2010) it is claimed that the same two variants of the attributive suffix are distributed depending on the gender and number of the head in Myukhrek; no details are given as to the case of the head. We cannot directly confirm this based on our data, because, for Myukhrek, the three contexts come from different consultants, so Myukhrek is not shown on the map. However, if we merge the data coming from all consultants, Myukhrek does group not with Khnov and Ikhrek but with the other dialects; and does not confirm Tairova's [-@tairova2010] account.
14+
15+
16+
## Feature Map
17+
18+
::: {.panel-tabset}
19+
20+
### Map
21+
22+
```{r}
23+
# Load data for this feature
24+
library(readr)
25+
library(dplyr)
26+
library(tidyr)
27+
library(stringr)
28+
library(lingtypology)
29+
30+
# Read the database and villages data
31+
db <- read_csv("data/database.csv", show_col_types = FALSE)
32+
villages <- read_csv("data/villages.csv", show_col_types = FALSE)
33+
34+
# Filter villages like in original script (exclude certain villages)
35+
villages4map <- villages |>
36+
filter(!(village %in% c("Kazankulak", "Novyy Borch", "Vrush", "Aran", "Khnyukh")))
37+
38+
# Create mapping data for this feature
39+
feature_data <- db |>
40+
filter(feature_id == 1) |> # Filter by feature_id
41+
filter(!is.na(value), value != "NO DATA")
42+
43+
if (nrow(feature_data) > 0 && nrow(villages4map) > 0) {
44+
# Create mapping data for this feature
45+
mapping_data <- feature_data |>
46+
mutate(value = str_split(value, " ; ")) |>
47+
unnest_longer(value) |>
48+
distinct(settlement, value) |>
49+
mutate(n = 1) |>
50+
pivot_wider(names_from = value, values_from = n, values_fill = 0) |>
51+
left_join(villages4map[,c("village","lat","lon")], by = c("settlement" = "village")) |>
52+
mutate(language = "Rutul") |>
53+
filter(!is.na(lat) & !is.na(lon))
54+
55+
if (nrow(mapping_data) > 0) {
56+
# Convert feature columns to numeric
57+
feature_cols <- setdiff(colnames(mapping_data), c("settlement","lat","lon","language"))
58+
mapping_data <- mapping_data |> mutate(across(all_of(feature_cols), as.numeric))
59+
60+
# Create sophisticated mapping approach with ALWAYS visible village names
61+
if(length(feature_cols) == 1){
62+
# single feature column - show all villages in gray, feature data in color
63+
base_map <- map.feature(languages = "Rutul",
64+
latitude = villages4map$lat,
65+
longitude = villages4map$lon,
66+
label = villages4map$village,
67+
label.position = "top",
68+
label.hide = FALSE,
69+
width = 10,
70+
color = "gray",
71+
tile = "OpenStreetMap.HOT",
72+
opacity = 0.4)
73+
74+
feature_map <- map.feature(languages = "Rutul",
75+
latitude = mapping_data$lat,
76+
longitude = mapping_data$lon,
77+
label = mapping_data$settlement,
78+
label.position = "top",
79+
label.hide = FALSE,
80+
width = 10,
81+
tile = "OpenStreetMap.HOT",
82+
features = feature_cols)
83+
84+
# Show both maps
85+
base_map
86+
feature_map
87+
} else {
88+
# multiple feature columns - use pie charts with ALWAYS visible village names
89+
base_map <- map.feature(languages = "Rutul",
90+
latitude = villages4map$lat,
91+
longitude = villages4map$lon,
92+
label = villages4map$village,
93+
label.position = "top",
94+
label.hide = FALSE,
95+
width = 10,
96+
color = "gray",
97+
tile = "OpenStreetMap.HOT",
98+
opacity = 0.4)
99+
100+
feature_map <- map.feature(languages = "Rutul",
101+
latitude = mapping_data$lat,
102+
longitude = mapping_data$lon,
103+
minichart.data = mapping_data |> select(all_of(feature_cols)),
104+
minichart = "pie",
105+
width = 3,
106+
tile = "OpenStreetMap.HOT",
107+
label = mapping_data$settlement,
108+
label.position = "top",
109+
label.hide = FALSE)
110+
111+
# Show both maps
112+
base_map
113+
feature_map
114+
}
115+
} else {
116+
cat("No geographical coordinates available for mapping.\n")
117+
}
118+
} else {
119+
cat("No data available for this feature or no village coordinates found.\n")
120+
}
121+
```
122+
123+
### Data
124+
125+
```{r}
126+
# Load required libraries
127+
library(readr)
128+
library(dplyr)
129+
library(DT)
130+
131+
# Read the database data
132+
db <- read_csv("data/database.csv", show_col_types = FALSE)
133+
134+
# Create interactive table for this feature
135+
feature_data <- db |>
136+
filter(feature_id == 1) |> # Filter by feature_id
137+
filter(!is.na(value), value != "NO DATA")
138+
139+
if (nrow(feature_data) > 0) {
140+
# Prepare data for display
141+
display_data <- feature_data |>
142+
select(settlement, value, stimuli, answer, collected) |>
143+
arrange(settlement, value)
144+
145+
# Use DT package for interactive table
146+
DT::datatable(display_data,
147+
class = "cell-border stripe",
148+
rownames = FALSE,
149+
filter = "top",
150+
options = list(pageLength = 25,
151+
autoWidth = TRUE,
152+
info = FALSE))
153+
} else {
154+
cat("No data available for this feature.\n")
155+
}
156+
```
157+
158+
:::
159+

002_Associative_plural_marking.qmd

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
---
2+
title: "Associative plural marking"
3+
author: "Asya Alekseeva"
4+
date: 2025-08-28
5+
format: html
6+
css: styles.css
7+
---
8+
9+
```{r setup, include=FALSE}
10+
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE, fig.width = 9.5)
11+
```
12+
13+
A construction consisting of a noun X denoting human with an associative plural marker means ‘X and his associates (family, etc.)’. We elicited the context ‘Rasul's (family) came’. The map shows the associative plural marking on the noun ‘Rasul’. The attested variants include: *-ar*, *-quˁner* / *-quner*, *-qun* / *-quna*, *-qušdɨbɨr*, *-ašdɨbɨr* / *-ašidbɨ*, *-ašdɨ*, *-dɨbɨr* / *-ɨdbɨ*, *-ɨbɨr*, *-(aš)dɨ bejdebɨr*.
14+
15+
16+
## Feature Map
17+
18+
::: {.panel-tabset}
19+
20+
### Map
21+
22+
```{r}
23+
# Load data for this feature
24+
library(readr)
25+
library(dplyr)
26+
library(tidyr)
27+
library(stringr)
28+
library(lingtypology)
29+
30+
# Read the database and villages data
31+
db <- read_csv("data/database.csv", show_col_types = FALSE)
32+
villages <- read_csv("data/villages.csv", show_col_types = FALSE)
33+
34+
# Filter villages like in original script (exclude certain villages)
35+
villages4map <- villages |>
36+
filter(!(village %in% c("Kazankulak", "Novyy Borch", "Vrush", "Aran", "Khnyukh")))
37+
38+
# Create mapping data for this feature
39+
feature_data <- db |>
40+
filter(feature_id == 2) |> # Filter by feature_id
41+
filter(!is.na(value), value != "NO DATA")
42+
43+
if (nrow(feature_data) > 0 && nrow(villages4map) > 0) {
44+
# Create mapping data for this feature
45+
mapping_data <- feature_data |>
46+
mutate(value = str_split(value, " ; ")) |>
47+
unnest_longer(value) |>
48+
distinct(settlement, value) |>
49+
mutate(n = 1) |>
50+
pivot_wider(names_from = value, values_from = n, values_fill = 0) |>
51+
left_join(villages4map[,c("village","lat","lon")], by = c("settlement" = "village")) |>
52+
mutate(language = "Rutul") |>
53+
filter(!is.na(lat) & !is.na(lon))
54+
55+
if (nrow(mapping_data) > 0) {
56+
# Convert feature columns to numeric
57+
feature_cols <- setdiff(colnames(mapping_data), c("settlement","lat","lon","language"))
58+
mapping_data <- mapping_data |> mutate(across(all_of(feature_cols), as.numeric))
59+
60+
# Create sophisticated mapping approach with ALWAYS visible village names
61+
if(length(feature_cols) == 1){
62+
# single feature column - show all villages in gray, feature data in color
63+
base_map <- map.feature(languages = "Rutul",
64+
latitude = villages4map$lat,
65+
longitude = villages4map$lon,
66+
label = villages4map$village,
67+
label.position = "top",
68+
label.hide = FALSE,
69+
width = 10,
70+
color = "gray",
71+
tile = "OpenStreetMap.HOT",
72+
opacity = 0.4)
73+
74+
feature_map <- map.feature(languages = "Rutul",
75+
latitude = mapping_data$lat,
76+
longitude = mapping_data$lon,
77+
label = mapping_data$settlement,
78+
label.position = "top",
79+
label.hide = FALSE,
80+
width = 10,
81+
tile = "OpenStreetMap.HOT",
82+
features = feature_cols)
83+
84+
# Show both maps
85+
base_map
86+
feature_map
87+
} else {
88+
# multiple feature columns - use pie charts with ALWAYS visible village names
89+
base_map <- map.feature(languages = "Rutul",
90+
latitude = villages4map$lat,
91+
longitude = villages4map$lon,
92+
label = villages4map$village,
93+
label.position = "top",
94+
label.hide = FALSE,
95+
width = 10,
96+
color = "gray",
97+
tile = "OpenStreetMap.HOT",
98+
opacity = 0.4)
99+
100+
feature_map <- map.feature(languages = "Rutul",
101+
latitude = mapping_data$lat,
102+
longitude = mapping_data$lon,
103+
minichart.data = mapping_data |> select(all_of(feature_cols)),
104+
minichart = "pie",
105+
width = 3,
106+
tile = "OpenStreetMap.HOT",
107+
label = mapping_data$settlement,
108+
label.position = "top",
109+
label.hide = FALSE)
110+
111+
# Show both maps
112+
base_map
113+
feature_map
114+
}
115+
} else {
116+
cat("No geographical coordinates available for mapping.\n")
117+
}
118+
} else {
119+
cat("No data available for this feature or no village coordinates found.\n")
120+
}
121+
```
122+
123+
### Data
124+
125+
```{r}
126+
# Load required libraries
127+
library(readr)
128+
library(dplyr)
129+
library(DT)
130+
131+
# Read the database data
132+
db <- read_csv("data/database.csv", show_col_types = FALSE)
133+
134+
# Create interactive table for this feature
135+
feature_data <- db |>
136+
filter(feature_id == 2) |> # Filter by feature_id
137+
filter(!is.na(value), value != "NO DATA")
138+
139+
if (nrow(feature_data) > 0) {
140+
# Prepare data for display
141+
display_data <- feature_data |>
142+
select(settlement, value, stimuli, answer, collected) |>
143+
arrange(settlement, value)
144+
145+
# Use DT package for interactive table
146+
DT::datatable(display_data,
147+
class = "cell-border stripe",
148+
rownames = FALSE,
149+
filter = "top",
150+
options = list(pageLength = 25,
151+
autoWidth = TRUE,
152+
info = FALSE))
153+
} else {
154+
cat("No data available for this feature.\n")
155+
}
156+
```
157+
158+
:::
159+

0 commit comments

Comments
 (0)