Уикипедия:БПЦ
БПЦ е уикипедиански проект, който има за цел създаването и подобряването на данните, свързани с организацията и обектите, свързани с Българската православна църква в България, в свободната интернет енциклопедия Уикипедия.
Административно деление
редактиранеЕпархия
редактиране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
Заявка, изкарваща справка за пълнотата на понастоящем попълнените данни за епархиите:
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
Индивиди
редактиранеРелации
редактиранеОт общ характер
редактиране- екземпляр на (P31)
- държава (P17)
- епархия (P708)
- located in the religious territorial entity (P5607)
- религия (P140)
- разположение на централното управление (P159)
- епархия (P708)
- наименуван на (P138)
- светец покровител (P417)
- в административно-териториалната единица (P131)
- официален уебсайт (P856)
- географски координати (P625)
- cathedral (P1885)
- председател (P488)
Свързани с OSM
редактиранеOpenStreetMap (OSM)
редактиранеOpenStreetMap (OSM) е безплатен и отворен проект за създаване на карта на света, която може да бъде редактирана от всеки. Той използва данни, събрани от доброволци с помощта на GPS устройства, въздушни снимки и други свободно достъпни източници. Основната цел на OSM е да предостави подробна, актуална и свободно достъпна географска информация, която може да бъде използвана от всеки за различни цели, включително навигация, анализи и изследвания.
Тагове
редактиранеВсеки обект в OSM е характеризиран чрез един или повече тагове. Таговете се състоят от ключ и стойност. Синтаксисът е key=value.
- amenity=place_of_worship
- amenity monastery
- building=church
- wikidata=
- boundary = religious_administration
Пълен списък с налични тагове в OSM може да бъде достъпен тук.
Уики страници
редактиране- https://overpass-turbo.eu/s/1Jyq
- https://wiki.openstreetmap.org/wiki/Tag:amenity%3Dplace_of_worship
- https://wiki.openstreetmap.org/wiki/Tag:boundary%3Dreligious_administration
Overpass
редактиране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) и автоматично ще бъде генерирана заявка.
Python API
редактиранеЧрез библиотеката overpy да се използва API, чрез което да се пускат заявки в Python среда. Резултатите лесно могат да бъдат записани в pandas data frame. Пример със същата заявка, предоставяща таблица със всички религиозни обекти в София или в България: overpy Demo
Допълване на в административно-териториалната единица (P131) за църковни обекти
редактиранеЗадача: Да се измисли ГИС подход, с който да се напълнят релациите в административно-териториалната единица (P131) на църквите и манастирите.
187 обекта нямат в административно-териториалната единица (P131) но имат географски координати (P625) според тази заявка
Общините в България WDQ
Вадим полигони от OSM използвайки резултатите на горната заявка и следната услуга https://polygons.openstreetmap.fr/get_wkt.py?id=1934707¶ms=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 заявки за релевантинте тагове