# coding=utf-8 import re import os import pprint from collections import OrderedDict from bs4 import BeautifulSoup TEMPLATE = """\ import re from collections import OrderedDict data = """ TEMPLATE_END = """\ for lang, grps in data.iteritems(): for grp in grps.iterkeys(): if data[lang][grp]["pattern"]: data[lang][grp]["pattern"] = re.compile(data[lang][grp]["pattern"]) """ SZ_FIX_DATA = { "eng": { "PartialWordsAlways": { u"°x°": u"%", u"compiete": u"complete", u"Âs": u"'s", u"ÃÂs": u"'s", u"a/ion": u"ation", u"at/on": u"ation", u"l/an": u"lian", u"lljust": u"ll just", u" L ": u" I ", u" l ": u" I ", u"'sjust": u"'s just", u"'tjust": u"'t just", }, "WholeWords": { u"I'11": u"I'll", u"III'll": u"I'll", u"Tun": u"Run", u"pan'": u"part", u"al'": u"at", u"a re": u"are", u"wail'": u"wait", u"he)'": u"hey", u"he)\"": u"hey", u"He)'": u"Hey", u"He)\"": u"Hey", u"He)’": u"Hey", u"Yea h": u"Yeah", u"yea h": u"yeah", u"h is": u"his", u" 're ": u"'re ", u"LAst": u"Last", u"forthis": u"for this", u"Ls": u"Is", u"Iam": u"I am", u"Ican": u"I can", }, "PartialLines": { u"L know": u"I know", u"L should": u"I should", u"L do": u"I do", u"L would": u"I would", u"L could": u"I could", u"L can": u"I can", u"L happen": u"I happen", u"L might": u"I might", u"L have ": u"I have", u"L had": u"I had", u"L want": u"I want", u"L was": u"I was", u"L am": u"I am", u"L will": u"I will", u"L suggest": u"I suggest", u"L think": u"I think", u"L reckon": u"I reckon", u"L like": u"I like", u"L love": u"I love", u"L don't": u"I don't", u"L didn't": u"I didn't", u"L wasn't": u"I wasnt't", u"L haven't": u"I haven't", u"L couldn't": u"I couldn't", u"L won't": u"I won't", u"H i": u"Hi", }, "BeginLines": { u"l ": u"I ", u"L ": u"I ", } }, "nld": { "PartialWordsAlways": { u"ט": u"è", u"י": u"é", u"כ": u"ë", u"צ": u"ë", u"ן": u"ï", u"ף": u"ó", u"א": u"à", u"Iֻ": u"I", u"č": u"è", u"פ": u"o", u"ם": u"i", }, }, "swe": { "PartialWordsAlways": { u"ĺ": u"å", u"Ĺ": u"Å", } } } SZ_FIX_DATA_GLOBAL = { } if __name__ == "__main__": cur_dir = os.path.dirname(os.path.realpath(__file__)) xml_dir = os.path.join(cur_dir, "xml") file_list = os.listdir(xml_dir) data = {} for fn in file_list: if fn.endswith("_OCRFixReplaceList.xml"): lang = fn.split("_")[0] soup = BeautifulSoup(open(os.path.join(xml_dir, fn)), "xml") fetch_data = ( # group, item_name, pattern ("WholeLines", "Line", None), ("WholeWords", "Word", lambda d: (ur"(?um)(\b|^)(?:" + u"|".join([re.escape(k) for k in d.keys()]) + ur')(\b|$)') if d else None), ("PartialWordsAlways", "WordPart", None), ("PartialLines", "LinePart", lambda d: (ur"(?um)(?:(?<=\s)|(?<=^)|(?<=\b))(?:" + u"|".join([re.escape(k) for k in d.keys()]) + ur")(?:(?=\s)|(?=$)|(?=\b))") if d else None), ("BeginLines", "Beginning", lambda d: (ur"(?um)^(?:"+u"|".join([re.escape(k) for k in d.keys()]) + ur')') if d else None), ("EndLines", "Ending", lambda d: (ur"(?um)(?:" + u"|".join([re.escape(k) for k in d.keys()]) + ur")$") if d else None,), ) data[lang] = dict((grp, {"data": OrderedDict(), "pattern": None}) for grp, item_name, pattern in fetch_data) for grp, item_name, pattern in fetch_data: for grp_data in soup.find_all(grp): for line in grp_data.find_all(item_name): data[lang][grp]["data"][line["from"]] = line["to"] # add our own dictionaries if lang in SZ_FIX_DATA and grp in SZ_FIX_DATA[lang]: data[lang][grp]["data"].update(SZ_FIX_DATA[lang][grp]) if grp in SZ_FIX_DATA_GLOBAL: data[lang][grp]["data"].update(SZ_FIX_DATA_GLOBAL[grp]) if pattern: data[lang][grp]["pattern"] = pattern(data[lang][grp]["data"]) f = open(os.path.join(cur_dir, "data.py"), "w+") f.write(TEMPLATE) f.write(pprint.pformat(data, width=1)) f.write(TEMPLATE_END) f.close()