User:Skagedal/Footnote-to-ref

A script to convert the article Schizophrenia from using for references to using.

The results are here. I'm not really happy yet. Why does it start on number 2??


 * 1) !/usr/bin/python
 * 2) Replaces / with / according to a map
 * 3) Usage: Give the input on stdin, and you'll get output on stdout.
 * 1) Usage: Give the input on stdin, and you'll get output on stdout.
 * 1) Usage: Give the input on stdin, and you'll get output on stdout.

import sys, re

re_fn = re.compile('\{\{fn\|([0-9]+)\}\}', re.I) re_fnb = re.compile('\{\{fnb\|([0-9]+)\}\}', re.I)
 * 1) Use these regular expressions for enwiki


 * 1) Use these for svwiki
 * 2) re_fn = re.compile('\{\{fotnot\|([0-9]+)\}\}', re.I)
 * 3) re_fnb = re.compile('\{\{fotnotText\|([0-9]+)\|\}\}', re.I)

content = sys.stdin.read


 * 1) Define map for Schizophrenia article, as of
 * 2) http://en.wikipedia.org/w/index.php?title=Schizophrenia&oldid=31483882

map = { 1: "evans_et_al_2003", 2: "kraepelin_1907", 3: "turner_1999", 4: "bertelsen_2002", 5: "verdoux_van_os_2002", 6: "tsuang_et_al_2000", 7: "mcgorry_et_al_1995", 8: "read_2004", 9: "torrey_et_al_1994", 10: "koskenvuo_et_al_1984", 11: "hoeffer_pollin_1970", 12: "harrison_owen_2003", 13: "schifman_et_al_2002", 14: "bebbington_kuipers_1994", 15: "nielsen_et_al_1987", 16: "macmillan_et_al_2001", 17: "schenkel_et_al_2005", 18: "janssen_et_al_2004", 19: "van_os_2004", 20: "sundquist_et_al_2004", 21: "davies_et_al_2003", 22: "susser_et_al_1996", 23: "huttunen_niskanen_1978", 24: "read_et_al_2001", 25: "meyer-lindenberg_et_al_2002", 26: "healy_2002", 27: "konradi_heckers_2003", 28: "coyle_et_al_2003", 29: "johnstone_et_al_1976", 30: "flashman_green_2004", 31: "green_2001", 32: "spencer_et_al_2004", 33: "lewis_et_al_2005", 34: "goldner_et_al_2002", 35: "ustun_et_al_1999", 36: "leucht_et_al_2003", 37: "potkin_et_al_2003", 38: "cormac_et_al_2002", 39: "zimmerman_et_al_2005", 40: "wykes_et_al_2002", 41: "kulhara_1994", 42: "harding_et_al_1987", 43: "whitaker_2001", 44: "hannerz_2001", 45: "radomsky_et_al_1999", 46: "caldwell_gottesman_1990", 47: "arseneault_et_al_2004a", 48: "arseneault_et_al_2004b", 49: "hansen_atchinson_ed_2000", 50: "zammit_et_al_2003", 51: "walsh_et_al_2004", 52: "simpson_et_al_2004", 53: "fazel_grann_2004", 54: "leong_silva_2003", 55: "fitzgerald_et_al_2005", 56: "crow_1997", 57: "polimeni_reiss_2002", 58: "torrey_yolken_2003", 59: "lahti_et_al_2001" }


 * 1) First check that the map is sane, i.e., every ref-ID is unique

if len(map) != len(set(map.values)): sys.stderr.write("Dude, you have duplicates.\n") sys.exit(1)


 * 1) Change all footnotes in string s.  Returns the changed string.

def change_footnotes(re, template, s): match = re.search(s) if match: fnum = int(match.group(1)) pre = s[:match.start] post = change_footnotes(re, template, s[match.end:]) if not map.has_key(fnum): sys.stderr.write("no entry for " + str(fnum)) return pre + template % "???" + post return pre + template % map[fnum] + post else: return s

content = change_footnotes(re_fn, "", content) content = change_footnotes(re_fnb, "# ", content)
 * 1) replace fn with ref
 * 1) replace fnb with note

print change_footnotes(re_fn, "ref", change_footnotes (re_fnb, "note", content))