|
|
|
|
# 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()
|