【发布时间】:2022-01-07 14:21:33
【问题描述】:
我有一个 OCR 图像中的字符串,我需要找到一种方法来从中提取人名。 OCR 需要here is the image,结果如下:
From: Al Amri, Salim <salim.amri@gmail.com>
Sent: 25 August 2021 17:20
To: Al Harthi, Mohammed <mohd4.king@rihal.om>
Ce: Al hajri, Malik <hajri990@ocaa.co.om>; Omar, Naif <nnnn49@apple.com>
Subject: Conference Rooms Booking Details
Dear Mohammed,
As per our last discussion these are the available conference rooms available for booking along
with their rates for full day:
Room: Luban, available on 26/09/2021. Rate: $4540
Room: Mazoon, available on 04/12/2021 and 13/02/2022. Rate: $3000
Room: Dhofar. Available on 11/11/2021. Rate: $2500
Room: Nizwa. Available on 13/12/2022. Rate: $1200
Please let me know which ones you are interested so we go through more details.
Best regards,
Salim Al Amri
标题中一共有4个名字,我需要得到输出:
names = 'Al Hajri, Malik', 'Omar, Naif', 'Al Amri, Salim', 'Al Harthy, Mohammed' #desired output
但我不知道如何提取名称。我已经尝试过 RegEx 并想出了:
names = re.findall(r'(?i)([A-Z][a-z]+[A-Z][a-z][, ] [A-Z][a-z]+)', string) #regex to find names
搜索一个大写字母,然后是逗号,然后是另一个以大写字母开头的单词。它接近预期的结果,但结果如下:
names = ['Amri, Salim', 'Harthi, Mohammed', 'hajri, Malik', 'Omar, Naif', 'Luban, available', 'Mazoon, available'] #acutal result
我曾想过可能使用另一个字符串来提取房间名称并将它们从列表中排除,但我不知道如何实现这个想法。我是 RegEx 的新手,因此我们将不胜感激。提前谢谢
【问题讨论】:
-
对于您的人名提取器,它是否仅用于符合上述格式的输入?如果是这样,RegEx 就是要走的路。如果没有,这将成为一个更难的问题。
-
如果您可以保证标头将包含电子邮件,一个想法是查找出现在 <...> 表达式(电子邮件地址)旁边的任何内容
-
@BenGrossmann 是的,它总是在电子邮件旁边。我会尝试并分享结果。谢谢
-
"搜索一个大写字母,然后是一个逗号,然后是另一个以大写字母开头的单词",因此对于
van Gogh, Vincent,它无法正常工作 -
@ibarrond 是的,它只会用于相同的输入