1

我正在尝试将书中的名称与欧洲风格的名称相匹配。OCR 的工作一般,所以姓氏大写这一事实很重要。但是,可以有多个姓氏,例如 Luc ASSELIN DE WILLIENCOURT 或 Marie-Sophie DUFAU-RICHET。

我想出了以下解决方案,但我确信有更好的方法,我想知道是否有人可以做得更好......为了便于阅读,我将正则表达式分成了几行......

names = regex.compile("[\p{Lu}][\p{Ll}]+
                     (?:[\p{Pd}][\p{Lu}][\p{Ll}]+ | )
                     (?:[\p{Lu}][\p{Lu}'\p{Pd}]*)
                     (?: [\p{Lu}][\p{Lu}'\p{Pd}]*){0,5}", flag=regex.UNICODE)

ntest = ['Michèle DUBROCARD magistrate', ' Marie-Sara durur Marie-  Sara.Durur@justice.gouv.fr Tél. : 01 70 22 41 71', 
'Jean-Pierre KELCHE, général d\'armée','ÉriC LE CLERCQ DE LANNOY', 'ÉriC LE CLERCQ DE LANNOY, fucker',
 'Éric LE CLERCQ DE LANNOY shlaphead', "john smith proctologist", 'John smith     Proctolog', 'john smith, proctolog', "N...", "GHESTEM", "Bill linebreaker,"
"his honorable Baron VAN BULL and her hc Marie-Eunice DELAGARDE"]

for i in range(0, len(ntest)):
    print(regex.findall(names,ntest[i]))

这产生了我想要的结果,但它非常难看。有更好的解决方案吗?

4

1 回答 1

1

我不能说我理解你的正则表达式为什么起作用,所以我的第一个建议是使用 re.VERBOSE 标志并稍微记录你的正则表达式(http://docs.python.org/library/re.html#re .详细)。

我不知道这是复制粘贴错误,但是当您将正则表达式拆分为多行时,您应该使用三引号。

哦,使用原始字符串 ( r""" ... """)。

于 2012-08-08T06:20:04.847 回答