Как извлечь возраст и пол человека из необработанного текста / данных?

У меня есть файл CSV со списком текстов (столбец со строками), и я хочу извлечь возраст пациентов из каждой строки, я не могу сделать с "цифрой", потому что в текстах есть и другие цифры. как я могу это сделать? Спасибо

ДОПОЛНИТЕЛЬНО: я также хочу выделить пол - пациента иногда называют мужчиной / женщиной, иногда мужчиной / женщиной и иногда джентльменом / леди.

Есть ли способ написать findall, например, если текст 17-летней давности, напечатайте мне номер, если за ним следует -year-old

re.findall("[\d].", '-year-old')

Пример строк из текста:

This 23-year-old white female presents with...

...pleasant gentleman who is 42 years old...

...The patient is a 10-1/2-year-old born with...

...A 79-year-old Filipino woman...

Patient, 37,...

Как я могу получить список возраста / пола

то есть:

Age:

    ['23','42','79','37'...]

Gender:

    ['female','male','male','female','male'...]

2 ответа

Решение

Вы можете легко сделать это с помощью регулярного выражения (Regular Expression).

import re

# returns all numbers
age = re.findall("[\d].", your_text)

# returns all words related to gender
gender = re.findall("female|gentleman|woman", your_text)

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

gender_dict = {"male": ["gentleman", "man", "male"],
               "female": ["female", "woman", "girl"]}
gender_aux = []
for g in gender:
    if g in gender_dict['male']:
        gender_aux.append('male')
    elif g in gender_dict['female']:
        gender_aux.append('female')
re_list = [
    '\d*\-year-old',
    '\d*\ year old'
]

matches = []
for r in re_list:
    matches += re.findall( r, 'pleasant gentleman who is 42 years old, This 23-year-old white female presents with')
print(matches)

распечатывает:

['23-year-old', '42 year old']
Другие вопросы по тегам