Как правильно извлечь различные форматы даты из текста в Python - PullRequest
2 голосов
/ 05 июня 2019

Мне нужно извлечь все доступные даты из PDF-файла, а затем проверить даты, являющиеся датой контракта.

Для этого сначала я хочу извлечь все даты в тексте, которые я извлек из PDF. Теперь Даты могут быть в различных форматах . Я попытался добавить все ароматы дат в приведенном ниже примере.

Я пытался использовать Datefinder Python module , чтобы извлечь все даты. Хотя он близок, но изначально выдает несколько мусорных дат, а также не соответствует первой дате .

import datefinder

dateContent = """ Test
I want to apply for leaves August,​ ​11,​ ​2017 I want to apply for leaves Aug, 23, 2017 I want to apply for leaves Aug, 21, 17 
I want to apply for leaves August 20 2017
I want to apply for leaves August 30th, 2017 I want to apply for leaves August 31st 17
I want to apply for leaves 8/26/2017 I want to apply for leaves 8/27/17
I want to apply for leaves 28/8/2017 I want to apply for leaves 29/8/17 I want to apply for leaves 30/08/17
I want to apply for leaves 15 Jan 17 I want to apply for leaves 14 January 17
I want to apply for leaves 13 Jan 2017
I want to apply for leaves Jan 10 17 I want to apply for leaves Jan 11 2017 I want to apply for leaves January 12 2017
"""

matches = datefinder.find_dates(dateContent)

for match in matches:
    print(match)

Ответ:

2019-08-05 00: 00: 00

2019-06-11 00: 00: 00

2017-06-05 00: 00: 00

2017-08-23 00: 00: 00

2017-08-21 00: 00: 00

2017-08-20 00: 00: 00

2017-08-30 00: 00: 00

2017-08-31 00: 00: 00

2017-08-26 00: 00: 00

2017-08-27 00: 00: 00

2017-08-28 00: 00: 00

2017-08-29 00: 00: 00

2017-08-30 00: 00: 00

2017-01-15 00: 00: 00

2017-01-14 00: 00: 00

2017-01-13 00: 00: 00

2017-01-10 00: 00: 00

2017-01-11 00: 00: 00

2017-01-12 00: 00: 00

Как видите, у меня есть 17 таких объектов Date, но я получаю 19. Проверяя снизу, последние 16 соответствуют правильно. Тогда есть эти первоначальные Мусор. Как только я получу эти Даты правильно, я смогу перейти на какую-то модель N-Gram, чтобы проверить, какой контекст Даты относится к информации о контрактах.

Любая помощь в решении проблемы была бы отличной.

Ответы [ 2 ]

2 голосов
/ 05 июня 2019

Я решил проблему.На самом деле в моем текстовом контенте была некоторая проблема с кодировкой.

dateContent = dateContent.replace(u'\u200b', '')

Замена \ u200b пустым символом исправила проблему.Модуль Datefinder выполняет всю работу по поиску всех различных форматов даты.

0 голосов
/ 05 июня 2019

Это исследование корпуса. Вы должны проверить свои данные на предмет чередования в строках даты и времени и попытаться найти собственное настроенное регулярное выражение для них. Если вы используете ресурс на естественном языке, а не какой-то сгенерированный системой текст с четкими образцами для определения даты, вы никогда не получите 100-процентного отзыва и точности. Это всегда компромисс.

...