Лучший способ определить и извлечь даты из текста Python?

В рамках более крупного личного проекта, над которым я работаю, я пытаюсь отделить встроенные даты от множества текстовых источников.

Например, у меня есть большой список строк (которые обычно принимают форму английских предложений или утверждений), которые принимают различные формы:

Заседание центральной проектной комиссии Вторник 10/22 18:30

Th 9/19 LAB: последовательное кодирование (раздел 2.2)

15 декабря будет еще один для тех, кто неспособен сделать это сегодня.

Рабочая тетрадь 3 (минимальная заработная плата): срок Среда 9/18 23:59

Он будет летать 15 сентября.

Хотя эти даты совпадают с естественным текстом, ни одна из них не находится в собственно естественных языковых формах (например, нет «Встреча будет через две недели с завтрашнего дня» – все это явно).

Как у кого-то, у кого нет слишком большого опыта работы с такой обработкой, что было бы лучшим местом для начала? Я изучал такие вещи, как модуль dateutil.parser и parsedatetime , но это похоже на то, что вы выделили дату.

Из-за этого есть хороший способ извлечь дату и посторонний текст

 input: Th 9/19 LAB: Serial encoding (Section 2.2) output: ['Th 9/19', 'LAB: Serial encoding (Section 2.2)'] 

или что-то подобное? Похоже, что такая обработка выполняется такими приложениями, как Gmail и Apple Mail, но можно ли реализовать их на Python?

3 Solutions collect form web for “Лучший способ определить и извлечь даты из текста Python?”

Я также искал решение этого и не мог найти ни одного, поэтому мы с другом создали инструмент для этого. Я думал, что вернусь и поделись тем, что другие считают полезным.

datefinder – поиск и извлечение дат внутри текста

Если вы можете идентифицировать сегменты, на самом деле содержащие информацию о дате, разбор их может быть довольно простым с использованием parsedatetime . Есть несколько вещей, которые следует учитывать, а именно, что ваши даты не имеют лет, и вы должны выбрать язык.

 >>> import parsedatetime >>> p = parsedatetime.Calendar() >>> p.parse("December 15th") ((2013, 12, 15, 0, 13, 30, 4, 319, 0), 1) >>> p.parse("9/18 11:59 pm") ((2014, 9, 18, 23, 59, 0, 4, 319, 0), 3) >>> # It chooses 2014 since that's the *next* occurence of 9/18 

Он не всегда работает отлично, когда у вас есть посторонний текст.

 >>> p.parse("9/19 LAB: Serial encoding") ((2014, 9, 19, 0, 15, 30, 4, 319, 0), 1) >>> p.parse("9/19 LAB: Serial encoding (Section 2.2)") ((2014, 2, 2, 0, 15, 32, 4, 319, 0), 1) 

Честно говоря, это похоже на проблему, которая была бы достаточно простой, чтобы анализировать конкретные форматы и выбирать наиболее вероятные из каждого предложения. Помимо этого, это была бы достойная проблема с машинным обучением.

Привет, я не уверен, что подход – это машинное обучение, но вы можете попробовать:

  • добавьте некоторый контекст из внешнего текста, например, время публикации текстового сообщения, проводки, теперь и т. д. (в тексте ничего не говорится о году)
  • извлеките все маркеры с белым пространством разделителя и получите следующее:

     ['Th','Wednesday','9:34pm','7:34','pm','am','9/18','9/','/18', '19','12'] 
  • обрабатывать их с помощью наборов правил, например, начиная с будних дней и / или вариантов компонентов, составляющих время, и маркировать их, например: «% d:% dpm», «% d am», «% d /% d», «% d /% d «и т. д. может означать время. Обратите внимание, что он может иметь композиции, например, «12/31» составляет 3 грамма («12», «/», «31»), должен быть один токен «12/31».

  • «см.», какие же значки обозначены маркерами вроде «9:45 pm», например («Th», «9/19», «9:45 pm») составляет 3gram из «интересных» токенов и применяют правила, которые могут определять значение ,

  • процесс для более конкретного анализа, например, если есть 31/12, поэтому 31> 12 означает d / m или наоборот, но если он имеет 12/12 м, d будет доступен только в контексте, построенный из текста и / или снаружи.

ура

  • Как эффективно фильтровать строку в длинном списке слов в Python / Django?
  • Как вернуть историю потери валидации в Keras
  • Жизнеспособное решение для разложения слов кхмера?
  • Преобразование прилагательных и наречий в их существительные
  • Разборчивость Значение из текста
  • Загрузить пользовательскую модель NER Stanford CoreNLP
  • NLTK не смог найти stanford-postagger.jar! Установите переменную среды CLASSPATH
  • Проблемы с Spacy в python
  •  
    Interesting Posts for Van-Lav

    TypeError: b'1 'не является сериализуемым JSON

    Удаление столбцов на основе значения повторения в одной строке в массиве numpy

    Как запросить аппаратное разрешение NATIVE основного монитора в Windows?

    Могу ли я установить Python 2.7.1 на 64-битную сторону на 32-разрядную установку на OS X?

    Ошибка интерполяции refc OpenCV?

    Сформировать все возможные перестановки подмножеств, содержащих весь элемент множества

    Проблема с запуском учебного пособия Heroku в Facebook с Python

    Нет модуля с именем py2exe

    Разница между «осями» и «осью» в matplotlib?

    argparse: как я могу разрешить нескольким значениям переопределять значение по умолчанию

    Динамическое расширение scipy массива

    Среднее время для списка даты и времени

    Как слить столбец коллекции с помощью Python Pandas?

    преобразование текстового файла в html-файл с помощью python

    Как сделать статусы elif более элегантно, если добавить к массиву в python

    Python - лучший язык программирования в мире.