Python 3.7 Каков наилучший способ найти текст под заголовком - PullRequest
0 голосов
/ 26 сентября 2019

Я работаю над проектом НЛП, и у меня есть два формата ввода текста.

Формат 1:

Some line
Some line
Name is <name> random text and numbers.  age is <age> random text and numbers
Some line

Формат 2:

Some line
Name
<name>. Random text and numbers
Some random line
Age
<age>.  random text and numbers

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

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

Моя текущая стратегия такова: - Я планирую разделить каждую строку по символу новой строки.- Тогда для каждой строки я ищу (?:names is) (\w).Первый матч - имя.Это работает для первого формата.

Мой текущий код имени:

import re 
Pattern = '(?:names is) (\w)'
Text ='...'.split('\n')

for t in Text:    
  Match = re.match(pattern, Text, re.I)    

  if match.group(1) is not None:

      Name = match.group(1)

Однако он не работает для второго формата.Не могли бы вы дать мне знать и идеи.

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Попробуйте: (?i)(?:name(?: is )?([^ .]+)|age(?: is )?([^ .]+))

Объяснение:

(?i) - флаг: при поиске не учитывается регистр

(?:...) - группа без захвата

(?: is )? - соответствует нулю или одному разу is

([^ .]+) - соответствует одному или нескольким другим символам из (пробел) или .

name(?: is )?([^ .]+)|age(?: is )?([^ .]+) -чередование: совпадение либо name(?: is )?([^ .]+), либо age(?: is )?([^ .]+)

Демо

0 голосов
/ 26 сентября 2019

Эти регулярные выражения могут работать для вас:

"Name is (.+?)\b|Name\n?(.+?)\b"
"Age is (.+?)\b|Age\n?(.+?)\b"

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

Проверьте их здесь .То же самое относится и к возрасту.

...