我有20,000多个法庭文件我想提取特定数据点:日期,文件编号,判决。我正在使用Python和Regex来执行此操作。
判决书有三种语言(德语,法语和意大利语),其中一些语言格式略有不同。我正在尝试为各种数据点开发函数,这些数据点考虑到这些和不同的语言。
我发现我的功能非常笨拙。有没有人有更多的pythonic方式来开发这些功能?
def gericht(doc):
Gericht = re.findall(
r"Beschwerde gegen [a-z]+ [A-Z][a-züöä]+ ([^\n\n]*)", doc)
Gericht1 = re.findall(
r"Beschwerde nach [A-Za-z]. [0-9]+ [a-z]+. [A-Z]+ [a-z]+ [a-z]+[A-Za-z]+ [a-z]+ [0-9]+. [A-Za-z]+ [0-9]+ ([^\n\n]*)", doc)
Gericht2 = re.findall(
r"Revisionsgesuch gegen das Urteil ([^\n\n]*)", doc)
Gericht3 = re.findall(
r"Urteil des ([^\n\n]*)", doc)
Gericht_it = re.findall(
r"ricorso contro la sentenza emanata il [0-9]+ [a-z]+ [0-9]+ [a-z]+ ([^\n\n]*)", doc)
Gericht_fr = re.findall(
r"recours contre l'arrêt ([^\n\n]*)", doc)
Gericht_fr_1 = re.findall(
r"recours contre le jugement ([^\n\n]*)", doc)
Gericht_fr_2 = re.findall(
r"demande de révision de l'arrêt ([^\n\n]*)", doc)
try:
if Gericht != None:
return Gericht[0]
except:
None
try:
if Gericht1 != None:
return Gericht1[0]
except:
None
try:
if Gericht2 != None:
return Gericht2[0]
except:
None
try:
if Gericht3 != None:
return Gericht3[0]
except:
None
try:
if Gericht_it != None:
return Gericht_it[0]
except:
None
try:
if Gericht_fr != None:
Gericht_fr = Gericht_fr[0].replace('de la ', '').replace('du ', '')
return Gericht_fr
except:
None
try:
if Gericht_fr_1 != None:
Gericht_fr_1 = Gericht_fr_1[0].replace('de la ', '').replace('du ', '')
return Gericht_fr_1
except:
None
try:
if Gericht_fr_2 != None:
Gericht_fr_2 = Gericht_fr_2[0].replace('de la ', '').replace('du ', '')
return Gericht_fr_2
except:
None
答案 0 :(得分:0)
re.findall()
的结果是从不 None
,因此测试此内容的所有if
语句都是多余的。然后当你想要第一个结果时使用findall()
没有意义。
法语结果中的替换可能会删除太多。例如,'du '
替换不只是删除 du 这个词,还会影响 du 的结尾。
def gericht(doc):
for pattern, is_french in [
(r'Beschwerde gegen [a-z]+ [A-Z][a-züöä]+ ([^\n]*)', False),
(
r'Beschwerde nach [A-Za-z]. [0-9]+ [a-z]+. [A-Z]+ [a-z]+'
r' [a-z]+[A-Za-z]+ [a-z]+ [0-9]+. [A-Za-z]+ [0-9]+ ([^\n]*)',
False
),
(r'Revisionsgesuch gegen das Urteil ([^\n]*)', False),
(r'Urteil des ([^\n]*)', False),
(
r'ricorso contro la sentenza emanata il [0-9]+ [a-z]+ [0-9]+'
r' [a-z]+ ([^\n]*)',
False
),
(r"recours contre l'arrêt ([^\n]*)", True),
(r'recours contre le jugement ([^\n]*)', True),
(r"demande de révision de l'arrêt ([^\n]*)", True),
]:
match = re.search(pattern, doc)
if match:
result = match.group(1)
if is_french:
for removable in [' de la ', ' du ']:
result = result.replace(removable, ' ')
return result
return None