From 42744884109a52419e3063a80461b1ce72f52d59 Mon Sep 17 00:00:00 2001 From: Dmitry Kokorin Date: Fri, 25 Sep 2026 22:39:01 +0300 Subject: [PATCH] =?UTF-8?q?authors:=20wiki-anchor=20audit=20=E2=80=94=201?= =?UTF-8?q?=20wrong=20QID=20fixed=20(Homer:=20Q327970=3DUzhevych=20?= =?UTF-8?q?=E2=86=92=20Q6691),=209=20wikipedia=20URLs=20normalized=20to=20?= =?UTF-8?q?wikidata,=20tools/audit=5Fanchors.py=20(all-language=20label=20?= =?UTF-8?q?match)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- authors/czaplicka-marie.md | 2 +- authors/dieckmann-hans.md | 2 +- authors/ellenberger-henri.md | 2 +- authors/hillman-james.md | 2 +- authors/homer.md | 2 +- authors/jacobi-jolande.md | 2 +- authors/jung-emma.md | 2 +- authors/kast-verena.md | 2 +- authors/solms-mark.md | 2 +- authors/stevens-anthony.md | 2 +- data/anchor-audit.tsv | 171 +++++++++++++++++++++++++++++++++++ tools/audit_anchors.py | 129 ++++++++++++++++++++++++++ 12 files changed, 310 insertions(+), 10 deletions(-) create mode 100644 data/anchor-audit.tsv create mode 100644 tools/audit_anchors.py diff --git a/authors/czaplicka-marie.md b/authors/czaplicka-marie.md index 6bb260b..bf4c7f5 100644 --- a/authors/czaplicka-marie.md +++ b/authors/czaplicka-marie.md @@ -1,5 +1,5 @@ # Czaplicka, Marie Antoinette [— (to verify; 1884-1939 per memory)] -**Wiki anchor:** Q532804 (https://en.wikipedia.org/wiki/Maria_Czaplicka) +**Wiki anchor:** Q532804 (https://www.wikidata.org/wiki/Q532804) **Dates:** 1884-1921 (Q532804; d. 1921 plane crash) **Field / identity:** British ethnographer (Siberian shamanism); *Aboriginal Siberia* (Clarendon 1914) diff --git a/authors/dieckmann-hans.md b/authors/dieckmann-hans.md index 4460356..218a0a6 100644 --- a/authors/dieckmann-hans.md +++ b/authors/dieckmann-hans.md @@ -1,5 +1,5 @@ # Hans Dieckmann -**Wiki anchor:** Q59526701 (https://de.wikipedia.org/wiki/Hans_Dieckmann) +**Wiki anchor:** Q59526701 (https://www.wikidata.org/wiki/Q59526701) - **EN name:** Hans Dieckmann - **Dates:** 1921-2007 (Q59526701) diff --git a/authors/ellenberger-henri.md b/authors/ellenberger-henri.md index 6496c08..857f394 100644 --- a/authors/ellenberger-henri.md +++ b/authors/ellenberger-henri.md @@ -1,5 +1,5 @@ # Henri F. Ellenberger -**Wiki anchor:** Q115111 (https://en.wikipedia.org/wiki/Henri_F._Ellenberger) +**Wiki anchor:** Q115111 (https://www.wikidata.org/wiki/Q115111) **Dates:** 1905-1993 (Q115111) **RU name (candidates):** Элленбергер, Генри (std translit) diff --git a/authors/hillman-james.md b/authors/hillman-james.md index 68232af..4966412 100644 --- a/authors/hillman-james.md +++ b/authors/hillman-james.md @@ -1,5 +1,5 @@ # James Hillman -**Wiki anchor:** Q934774 (https://en.wikipedia.org/wiki/James_Hillman) +**Wiki anchor:** Q934774 (https://www.wikidata.org/wiki/Q934774) **Dates:** 1926-2011 (Q934774) **RU name (candidates):** Хиллман, Джеймс (std translit) diff --git a/authors/homer.md b/authors/homer.md index 4443cc4..9d00606 100644 --- a/authors/homer.md +++ b/authors/homer.md @@ -1,5 +1,5 @@ # Гомер (Homer) -**Wiki anchor:** Q327970 (https://www.wikidata.org/wiki/Q327970) — Homer the poet (top hit Q19826483 = given name, wrong) +**Wiki anchor:** Q6691 (https://www.wikidata.org/wiki/Q6691) — Homer, reputed author of the Iliad and the Odyssey (2026-09-25: прежний Q327970 = Иван Ужевич — ошибка, исправлено) - **EN name:** Homer [ca. 8th c. BC] - **RU name (RSL query):** «Гомер» diff --git a/authors/jacobi-jolande.md b/authors/jacobi-jolande.md index ecd78a7..4467203 100644 --- a/authors/jacobi-jolande.md +++ b/authors/jacobi-jolande.md @@ -1,5 +1,5 @@ # Jolande Székács Jacobi -**Wiki anchor:** Q88022 (https://en.wikipedia.org/wiki/Jolande_Jacobi) +**Wiki anchor:** Q88022 (https://www.wikidata.org/wiki/Q88022) **Dates:** 1890-1973 (Q88022) **RU name (candidates):** Джакоби, Иооланде (std translit) diff --git a/authors/jung-emma.md b/authors/jung-emma.md index 5b9bb3d..8cc032d 100644 --- a/authors/jung-emma.md +++ b/authors/jung-emma.md @@ -1,6 +1,6 @@ # Jung, Emma [1882-1955] -**Wiki anchor:** Q124210 (https://en.wikipedia.org/wiki/Emma_Jung) — Emma Marie Jung (née Rauschenbach) +**Wiki anchor:** Q124210 (https://www.wikidata.org/wiki/Q124210) — Emma Marie Jung (née Rauschenbach) **Dates:** 1882-1955 (Q124210: b. 1882-03-30 Schaffhausen, d. 1955-11-27) **RU name (candidates):** Юнг, Эмма (std translit) diff --git a/authors/kast-verena.md b/authors/kast-verena.md index 97299bb..422ea5d 100644 --- a/authors/kast-verena.md +++ b/authors/kast-verena.md @@ -1,6 +1,6 @@ # Kast, Verena [1943-] -**Wiki anchor:** Q2515260 (https://en.wikipedia.org/wiki/Verena_Kast) — b. 1943-01-24 Wolfhalden, Appenzell +**Wiki anchor:** Q2515260 (https://www.wikidata.org/wiki/Q2515260) — b. 1943-01-24 Wolfhalden, Appenzell **Dates:** 1943- (Q2515260; some RU/shop sources say 1951 — WRONG, official vita + Wikidata: 1943) **Field / identity:** Swiss (German-speaking) Jungian analyst, professor at UZH; father = Walter Kast (farmer) — **NOT** daughter of Hans Kast (correction 2026-09-24, source: verena-kast.ch/vita). Flagship EN titles: diff --git a/authors/solms-mark.md b/authors/solms-mark.md index 676cb60..9eac0ae 100644 --- a/authors/solms-mark.md +++ b/authors/solms-mark.md @@ -1,5 +1,5 @@ # Mark Solms -**Wiki anchor:** Q1382575 (https://en.wikipedia.org/wiki/Mark_Solms) +**Wiki anchor:** Q1382575 (https://www.wikidata.org/wiki/Q1382575) - **EN name:** Mark Solms - **Dates:** 1961- (Q1382575) diff --git a/authors/stevens-anthony.md b/authors/stevens-anthony.md index 9138aa3..7249ea4 100644 --- a/authors/stevens-anthony.md +++ b/authors/stevens-anthony.md @@ -1,5 +1,5 @@ # Anthony Stevens -**Wiki anchor:** Q2852971 (https://en.wikipedia.org/wiki/Anthony_Stevens) +**Wiki anchor:** Q2852971 (https://www.wikidata.org/wiki/Q2852971) **Dates:** 1933-2023 (Q2852971; obits give 1937/2020 — wd canonical) **RU name (candidates):** Стивенс, Энтони (std translit) diff --git a/data/anchor-audit.tsv b/data/anchor-audit.tsv new file mode 100644 index 0000000..ecfe139 --- /dev/null +++ b/data/anchor-audit.tsv @@ -0,0 +1,171 @@ +file en_name qid wd_en wd_ru wd_desc status url_ok +authors/abt-theodor.md Theodor Abt Q1510620 Theodor Abt Теодор Абт Swiss psychologist OK Y +authors/acton-mary.md Mary Acton Q112486938 Mary Acton OK Y +authors/adams-michael-vannoy.md Adams, Michael Vannoy NO-ANCHOR +authors/adler-gerard.md Gerard Adler NO-ANCHOR +authors/afanasev-alexander.md Афанасьев, Александр Николаевич Q325004 Alexander Afanasyev Александр Николаевич Афанасьев Russian folklorist, collector of folk tales (1826-1871) OK Y +authors/aizenstat-stephen.md Stephen Aizenstat NO-ANCHOR +authors/alex-william.md William Alex NO-ANCHOR +authors/amann-ruth.md Ruth Ammann NO-ANCHOR +authors/artemidorus.md Artemidorus of Daldis Q445848 Artemidorus Артемидор Далдианский Greek professional diviner (2nd century) OK Y +authors/bach-susan.md Susan R. Bach NO-ANCHOR +authors/baratoff-nathalie.md Nathalie Baratoff NO-ANCHOR +authors/baring-anne.md Anne Baring Q75439292 Anne Crerar McGillivray Peerage person ID=142389 MISMATCH Y +authors/barrett-deirdre.md Deirdre Barrett Q5252549 Deirdre Barrett American psychologist OK Y +authors/benedict-ruth.md Benedict, Ruth ] Q228822 Ruth Benedict Рут Бенедикт American anthropologist and folklorologist (1887-1948) OK Y +authors/bettelheim-bruno.md Bruno Bettelheim Q84386 Bruno Bettelheim Бруно Беттельгейм Austrian-American child psychologist and writer (1903–1990) OK Y +authors/birkhauser-oeuri-sibylle.md Sibylle Birkhäuser-Oeri NO-ANCHOR +authors/boa-fraser.md Fraser Boa Q59532345 Fraser Boa Фрейзер Боа born:1932|died:1992|; Boa, Fraser, 1932-1992; Boa, Fraser; BOA, EDWARD F; Boa, F OK Y +authors/bolander-karen.md Karen Bolander NO-ANCHOR +authors/bosnak-robert.md Robert Bosnak Q113785597 Robert Bosnak OK Y +authors/bowen-elenore-smith.md Bowen, Elenore Smith ] Q6498718 Laura Bohannan cultural anthropologist MISMATCH Y +authors/brutsche-paul.md Paul Brutsche Q6067124 Paul Brutsche OK Y +authors/budge-ea-wallis.md E. A. Wallis Budge NO-ANCHOR +authors/buhrmann-vera.md Bührmann, Vera NO-ANCHOR +authors/burland-christopher.md Christopher Burland NO-ANCHOR +authors/burleson-blake-w.md Burleson, Blake W. NO-ANCHOR +authors/cambray-joseph.md Joseph Cambray NO-ANCHOR +authors/campbell-joseph.md Joseph Campbell Q295516 Joseph Campbell Джозеф Кэмпбелл American mythologist, writer and lecturer (1904–1987) OK Y +authors/carter-linda.md Linda Carter NO-ANCHOR +authors/carter-pennington-nancy.md Nancy Carter Pennington NO-ANCHOR +authors/casement-ann.md Ann Casement NO-ANCHOR +authors/cashford-julian.md Julian Cashford NO-ANCHOR +authors/caspari-elizabeth.md Elizabeth Caspari Q61128702 Elizabeth Caspari (born 1926) OK Y +authors/corbett-lionel.md Lionel Corbett NO-ANCHOR +authors/corbin-henri.md Corbin, Henri Q467015 Henry Corbin Анри Корбен French philosopher and and scholar of Islam (1903–1978) OK Y +authors/covitz-joel.md Joel Covitz NO-ANCHOR +authors/cunningham-adrian.md Cunningham, Adrian NO-ANCHOR +authors/czaplicka-marie.md Czaplicka, Marie Antoinette ] Q532804 Maria Czaplicka Мария Чаплицкая Polish anthropologist (1884–1921) OK NOT-WIKIDATA +authors/delaney-gayle.md Gayle M. V. Delaney NO-ANCHOR +authors/dieckmann-hans.md Hans Dieckmann Q59526701 Hans Dieckmann born:1921|died:2007|; Dieckmann, Hans, 1921-....; Dieckmann, Hans 1921-2007; Die OK NOT-WIKIDATA +authors/domhoff-g-william.md G. William Domhoff NO-ANCHOR +authors/douglas-claire.md Claire Douglas Q110527560 Claire Douglas American psychologist OK Y +authors/dowson-t.md Dowson, T. ] NO-ANCHOR +authors/edinger-edward.md Edward F. Edinger Q5819984 Edward F. Edinger American psychiatrist, author (1922–1998) OK Y +authors/elder-george.md George R. Elder NO-ANCHOR +authors/eliade-mircea.md Mircea Eliade Q41590 Mircea Eliade Мирча Элиаде Romanian-American historian, writer, philosopher and professor at the University OK Y +authors/ellenberger-henri.md Henri F. Ellenberger Q115111 Henri Ellenberger Генри Элленбергер Swiss-Canadian psychiatrist (1905-1993) OK NOT-WIKIDATA +authors/estes-clarissa-pinkola.md Clarissa Pinkola Estés Q2565830 Clarissa Pinkola Estés Кларисса Пинкола Эстес American psychoanalyst and writer OK Y +authors/evers-fahey-karen.md Karen Evers-Fahey NO-ANCHOR +authors/federer-y.md Y. Federer NO-ANCHOR +authors/fischer-thomas.md Thomas Fischer NO-ANCHOR +authors/fordham-michael.md Michael Fordham NO-ANCHOR +authors/franz-marie-louise-von.md Franz, Marie-Louise von Q60236 Marie-Louise von Franz Мария-Луиза фон Франц Swiss psychologist and scholar (1915-1998) OK Y +authors/frazer-james-george.md James George Frazer Q151936 James George Frazer Джеймс Джордж Фрэзер Scottish social anthropologist (1854–1941) OK Y +authors/freud-sigmund.md Sigmund Freud Q9215 Sigmund Freud Зигмунд Фрейд Austrian psychiatrist and founder of psychoanalysis (1856–1939) OK Y +authors/frey-rohn-liliane.md Liliane Frey-Rohn NO-ANCHOR +authors/furth-gregg.md Gregg M. Furth NO-ANCHOR +authors/goldstein-ralph.md Ralph Goldstein Q124904122 Ralph Goldstein (1921-1986) OK Y +authors/grimm-jacob.md Jacob & Wilhelm Grimm Q6701 Jacob Grimm Якоб Гримм German philologist, linguist, jurist and mythologist (1785–1863) OK Y +authors/hall-jack.md Jack A. Hall NO-ANCHOR +authors/hannah-barbara.md Barbara Hannah Q2883959 Barbara Hannah Барбара Ханна English psychologist OK Y +authors/harding-m-esther.md M. Esther Harding NO-ANCHOR +authors/henderson-joseph.md Joseph L. Henderson NO-ANCHOR +authors/henzler-christa.md Christa Henzler Q113762699 Christa Henzler OK Y +authors/hill-clara.md Clara E. Hill Q90654413 Clara E. Hill American professor of psychology OK Y +authors/hill-john.md John Hill NO-ANCHOR +authors/hillman-james.md James Hillman Q934774 James Hillman Джеймс Хиллман American psychologist (1926–2011) OK NOT-WIKIDATA +authors/hoerni-ulrich.md Ulrich Hoerni Q88887981 Ulrich Hoerni OK Y +authors/homer.md Homer Q6691 Homer Гомер reputed author of the Iliad and the Odyssey OK Y +authors/hopcke-robert.md Robert H. Hopcke NO-ANCHOR +authors/hornung-erik.md Hornung, Erik Q117212 Erik Hornung Эрик Хорнунг German egyptologist (1933–2022) OK Y +authors/jacobi-jolande.md Jolande Székács Jacobi Q88022 Jolande Jacobi Иоланда Якоби Hungarian born Austrian psychologist (1890-1973) OK NOT-WIKIDATA +authors/jacobs-joseph.md Joseph Jacobs Q981949 Joseph Jacobs Джозеф Джекобс Australian folklorist, historian and writer (1854–1916) OK Y +authors/jacoby-mario.md Mario Jacoby Q5998770 Mario Jacoby (1925-2011) OK Y +authors/jaffe-anielda.md Jaffé, Aniela Q95166 Aniela Jaffé Аниэла Яффе German psychoanalyst (1903–1991) OK Y +authors/jones-richard.md Richard M. Jones NO-ANCHOR +authors/jung-carl-gustav.md Carl Gustav Jung Q41532 Carl Jung Карл Густав Юнг Swiss psychiatrist and psychotherapist (1875–1961) OK Y +authors/jung-emma.md Jung, Emma Q124210 Emma Jung Эмма Юнг psychoanalyst and writer (1882-1955) OK NOT-WIKIDATA +authors/kalff-dora.md Kalff, Dora — and Martin Kalff NO-ANCHOR +authors/kalff-martin.md Martin Kalff NO-ANCHOR +authors/kandinsky-wassily.md Kandinsky, Wassily Q61064 Wassily Kandinsky Василий Васильевич Кандинский avant-garde painter of Russian origin (1866–1944) OK Y +authors/kast-verena.md Kast, Verena Q2515260 Verena Kast Swiss professor OK NOT-WIKIDATA +authors/kaufmann-bernice.md Bernice S. Kaufmann NO-ANCHOR +authors/kelsey-morton.md Morton T. Kelsey Q97063939 Morton T. Kelsey OK Y +authors/kerenyi-karol.md Károly Kerényi NO-ANCHOR +authors/killick-katherine.md Katherine Killick Q139458311 MISMATCH Y +authors/kimbles-s-l.md Kimbles, S. L. ] NO-ANCHOR +authors/kirsch-thomas.md Kirsch, Thomas G. NO-ANCHOR +authors/kluger-rivkah-scharf.md Kluger, Rivkah Schärf Q72049066 Rivkah Schärf Kluger OK Y +authors/koch-karl.md Karl Koch NO-ANCHOR +authors/kramer-milton.md Milton Kramer NO-ANCHOR +authors/krippner-stanley.md Stanley Krippner Q4241164 Stanley Krippner Стэнли Криппнер American parapsychologist (born 1932) OK Y +authors/lambert-kenneth.md Kenneth Lambert NO-ANCHOR +authors/lammers-ann.md Lammers, Ann Conrad NO-ANCHOR +authors/lang-andrew.md Andrew Lang Q505827 Andrew Lang Эндрю Лэнг Scottish poet, novelist and literary critic (1844–1912) OK Y +authors/leach-maria.md Maria Leach Q19974818 Maria Leach American folklorist and children's writer OK Y +authors/lewis-williams-david.md Lewis-Williams, David ] Q5236554 David Lewis-Williams South African archaeologist OK Y +authors/lopez-pedraza-rafael.md Rafael López-Pedraza NO-ANCHOR +authors/luscher-max.md Lüscher, Max Q115771 Max Lüscher Макс Люшер Swiss psychotherapist (1923–2017) OK Y +authors/luthi-max.md Max Lüthi Q124980 Max Lüthi Swiss philologist and specialist in literature (1909-1991) OK Y +authors/macculloch-diarmaid.md MacCulloch, Diarmaid Q432994 Diarmaid MacCulloch British historian OK Y +authors/mackenzie-donald.md Donald A. Mackenzie NO-ANCHOR +authors/marjasch-sonja.md Sonja Marjasch Q137133010 MISMATCH Y +authors/matthews-boris.md Boris Matthews NO-ANCHOR +authors/mattoon-mary-ann.md Mary Ann Mattoon Q6003158 Mary Ann Mattoon American psychologist, psychotherapist, and Jungian analyst OK Y +authors/mcfarand-solomon-hester.md Hester McFarland-Solomon NO-ANCHOR +authors/mcnamara-patrick.md Patrick McNamara Q18720130 Patrick McNamara American neuroscientist OK Y +authors/mcniff-shaun.md Shaun McNiff Q130609831 Shaun McNiff OK Y +authors/meier-barbara.md Barbara Meier NO-ANCHOR +authors/meier-carl.md Carl A. Meier NO-ANCHOR +authors/miller-alice-englard.md born Alicja Englard NO-ANCHOR +authors/miller-jeffrey.md Jeffrey C. Miller NO-ANCHOR +authors/molton-mary.md Mary Dian Molton NO-ANCHOR +authors/moon-beverly.md Beverly Moon Q133756113 MISMATCH Y +authors/neumann-erich.md Neumann, Erich Q61171 Erich Neumann Эрих Нойманн German-Israeli writer, psychologist and philosopher (1905-1960) OK Y +authors/onians-richard.md Richard B. Onians NO-ANCHOR +authors/ottmann-klaus.md Klaus Ottmann NO-ANCHOR +authors/otto-rudolf.md Otto, Rudolf Q76748 Rudolf Otto Рудольф Отто German theologian, philosopher, and comparative religionist (1869–1937) OK Y +authors/otto-walter.md Walter Otto Q103594 Walter Otto German historian (1878–1941) OK Y +authors/ovid.md Publius Ovidius Naso Q7198 Ovid Овидий Roman poet (43 BC – 17/18 AD) OK Y +authors/papadopoulos-renos.md Renos K. Papadopoulos NO-ANCHOR +authors/pattis-zoja-eva.md Eva Pattis Zoja NO-ANCHOR +authors/peiry-lucienne.md Lucienne Peiry Q3265779 Lucienne Peiry Swiss art historian OK Y +authors/perera-sylvia-brinton.md Sylvia Brinton Perera Q56678365 Sylvia Brinton Perera Сильвия Бринтон Перера American psychologist OK Y +authors/plaut-frederick.md Frederick Plaut NO-ANCHOR +authors/radin-paul.md Paul Radin Q557443 Paul Radin Пол Радин American anthropologist (1883–1959) OK Y +authors/rees-alwyn-brinley.md Alwyn & Brinley Rees NO-ANCHOR +authors/ried-jerome.md Jerome Fried NO-ANCHOR +authors/riedel-ingrid.md Ingrid Riedel Q93435860 Ingrid Riedel German psychotherapist of the Jungian school OK Y +authors/roesler-christian.md Christian Roesler Q137004456 Christian Roesler OK Y +authors/rowland-susan.md Susan Rowland Q83013993 Susan Rowland literary scholar and Jung researcher (born 1962) OK Y +authors/rutter-virginia-beane.md Rutter, Virginia Beane NO-ANCHOR +authors/rycroft-charles.md Charles Rycroft NO-ANCHOR +authors/samuels-andrew.md Andrew Samuels Q4758499 Andrew Samuels Эндрю Самуэлс British psychologist OK Y +authors/sandars-nk.md N. K. Sandars NO-ANCHOR +authors/sanford-john.md John A. Sanford NO-ANCHOR +authors/schaverien-joy.md Schaverien, Joy Q108564247 Joy Schaverien OK Y +authors/schimmel-annemarie.md Schimmel, Annemarie Q75860 Annemarie Schimmel Аннемари Шиммель German scholar of Islam (1922-2003) OK Y +authors/scholem-gershom.md Scholem, Gershom Q138850 Gershom Scholem Гершом Шолем German-Israeli philosopher (1897–1982) OK Y +authors/schweizer-andreas.md Schweizer, Andreas NO-ANCHOR +authors/shafton-anthony.md Anthony Shafton Q133723867 MISMATCH Y +authors/shorter-brian.md Brian Shorter NO-ANCHOR +authors/shostak-margorie.md Shostak, Marjorie ] Q1241431 American anthropologist (1945-1996) MISMATCH Y +authors/sikes-l.md full name unresolved NO-ANCHOR +authors/singer-thomas.md Singer, Thomas NO-ANCHOR +authors/solms-mark.md Mark Solms Q1382575 Mark Solms Марк Солмс South African psychoanalyst and neuropsychologist OK NOT-WIKIDATA +authors/solomon-hester.md Solomon, Hester McFarland NO-ANCHOR +authors/sproul-barbara.md Barbara C. Sproul NO-ANCHOR +authors/staples-lawrence.md Lawrence H. Staples NO-ANCHOR +authors/stein-murray.md Murray Stein Q57416070 Murray B. Stein researcher ORCID id 0000-0001-9564-2871 OK Y +authors/stephenson-craig.md Craig E. Stephenson Q88290566 Craig Stephenson OK Y +authors/stevens-anthony.md Anthony Stevens Q2852971 Anthony Stevens Энтони Стивенс British psychiatrist (1933–2023) OK NOT-WIKIDATA +authors/strauch-inge.md Inge Strauch Q72929055 Inge Strauch OK Y +authors/suzuki-d-t.md Suzuki, Daisetz Teitaro Q44847 D. T. Suzuki Дайсэцу Тэйтаро Судзуки Japanese Buddhist scholar, Doctor of Letters (1870–1966) OK Y +authors/tacey-david.md Tacey, David NO-ANCHOR +authors/thomas-elizabeth-marshall.md Thomas, Elizabeth Marshall ] Q435615 Elizabeth Marshall Thomas American anthropologist and author OK Y +authors/thompson-stith.md Stith Thompson Q428220 Stith Thompson Томпсон Стит American folklorist (1885-1976) OK Y +authors/turner-victor.md Turner, Victor ] Q357480 Victor Turner Виктор Тёрнер British cultural anthropologist (1920-1983) OK Y +authors/ulanov-ann-belford.md Ann Belford Ulanov Q4766263 Ann Belford Ulanov American psychoanalyst (born 1938) OK Y +authors/ulanov-barry.md "Baruch ""Barry"" Ulanov" Q809107 Barry Ulanov American music critic (1918–2000) OK Y +authors/van-de-castle-robert.md Robert L. Van de Castle NO-ANCHOR +authors/van-der-post-laurens.md Laurens van der Post NO-ANCHOR +authors/van-gennep-arnold.md Van Gennep, Arnold ] Q385288 Arnold van Gennep Арнольд ван Геннеп French ethnographer and folklorist (1873–1957) OK Y +authors/vedfelt-ole.md Ole Vedfelt Q11797713 Ole Vedfelt Danish psychologist OK Y +authors/west-marcus.md Marcus West NO-ANCHOR +authors/whitmont-edward.md Edward C. Whitmont NO-ANCHOR +authors/wilkinson-margaret.md Margaret Wilkinson NO-ANCHOR +authors/wilmer-harry.md Harry A. Wilmer Q110435333 Harry A. Wilmer American psychiatrist (1917–2005) OK Y +authors/wolff-toni.md Toni Wolff Q105462308 Toni Wolff Holocaust victim (born 1885) OK Y +authors/zimmer-heinrich.md Heinrich Zimmer Q215922 Heinrich Zimmer Генрих Роберт Циммер German Indologist and linguist (1890–1943) OK Y +authors/zipes-jan.md Jan Zipes NO-ANCHOR diff --git a/tools/audit_anchors.py b/tools/audit_anchors.py new file mode 100644 index 0000000..22742b1 --- /dev/null +++ b/tools/audit_anchors.py @@ -0,0 +1,129 @@ +#!/usr/bin/env python3 +"""audit_anchors.py — reliable wiki-anchor audit for authors/*.md. + +For each dossier: extract H1 name, **Wiki anchor:** QID + URL, then fetch the +QID EXACTLY (wbgetentities, no search) and compare the real EN/RU label with +the dossier author. Reports: + OK — QID label matches the author + MISMATCH — QID resolves to a DIFFERENT person (wrong anchor!) + NO-ITEM — QID missing on Wikidata + URL-MISMATCH — the URL in the anchor line doesn't match the QID + NO-ANCHOR — no QID in the anchor line +Outputs data/anchor-audit.tsv + a console report. Read-only (no writes). +""" +import re, sys, time, csv, glob, os, json, urllib.parse, urllib.request + +BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +UA = {'User-Agent': 'jung-research/1.0 (personal research script)'} + +def get(params): + url = 'https://www.wikidata.org/w/api.php?' + urllib.parse.urlencode(params) + req = urllib.request.Request(url, headers=UA) + with urllib.request.urlopen(req, timeout=30) as r: + return json.loads(r.read().decode('utf-8')) + +def wb_labels(qids): + out = {} + for i in range(0, len(qids), 50): + chunk = qids[i:i+50] + d = get({'action': 'wbgetentities', 'ids': '|'.join(chunk), + 'props': 'labels|descriptions', 'languages': 'en|ru', 'format': 'json'}) + for q, e in d.get('entities', {}).items(): + if e.get('missing'): + out[q] = None + continue + out[q] = { + 'labels': {lang: v.get('value', '') for lang, v in e.get('labels', {}).items() if v.get('value')}, + 'desc': e.get('descriptions', {}).get('en', {}).get('value', ''), + } + time.sleep(1.5) + return out + +STOP = set('the and of van von de la le di du der den das st ste saint st.-'.split()) + +def tokens(name): + return {w for w in re.findall(r"[a-zа-яё']+", (name or '').lower()) if w not in STOP} + +def name_match(a, b): + """surname+given overlap test (order-agnostic, >=1 shared significant token + AND the longer name's tokens mostly covered).""" + ta, tb = tokens(a), tokens(b) + if not ta or not tb: + return False + shared = ta & tb + if not shared: + return False + # require at least the surname: the longest token shared, or 2 tokens shared + return len(shared) >= 2 or max(shared, key=len) in (max(ta, key=len), max(tb, key=len)) + +def main(): + rows = [] + qids = {} + for path in sorted(glob.glob(os.path.join(BASE, 'authors', '*.md'))): + txt = open(path, encoding='utf8').read() + h1 = re.search(r'^# (.+)$', txt, re.M) + h1 = h1.group(1).strip() if h1 else os.path.basename(path) + m = re.search(r'\*\*Wiki anchor:\*\*\s*(.+)', txt) + line = m.group(1).strip() if m else '' + qm = re.search(r'(Q\d+)', line) + um = re.search(r'\((https?://[^)\s]+)\)', line) + qid = qm.group(1) if qm else '' + url = um.group(1) if um else '' + # EN name: prefer "(...)" in H1 else H1 itself; strip dates + en = h1 + pm = re.search(r'\(([^)]+)\)\s*$', h1) + if pm and re.search(r'[a-z]', pm.group(1)): + en = pm.group(1) + en = re.sub(r'[\[\(].*?[\]\)]', ' ', en) + rows.append({'file': 'authors/' + os.path.basename(path), 'h1': h1, 'en': en.strip(), + 'qid': qid, 'url': url, 'anchor_line': line}) + if qid: + qids.setdefault(qid, []).append(rows[-1]) + print(f"parsed {len(rows)} dossiers, {len(qids)} unique QIDs", file=sys.stderr) + ents = wb_labels(sorted(qids)) + + out = os.path.join(BASE, 'data', 'anchor-audit.tsv') + with open(out, 'w', newline='', encoding='utf8') as f: + w = csv.writer(f, delimiter='\t') + w.writerow(['file', 'en_name', 'qid', 'wd_en', 'wd_ru', 'wd_desc', 'status', 'url_ok']) + for r in rows: + q = r['qid'] + if not q: + st, e = 'NO-ANCHOR', None + elif q not in ents: + st, e = 'FETCH-ERR', None + elif ents[q] is None: + st, e = 'NO-ITEM', None + else: + e = ents[q] + ok_en = (name_match(r['en'], e['labels'].get('en', '')) or name_match(r['h1'], e['labels'].get('en', '')) + or name_match(r['h1'], e['labels'].get('ru', '')) + or any(name_match(r['en'], v) or name_match(r['h1'], v) for k, v in e['labels'].items() if k not in ('en', 'ru'))) + st = 'OK' if ok_en else 'MISMATCH' + # URL check + if q and r['url']: + if r['url'].rstrip('/').endswith(q): + url_ok = 'Y' + elif 'wikidata' in r['url']: + url_ok = 'OTHER-QID' + else: + url_ok = 'NOT-WIKIDATA' + else: + url_ok = '' + w.writerow([r['file'], r['en'], q, + e['labels'].get('en', '') if e else '', e['labels'].get('ru', '') if e else '', + (e['desc'][:80] if e else ''), st, url_ok]) + r['status'], r['url_ok'], r['wd'] = st, url_ok, e + + bad = [r for r in rows if r['status'] in ('MISMATCH', 'NO-ITEM') or r['url_ok'] in ('OTHER-QID', 'NOT-WIKIDATA')] + print(f"\n=== PROBLEMS ({len(bad)}) — {out}\n") + for r in sorted(bad, key=lambda x: (x['status'], x['file'])): + e = r.get('wd') or {} + print(f"[{r['status']:10s}][{r['url_ok'] or '-':11s}] {r['file']:40s} qid={r['qid'] or '-':12s} | dossier: {r['en'][:34]:34s} | WD: {(e.get('labels',{}).get('en') or e.get('labels',{}).get('mul') or e.get('labels',{}).get('de') or '?')[:34]} / {(e.get('labels',{}).get('ru') or '')[:20]}") + stats = {} + for r in rows: + stats[r['status']] = stats.get(r['status'], 0) + 1 + print("\n=== STATS:", stats) + +if __name__ == '__main__': + main()