Как извлечь информацию из однострочного текста без HTML-класса?

Я пытаюсь очистить свой первый веб-сайт ( https://news.ycombinator.com/jobs ), используя scrapy и python. Информация, которую мне нужно извлечь, выглядит следующим образом: - Название компании, которая нанимает - Расположение компания - позиция, для которой предназначено объявление

На странице html нет отдельных тегов для этих полей. И текст не имеет определенного шаблона. Например, ZeroCater (YC W11) нанимает главного инженера в SF: Must Love Food

Одного Regex недостаточно для извлечения этой информации. Есть ли эффективное и простое решение этой проблемы?

Я попробовал регулярное выражение Python. Я также изучал НЛП и классификацию текстов с помощью nltk. Но nltk увеличит сложность кода и отнимает много времени.

Всего 1 ответ


В этом случае я попытаюсь найти какой-либо шаблон, который поможет мне извлечь эти данные, например, я вижу, как часто встречаются эти слова "is hiring|is looking for|is looking to hire|hiring" и название компании стоит на первом месте, также местоположение следуют in :

это всего лишь небольшое испытание, и вы можете расширить его, чтобы получить то, что вам нужно

import re
text = """ZeroCater (YC W11) Is Hiring a Principal Engineer in SF: Must Love Food (zerocater.com)
OneSignal Is Hiring Full Stack Engineers in San Mateo (onesignal.com)
Faire (YC W17) Is Looking to Hire Business Operations Leads (greenhouse.io)
InsideSherpa (YC W19) Is Hiring Software Engineers in Sydney (workable.com)
Jerry (YC S17) Is Hiring Senior Software Dev, Data Engineer (Toronto/Remote) (getjerry.com)
Iris Automation Is Hiring an Account Executive for B2B Flying Vehicle Software (irisonboard.com)"""

data = text.lower().splitlines()

for i, line in enumerate(data):
    # getting company name
    data[i] = re.split(r'is hiring|is looking for|is looking to hire|hiring', line)

    # job title and location if present
    data[i][1] = re.split(r' in ', data[i][1])

print('company --- Job Title --- Location')
for c in data:
    print(f'{c[0]} --- {c[1][0]} --- {c[1][1] if len(c[1])>1 else ""}')

выход:

company --- Job Title --- Location
zerocater (yc w11)  ---  a principal engineer --- sf: must love food (zerocater.com)
onesignal  ---  full stack engineers --- san mateo (onesignal.com)
faire (yc w17)  ---  business operations leads (greenhouse.io) --- 
insidesherpa (yc w19)  ---  software engineers --- sydney (workable.com)
jerry (yc s17)  ---  senior software dev, data engineer (toronto/remote) (getjerry.com) --- 
iris automation  ---  an account executive for b2b flying vehicle software (irisonboard.com) --- 

уверен, что этот код требует много модификаций, чтобы получить надежные результаты, но, по крайней мере, это начало


Есть идеи?

10000