首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dateparser库解析OCRed文件中的日期

使用dateparser库解析OCRed文件中的日期
EN

Stack Overflow用户
提问于 2021-10-24 13:00:18
回答 1查看 55关注 0票数 2

我想使用dateparser库从OCR图像中提取日期。

代码语言:javascript
复制
import dateparser
data = []
listOfPages = glob.glob(r"C:/Users/name/folder/test/*.tif")
for entry in listOfPages:
    text1 = pytesseract.image_to_string(
            Image.open(entry), lang="deu"
        )
    text = re.sub(r'\n',' ', text1)     
    date1 = re.compile(r'(Dresden(\.|,|\s+)?)(.*)', flags = re.DOTALL | re.MULTILINE)
    date = date1.search(text)
    if date:
        dates = dateparser.parse(date.group(3), date_formats=['%d %m %Y'], languages=['de'], settings={'STRICT_PARSING': True})
        
    else:
        dates = None
        if dates == None:
            dates = dateparser.parse(date.group(3), date_formats=['%d %B %Y'], locale = 'de', settings={'STRICT_PARSING': True})
        else:
            dates = None

    data.append([text, dates])
    
df0 = pd.DataFrame(data, columns =['raw_text', 'dates'])
print(df0)

为什么我收到错误: NameError:未定义名称'dates‘

更新:TypeError: Input type must be str

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-07 17:42:46

问题是您的date是一个匹配数据对象。此外,我不确定dateparser.parse是否能满足您的需求。我建议使用datefinder package从文本中提取日期。

下面是我使用的正则表达式:

代码语言:javascript
复制
\bDresden(?:[.,]|\s+)?(.*)

请参阅regex demo。它将Dresden作为一个整体进行匹配(\b是一个单词边界),(?:[.,]|\s+)?是一个非捕获的可选组,匹配,.或一个或多个空格,然后将任何零个或多个字符捕获到组1中(re.DOTALL也允许.匹配行分隔符)。

下面是Python代码片段,它似乎可以产生预期的匹配结果:

代码语言:javascript
复制
import pytesseract, dateparser, glob, re
import pandas as pd
import datefinder
from pytesseract.pytesseract import Image

imgpath = r'1.tif'
data = []
listOfPages = glob.glob(r"C:/Users/name/folder/test/*.tif")
listOfPages = [imgpath]
for entry in listOfPages:
    text = pytesseract.image_to_string(
            Image.open(entry), lang="deu"
        )

    dates = []
    date = re.search(r'\bDresden(?:[.,]|\s+)?(.*)', text, re.DOTALL)
    if date:
        dates = [t.strftime("%d %B %Y") for t in datefinder.find_dates(date.group(1))]
        #dates = dateparser.parse(date.group(1), date_formats=['%d %m %Y'], languages=['de'], settings={'STRICT_PARSING': True})

    data.append([text, dates])
    
df0 = pd.DataFrame(data, columns =['raw_text', 'dates'])
print(df0)

通过您的示例图像,我得到了

代码语言:javascript
复制
                                            raw_text                               dates
0  Sächsischer Landtag DRUCKSACHE , 1972\n2. Wahl...  [17 October 1995, 18 October 1995]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69696980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档