【问题标题】:How to extract age and gender from reddit post titles?如何从 reddit 帖子标题中提取年龄和性别?
【发布时间】:2023-03-13 19:10:02
【问题描述】:

我正在尝试抓取 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

【问题讨论】:

    标签: regex python-3.x nlp reddit


    【解决方案1】:

    您可以尝试使用此正则表达式提取匹配项:

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

    Demo

    对于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)
    

    Demo

    编辑:

    您可以尝试将您的正则表达式修改为此,以适应您在评论中提到的新要求:

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

    Demo

    【讨论】:

    • 嗨,我知道这超出了原始问题的范围,但我进行了跟进。假设这个东西的另一个选项是“22 Male”或“23 female”。我如何解释性别标签前面有一个空格?
    • @jdoe 在不区分大小写模式下尝试将(\d+)\s*(male|female)re.findall 匹配。
    【解决方案2】:

    您可以将正则表达式与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']
    

    这个网站非常适合学习和练习正则表达式:https://regex101.com/

    【讨论】:

      【解决方案3】:

      我们可以在这里尝试使用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')]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        • 2020-02-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多