БПЦ е уикипедиански проект, който има за цел създаването и подобряването на данните, свързани с организацията и обектите, свързани с Българската православна църква в България, в свободната интернет енциклопедия Уикипедия.

Административно деление

редактиране

Wikidata: Eastern Orthodox eparchy (Q60176300)

Епархията е най-високото ниво на административно делене. Всяка епархия се управлява от епископ, чието седалище се помещава в катедрала.

Българската православна църква понастоящем има 13 вътрешни епархии (в страната), 2 външни епархии – за българите в чужбина.

Заявка, показваща списък с всички епархии:

select ?x ?xLabel {
  ?x wdt:P31 wd:Q60176300 ; 
     wdt:P361 wd:Q242758 ;
     .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "bg". }
  filter not exists {?x wdt:P576 [] }
} order by ?xLabel

Изпълни заявката в Уикиданни

TAB таблица с епархиите

Заявка, изкарваща справка за пълнотата на понастоящем попълнените данни за епархиите:

SELECT (COUNT(?item) AS ?item_count)
(sum(?image_count) as ?image_count_sum)
(sum(?religion_count) as ?religion_sum)
(sum(?chairperson_count) as ?chairperson_sum)
(sum(?country_count) as ?country_sum)
(sum(?cathedral_count) as ?cathedral_sum)
(sum(?headquarters_loc_count) as ?headquarters_loc_sum)
(sum(?official_website_count) as ?official_website_sum) {
  ?item wdt:P31 wd:Q60176300 ; 
        wdt:P361 wd:Q242758 .
  OPTIONAL { ?item wdt:P18 ?image. }  bind(if(bound(?image),1,0) as ?image_count)
  OPTIONAL { ?item wdt:P140 ?religion. }  bind(if(bound(?religion),1,0) as ?religion_count)
  OPTIONAL { ?item wdt:P488 ?chairperson. }  bind(if(bound(?chairperson),1,0) as ?chairperson_count)
  OPTIONAL { ?item wdt:P17 ?country. }  bind(if(bound(?country),1,0) as ?country_count)
  OPTIONAL { ?item wdt:P1885 ?cathedral. }  bind(if(bound(?cathedral),1,0) as ?cathedral_count)
  OPTIONAL { ?item wdt:P159 ?headquarters_loc. }  bind(if(bound(?headquarters_loc),1,0) as ?headquarters_loc_count)
  OPTIONAL { ?item wdt:P856 ?official_website. }  bind(if(bound(?official_website),1,0) as ?official_website_count)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "bg". }
  FILTER NOT EXISTS {?item wdt:P576 [] }
}

Изпълни заявката в Уикиданни

Духовна Околия

редактиране

Wikidata: Духовна околия (Q125350820) WDQ

По-ниското ниво на административно делене е духовната околия (всяка духовна околия е част от дадена епархия). Духовните околии в България са 71 на брой. Детайлна информация за тях може да се прегледа в TAB таблицата.

Заявка, показваща списък с всички духовни околии:

SELECT ?x ?xLabel WHERE {
  ?x wdt:P31 wd:Q125350820;
    wdt:P361 wd:Q242758.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "bg". }
  FILTER(NOT EXISTS { ?x wdt:P576 _:b2. })
}
ORDER BY (?xLabel)

Изпълни заявката в Уикиданни

Заявка, изкарваща справка за пълнотата на понастоящем попълнените данни за духовните околии (към момента данните са пълни):

SELECT (COUNT(?item) AS ?item_count) 
(sum(?religion_count) as ?religion_sum)
(sum(?country_count) as ?country_sum)
(sum(?diocese_count) as ?diocese_sum)
(sum(?headquarters_loc_count) as ?headquarters_loc_sum) WHERE {
  ?item wdt:P31 wd:Q125350820;
    wdt:P361 wd:Q242758.
  OPTIONAL { ?item wdt:P140 ?religion. }  bind(if(bound(?religion),1,0) as ?religion_count)
  OPTIONAL { ?item wdt:P17 ?country. }  bind(if(bound(?country),1,0) as ?country_count)
  OPTIONAL { ?item wdt:P708 ?diocese. }  bind(if(bound(?diocese),1,0) as ?diocese_count)
  OPTIONAL { ?item wdt:P159 ?headquarters_loc. }  bind(if(bound(?headquarters_loc),1,0) as ?headquarters_loc_count)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "bg". }
  FILTER(NOT EXISTS { ?item wdt:P576 _:b2. })
}

Изпълни заявката в Уикиданни

TAB таблица с духовните околии в Уикиданни

Edit groups:

Църковни Обекти

редактиране

Всеки църковен обект попада в границите на определена духовна околия и съответно - епархия.

Заявка, извеждаща всички църковни обекти в България

SELECT ?church 
?churchLabel 
?eparchyLabel 
?type 
?typeLabel 
?ecclesiasticalEntityLabel 
?religionLabel 
?headquartersLabel 
?namedAfterLabel 
?locatedInATELabel 
?websiteLabel 
?locationLabel 
?osm_rel 
?osm_way
?osm_node
?osm_tag_key
WHERE {
  values ?type {
     wd:Q16970
     wd:Q44613
     wd:Q2977 
  }
  ?church wdt:P31 ?type;
    wdt:P17 wd:Q219.
  OPTIONAL { ?church wdt:P708 ?eparchy. }
  OPTIONAL { ?church wdt:P5607 ?ecclesiasticalEntity. }
  OPTIONAL { ?church wdt:P140 ?religion. }
  OPTIONAL { ?church wdt:P159 ?headquarters. }
  OPTIONAL { ?church wdt:P138 ?namedAfter. }
  OPTIONAL { ?church wdt:P131 ?locatedInATE. }
  OPTIONAL { ?church wdt:P856 ?website. }
  OPTIONAL { ?church wdt:P625 ?location. }
  OPTIONAL { ?church wdt:P402 ?osm_rel }
  OPTIONAL { ?church wdt:P10689 ?osm_way  } 
  OPTIONAL { ?church wdt:P11693 ?osm_node  }
  OPTIONAL { ?church wdt:P1282 ?osm_tag_key  }
  
  SERVICE wikibase:label { bd:serviceParam wikibase:language "bg,en". }
}

Изпълни заявката в Уикиданни

Wikidata: църква (Q16970) WDQ COUNTS (TODO finish!) TAB

Брой попълнени данни относно църквите (COUNTS Finished):

SELECT (count(?church) as ?church_count) (sum(?eparchy_count) as ?eparchy_count_sum) (sum(?ecclesiasticalEntity_count) as ?ecclesiasticalEntity_sum) 
(sum(?religion_count) as ?religion_sum)  (sum(?headquarters_count) as ?headquarters_sum) (sum(?namedAfter_count) as ?namedAfter_sum)
(sum(?locatedInATE_count) as ?locatedInATE_count_sum) (sum(?website_count) as ?website_count_sum) (sum(?location_count) as ?location_count_sum)
WHERE {
  ?church wdt:P31 wd:Q16970;
    wdt:P17 wd:Q219.
  OPTIONAL { ?church wdt:P708 ?eparchy.} bind(if(bound(?eparchy),1,0) as ?eparchy_count) 
  OPTIONAL { ?church wdt:P5607 ?ecclesiasticalEntity. } bind(if(bound(?ecclesiasticalEntity),1,0) as ?ecclesiasticalEntity_count) 
  OPTIONAL { ?church wdt:P140 ?religion. } bind(if(bound(?religion),1,0) as ?religion_count) 
  OPTIONAL { ?church wdt:P159 ?headquarters. } bind(if(bound(?headquarters),1,0) as ?headquarters_count) 
  OPTIONAL { ?church wdt:P138 ?namedAfter. } bind(if(bound(?namedAfter),1,0) as ?namedAfter_count) 
  OPTIONAL { ?church wdt:P131 ?locatedInATE. } bind(if(bound(?locatedInATE),1,0) as ?locatedInATE_count) 
  OPTIONAL { ?church wdt:P856 ?website. } bind(if(bound(?website),1,0) as ?website_count) 
  OPTIONAL { ?church wdt:P625 ?location. } bind(if(bound(?location),1,0) as ?location_count) 
  SERVICE wikibase:label { bd:serviceParam wikibase:language "bg,en". }

Изпълни заявката в Уикиданни

Заявка за всички църкви - списък:

SELECT ?church ?churchLabel ?eparchyLabel ?ecclesiasticalEntityLabel ?religionLabel ?headquartersLabel ?namedAfterLabel ?locatedInATELabel ?websiteLabel ?locationLabel WHERE {
  ?church wdt:P31 wd:Q16970;
    wdt:P17 wd:Q219.
  OPTIONAL { ?church wdt:P708 ?eparchy. }
  OPTIONAL { ?church wdt:P5607 ?ecclesiasticalEntity. }
  OPTIONAL { ?church wdt:P140 ?religion. }
  OPTIONAL { ?church wdt:P159 ?headquarters. }
  OPTIONAL { ?church wdt:P138 ?namedAfter. }
  OPTIONAL { ?church wdt:P131 ?locatedInATE. }
  OPTIONAL { ?church wdt:P856 ?website. }
  OPTIONAL { ?church wdt:P625 ?location. }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "bg,en". }
}

Изпълни заявката в Уикиданни

Манастири

редактиране

Wikidata: манастир (Q44613) WDQ

Заявка за всички манастири:

SELECT ?item ?itemLabel ?eparchy ?ecclesiasticalEntity ?religion ?headquarters ?namedAfter ?locatedInATE ?website ?location ?image ?wiki 
WHERE {
 ?item wdt:P31 wd:Q44613;
       wdt:P17 wd:Q219;
  OPTIONAL { ?item wdt:P708 ?eparchy. }
  OPTIONAL { ?item wdt:P5607 ?ecclesiasticalEntity. }
  OPTIONAL { ?item wdt:P140 ?religion. }
  OPTIONAL { ?item wdt:P159 ?headquarters. }
  OPTIONAL { ?item wdt:P138 ?namedAfter. }
  OPTIONAL { ?item wdt:P131 ?locatedInATE. }
  OPTIONAL { ?item wdt:P856 ?website. }
  OPTIONAL { ?item wdt:P625 ?location. }
  OPTIONAL { ?item wdt:P18 ?image. }       
  OPTIONAL {?wiki schema:about ?item ; schema:isPartOf <https://bg.wikipedia.org/> }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "bg". }
}

Изпълни заявката в Уикиданни

Заявка за всички попълнени данни относно манастирите - COUNTS

SELECT (count(?item) as ?item_count)  (sum(?eparchy_count) as ?eparchy_count_sum) (sum(?ecclesiasticalEntity_count) as ?ecclesiasticalEntity_sum)
(sum(?religion_count) as ?religion_sum)  (sum(?headquarters_count) as ?headquarters_sum) (sum(?namedAfter_count) as ?namedAfter_sum)
(sum(?locatedInATE_count) as ?locatedInATE_count_sum) (sum(?website_count) as ?website_count_sum) (sum(?location_count) as ?location_count_sum) 
(sum(?image_count) as ?image_count_sum) (sum(?wiki_count) as ?wiki_count_sum)
WHERE {
 ?item wdt:P31 wd:Q44613;
       wdt:P17 wd:Q219;
  OPTIONAL { ?item wdt:P708 ?eparchy. }  bind(if(bound(?eparchy),1,0) as ?eparchy_count) 
  OPTIONAL { ?item wdt:P5607 ?ecclesiasticalEntity. }  bind(if(bound(?ecclesiasticalEntity),1,0) as ?ecclesiasticalEntity_count) 
  OPTIONAL { ?item wdt:P140 ?religion. }  bind(if(bound(?religion),1,0) as ?religion_count) 
  OPTIONAL { ?item wdt:P159 ?headquarters. }   bind(if(bound(?headquarters),1,0) as ?headquarters_count) 
  OPTIONAL { ?item wdt:P138 ?namedAfter. }  bind(if(bound(?namedAfter),1,0) as ?namedAfter_count) 
  OPTIONAL { ?item wdt:P131 ?locatedInATE. }  bind(if(bound(?locatedInATE),1,0) as ?locatedInATE_count) 
  OPTIONAL { ?item wdt:P856 ?website. }  bind(if(bound(?website),1,0) as ?website_count) 
  OPTIONAL { ?item wdt:P625 ?location. }  bind(if(bound(?location),1,0) as ?location_count) 
  OPTIONAL { ?item wdt:P18 ?image. }  bind(if(bound(?image),1,0) as ?image_count)      
  OPTIONAL {?wiki schema:about ?item ; schema:isPartOf <https://bg.wikipedia.org/> } bind(if(bound(?wiki),1,0) as ?wiki_count) 
  SERVICE wikibase:label { bd:serviceParam wikibase:language "bg". }
}

Изпълни заявката в Уикиданни

Катедрали

редактиране

Wikidata: Катедрала (Q2977) WDQ

Заявка за всички катедрали:

SELECT ?item ?itemLabel ?eparchy ?ecclesiasticalEntity ?religion ?headquarters ?namedAfter ?locatedInATE ?website ?location WHERE {
 ?item wdt:P31/wdt:P279* wd:Q2977;
     wdt:P17 wd:Q219;
      OPTIONAL { ?item wdt:P708 ?eparchy. }
  OPTIONAL { ?item wdt:P5607 ?ecclesiasticalEntity. }
  OPTIONAL { ?item wdt:P140 ?religion. }
  OPTIONAL { ?item wdt:P159 ?headquarters. }
  OPTIONAL { ?item wdt:P138 ?namedAfter. }
  OPTIONAL { ?item wdt:P131 ?locatedInATE. }
  OPTIONAL { ?item wdt:P856 ?website. }
  OPTIONAL { ?item wdt:P625 ?location. }
       
  SERVICE wikibase:label { bd:serviceParam wikibase:language "bg". }
}

Изпълни заявката в Уикиданни

Заявка за всички попълнени данни относно катедралите (COUNTS):

SELECT (count(?item) as ?item_count) (sum(?eparchy_count) as ?eparchy_count_sum) (sum(?ecclesiasticalEntity_count) as ?ecclesiasticalEntity_sum)
(sum(?religion_count) as ?religion_sum)  (sum(?headquarters_count) as ?headquarters_sum) (sum(?namedAfter_count) as ?namedAfter_sum)
(sum(?locatedInATE_count) as ?locatedInATE_count_sum) (sum(?website_count) as ?website_count_sum) (sum(?location_count) as ?location_count_sum) 
 WHERE {
 ?item wdt:P31/wdt:P279* wd:Q2977;
     wdt:P17 wd:Q219;
      OPTIONAL { ?item wdt:P708 ?eparchy. }  bind(if(bound(?eparchy),1,0) as ?eparchy_count) 
  OPTIONAL { ?item wdt:P5607 ?ecclesiasticalEntity. }  bind(if(bound(?ecclesiasticalEntity),1,0) as ?ecclesiasticalEntity_count) 
  OPTIONAL { ?item wdt:P140 ?religion. }  bind(if(bound(?religion),1,0) as ?religion_count) 
  OPTIONAL { ?item wdt:P159 ?headquarters. }   bind(if(bound(?headquarters),1,0) as ?headquarters_count) 
  OPTIONAL { ?item wdt:P138 ?namedAfter. }  bind(if(bound(?namedAfter),1,0) as ?namedAfter_count) 
  OPTIONAL { ?item wdt:P131 ?locatedInATE. }  bind(if(bound(?locatedInATE),1,0) as ?locatedInATE_count) 
  OPTIONAL { ?item wdt:P856 ?website. }  bind(if(bound(?website),1,0) as ?website_count) 
  OPTIONAL { ?item wdt:P625 ?location. }  bind(if(bound(?location),1,0) as ?location_count) 
       
  SERVICE wikibase:label { bd:serviceParam wikibase:language "bg". }
}

Изпълни заявката в Уикиданни

  • Обща Бройка [1]

Извличане на данни от Wikidata чрез Python

редактиране

Съществува библиотека (SPARQLWrapper), чрез която могат да бъдат изпълнявани SPARQL заявки в Python среда. По този начин лесно могат да бъдат заредени данни от Wikidata за последваща обработка.

Същата заявка, представена по-рано (тази, която извлича списък с всички църковни обекти), може да бъде изпълнена чрез SPARQLWrapper: SPARQLWrapper Demo

Индивиди

редактиране

От общ характер

редактиране

Свързани с OSM

редактиране

OpenStreetMap (OSM)

редактиране

OpenStreetMap (OSM) е безплатен и отворен проект за създаване на карта на света, която може да бъде редактирана от всеки. Той използва данни, събрани от доброволци с помощта на GPS устройства, въздушни снимки и други свободно достъпни източници. Основната цел на OSM е да предостави подробна, актуална и свободно достъпна географска информация, която може да бъде използвана от всеки за различни цели, включително навигация, анализи и изследвания.

Всеки обект в OSM е характеризиран чрез един или повече тагове. Таговете се състоят от ключ и стойност. Синтаксисът е key=value.

  • amenity=place_of_worship
  • amenity monastery
  • building=church
  • wikidata=
  • boundary = religious_administration

Пълен списък с налични тагове в OSM може да бъде достъпен тук.

Уики страници

редактиране

Overpass Turbo е уеб-базиран инструмент за изпълнение на заявки към Overpass API, който позволява на потребителите да извличат и визуализират данни от OpenStreetMap (OSM). С помощта на Overpass Turbo, потребителите могат лесно да създават, изпълняват и редактират Overpass QL заявки, за да получат специфична географска информация от OSM. Инструментът предоставя интуитивен интерфейс с карта, където резултатите от заявките могат да бъдат прегледани и анализирани.

Примерни заявки

редактиране

Tърсене на елемент по wiki-data таг (в примера търсим Храм-паметник „Свети Александър Невски“ (Q43282)):

nwr["wikidata"="Q43282"];
// Output
out body;
>;
out skel qt;

https://overpass-turbo.eu/s/1Jyt

Заявка, предоставяща таблица със всички религиозни обекти в София или в България:

[out:csv(::id, ::lat, ::lon, ::type, name, "name:en","name:bg",wikidata,religion,building,website,denomination ; true; ",")][timeout:90];
// relation(4283101); //София
relation(186382); //България
map_to_area -> .a;
nwr["amenity"="place_of_worship"](area.a);
// Output
out body;
>;
out skel qt;

https://overpass-turbo.eu/s/1Kbu

Автоматизирани заявки чрез Wizard

редактиране

Натиснете "Wizard" бутона над прозореца за писане на заявки. В прозорчето напишете key=value (например: amenity=hospital) и автоматично ще бъде генерирана заявка.

Чрез библиотеката overpy да се използва API, чрез което да се пускат заявки в Python среда. Резултатите лесно могат да бъдат записани в pandas data frame. Пример със същата заявка, предоставяща таблица със всички религиозни обекти в София или в България: overpy Demo

Задача: Да се измисли ГИС подход, с който да се напълнят релациите в административно-териториалната единица (P131) на църквите и манастирите.

187 обекта нямат в административно-териториалната единица (P131) но имат географски координати (P625) според тази заявка

Общините в България WDQ

Вадим полигони от OSM използвайки резултатите на горната заявка и следната услуга https://polygons.openstreetmap.fr/get_wkt.py?id=1934707&params=0

Малко е бавно защото трябва да се викне два пъти. Един път да генерира полигона и втори път да го даде. Веднъж генериран го име кеширан за следващи заявки

За тестване на WKT литерали може да се ползва openstreetmap-wkt-playground

Сравняване и допълване на данни - OSM и wikidata

редактиране

Общо описание на проблема

редактиране

OSM и wikidata са много богати складове на информация. Съществуват обаче разминавания в пълнотата на връзките между обектите в двете платформи. Целта на тази задача е всеки църковен обект от едната платформа да съдържа идентификатор към своя образ в другата платформа. Съществуват няколко нива на пълнота, които могат да се обособят по следния начин:

  • Ниво 0: Това е идеалният случай, в който обектът съшествува и в wikidata, и в OSM, и също така в във всяка от двете платформи е налично id-то на същия този обект от другата платфортма. Няма нужда от последващо действие.
  • Ниво 1а: Обектът съществува в двете платформи. В wikidata не е налично OSM id, но в OSM е налично wikidata id. Нужно е да се добави OSM id в wikidata платформата.
  • Ниво 1б: Обектът съществува в двете платформи. В wikidata е налично OSM id, но в OSM не е налично wikidata id. Нужно е да се добави wikidata id в OSM платформата.
  • Ниво 2: Обектът съществува в двете платформи. В wikidata не е налично OSM id и в OSM не е налично wikidata id. Нужно е да се добави wikidata id в OSM платформата и OSM id в wikidata платформата.
  • Ниво 3а: Обектът съществува единствено в OSM. В wikidata не е налично OSM id и в OSM не е налично wikidata id. Нужно е да се създаде обектът в wikidata. Трябва и да се добави wikidata id в OSM платформата и OSM id в wikidata платформата.
  • Ниво 3б: Обектът съществува единствено в wikidata. В wikidata не е налично OSM id и в OSM не е налично wikidata id. Нужно е да се създаде обектът в OSM. Трябва и да се добави wikidata id в OSM платформата и OSM id в wikidata платформата.
  • Ниво 4: Обектът не съществува в никоя платформа, но съществува в истинския свят. Обектът трябва да се добави в платформите ръчно и да се навържат id-тата.
  • Ниво 5: Обектът не съществува в истинския свят и трябва да се построи. :)

ВАЖНО е дa се коментира методологията, по която обектите биват асоциирани със своите образи в другата платформа (важи за нива 1 и 2). Най-ефективно е да се използва алгоритъм, включващ асоциация по географвски координати (географска дължина и географска ширина) и съвпадение на имена. В идеалния случай координатите на даден обект в OSM и в wikidata биха съвпадали, но повечето пъти те имат известни отклонения и това трябва да се отчете в алгоритъма.

Примерен алгоритъм за напасване на данни (важи за нивата до ниво 2 включително)

редактиране

Описание на наборите от данни, използвани в алгоритъма.

редактиране

Набор от данни №1: wiki_data

Налични колони в wiki_data:

  • 'id_wiki_in_wikidata' - wikidata id на обекта, налично в прилежащата му wikidata страница.
  • 'name_wikidata' - име на обекта в прилежащата му wikidata страница.
  • 'lon_wikidata' - географска дължина на местонахождението на обекта в прилежащата му wikidata страница.
  • 'lat_wikidata' - географска ширина на местонахождението на обекта в прилежащата му wikidata страница.
  • 'id_osm_in_wikidata' - Open Street Map id на обекта, налично в прилежащата му wikidata страница.

Набор от данни №2: overpass_data

Налични колони в overpass_data:

  • 'id_osm_in_overpass' - OSM id на обекта, налично в прилежащата му OSM страница.
  • 'name_overpass' - име на обекта в прилежащата му OSM страница.
  • 'lon_overpass' - географска дължина на местонахождението на обекта в прилежащата му OSM страница.
  • 'lat_overpass' - географска ширина на местонахождението на обекта в прилежащата му OSM страница.
  • 'id_wiki_in_overpass' - wikidata id на обекта, налично в прилежащата му OSM страница.
  • 'type_overpass' - тип на обекта в OSM (node, way, relation).

Алгоритъм за напасване на данните (Python):

редактиране

This algorithm matches records from two dataframes, wiki_data and overpass_data, based on geographic coordinates and name similarity.

1. Geographic Proximity Check: The algorithm calculates the Euclidean distance between the coordinates of each wiki_row and osm_row. If the distance is less than or equal to 1 km, the rows are considered potential matches.

2. Name Similarity Check: Using the fuzzywuzzy library, it checks if the names have a similarity score of at least 80%. If both criteria are met, the rows are matched. The name similarity algorithm used is called the Levenshtein Distance algorithm, implemented via the 'fuzz.token_sort_ratio' function from the 'fuzzywuzzy' library. This algorithm measures the similarity between two strings by calculating the minimum number of single-character edits (insertions, deletions, or substitutions) required to change one string into the other. The token_sort_ratio variant specifically tokenizes the strings, sorts them, and then calculates the similarity, making it more robust to differences in word order.

# Function to calculate the Euclidean distance in kilometers
def euclidean_distance(lat1, lon1, lat2, lon2):
    lat1, lon1, lat2, lon2 = float(lat1), float(lon1), float(lat2), float(lon2)
    return np.sqrt((lat1 - lat2)**2 + (lon1 - lon2)**2) * 111  # Convert degrees to kilometers

# Function to match names using fuzzy matching
def match_names(name, choices, scorer, cutoff=80):
    match = process.extractOne(name, choices, scorer=scorer, score_cutoff=cutoff)
    return match[0] if match else None

# Drop rows with NaN values in coordinates
wiki_data_clean = wiki_data.dropna(subset=['lat_wikidata', 'lon_wikidata']).copy()
overpass_data_clean = overpass_data.dropna(subset=['lat_overpass', 'lon_overpass']).copy()

# Create a new DataFrame for storing matched rows
matched_data = pd.DataFrame(columns=list(wiki_data.columns) + list(overpass_data.columns))

# Track matched osm_rows to avoid duplication
matched_osm_indices = set()

# Adding proximity and name similarity matching
matches = []
for i, wiki_row in wiki_data_clean.iterrows():
    for j, osm_row in overpass_data_clean.iterrows():
        if j in matched_osm_indices:
            continue  # Skip already matched osm_row
        distance = euclidean_distance(wiki_row['lat_wikidata'], wiki_row['lon_wikidata'],
                                      osm_row['lat_overpass'], osm_row['lon_overpass'])
        if distance <= 1:
            match_name = match_names(wiki_row['name_wikidata'], [osm_row['name_overpass']], fuzz.token_sort_ratio, cutoff=80)
            if match_name:
                combined_row = {**wiki_row.to_dict(), **osm_row.to_dict()}
                matches.append(combined_row)
                matched_osm_indices.add(j)  # Mark osm_row as matched
                break  # Move to the next wiki_row after finding a match

matched_data = pd.concat([matched_data, pd.DataFrame(matches)], ignore_index=True)
  • Да се напълнят обектите, отговарящи за духовните околии, в Уикиданни
    • Да се създаде обект тип (клас) отговарящ на „Духовна околия“
    • Да се създадат и напълнят обектите с OpenRefine
    • На ръка да се оправят описанията където са сгрешени от TAB таблицата
    • На ръка да се закачат съществуващите Уики страници към новите обекти и да се слеят тези за които вече има уикидата обект
  • Да се извадят и разгледат съществуващите обекти от тип Църква, катедрала или манастир
    • Всяка Епархия тряба да си има катедрала вързана с cathedral (P1885)
  • Да се напишат заявки които да броят за всеки тип колко са популирани релациите
  • Да се измисли ГИС подход, с който да се напълнят релациите в административно-териториалната единица (P131) на църквите и манастирите.
  • Да се измисли подход с който да се свържат сградите от в ОСМ и тези от WD с правилните релации и двупосочно.
  • Да се ссъздадат overpass заявки за релевантинте тагове