python повторно сопоставляет, находит все или поиск, а затем NLP (что с этим делать?)

#python #regex #nlp

#python #регулярное выражение #nlp

Вопрос:

Я начинаю писать код, который фиксировал бы часть предложения «типы», и если они соответствуют критериям, запускаю конкретный скрипт на Python, который имеет дело с «типом». Я «нахожу»:) что findall работает лучше для того, что я делаю, следовательно:

 m = re.compile(r'([0-9] days from now)')
m.match("i think maybe 7 days from now i hope")
print m.match("i think maybe 7 days from now i hope")
None
f= m.findall("i think maybe 7 days from now i hope")
print f[0]
7 days from now
  

Кажется, это дает мне ту часть предложения, которую я искал. Затем я могу передать это, например, модулю pyparsing, используя его пример скрипта преобразования datetime, который возвращает datetime из аналогичного оператора NL (я знаю, что есть другие модули, но они жесткие в операторах ввода, которые они могут обрабатывать).
Тогда я мог бы вставить базу данных в свой онлайн-дневник, например, или в размещенное веб-приложение, если другие части предложения соответствуют другому «типу», т. Е. встречам, крайним срокам и т.д.
Я просто возлюсь здесь, но постепенно я создаю что-то полезное. Логична ли эта структура / процесс или есть методы / способы получше: это то, о чем я спрашиваю себя сейчас. Приветствуется любая обратная связь

Ответ №1:

Причина, по которой m.match() происходит сбой, заключается в том, что он ожидает, что совпадение начнется с начала строки.

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

Все это хорошо описано в документах.

Ответ №2:

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

Итак, если вы просто делаете что-то с датой / временем и привязываете к ним очень специфические действия, которые было бы отстойно выполнять неправильно, то повторное сопоставление кажется хорошим выходом. С другой стороны, если вы просто пытаетесь определить выражение «дата» по сравнению, например, с выражением «электронная почта» или выражением «примечание», то, возможно, стоит попробовать пометить предложения с использованием NLTK и сопоставить шаблоны на уровне части речи.