Как извлечь возраст и пол из заголовков постов Reddit? - PullRequest
2 голосов
/ 30 июня 2019

Я пытаюсь почистить в Reddit посты субреддитов, где много вопросов в форме:

s1 = "I [22M] and my partner (21F) are foo and bar"

s2 = "My (22m) and my partner (21m) are bar and foo"

Я хочу сделатьфункция, которая может анализировать каждую строку и затем возвращать пары возраста и пола.Итак:

def parse(s1):
 ....
 return [(22, "male"), (21, "female")]

По сути, каждый тег возраста / пола представляет собой двузначное число, за которым следует либо f, F, m, M.

Ответы [ 3 ]

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

Вы можете попытаться извлечь совпадения, используя это регулярное выражение:

(?:[\[\(])(\d{1,2})([MF])(?:[\]\)]) /i

Демо

Для части Python я бы порекомендовал refindall метод:

import re

def parse(title):
    return re.findall(r'(?:\[|\()(\d{1,2})([MF])(?:\]|\))', title, re.IGNORECASE)

title = 'I [22M] and my partner (21F) are foo and bar'
matches = parse(title)

print(matches)

Демо

РЕДАКТИРОВАТЬ:

Вы можете попробоватьчтобы изменить свое Regex на это, чтобы соответствовать новому требованию, которое вы упомянули в комментарии:

(?:[\[\(])(\d{1,2})\s?([MF]|male|female)(?:[\]\)]) /i

Демо

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

Вы можете использовать Regex с re:

import re
>>> re.findall(r'(?<=\[|\()[^\)\]]+', s1)  # find text within () or []
['22M', '21F']
>>> re.findall(r'\d+', '22M') # find age
['22']
>>> re.findall(r'[fFmM]+', '22M') # find gender
['M']

Этот сайт действительно хорош для изучения и практики на Regex: https://regex101.com/

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

Мы можем попробовать использовать re.findall здесь:

s1 = "I [22m] and my partner (21F) are foo and bar"
matches = re.findall(r'(?:[\[(](\d+[MF])[\])])', s1, re.IGNORECASE)
print(matches)

[('22', 'm'), ('21', 'F')]
...