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

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

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

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

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

1 Ответ

2 голосов
/ 14 мая 2019

В этом случае я попытаюсь найти какой-либо шаблон, который поможет мне извлечь эти данные, например, я вижу, что эти слова встречаются часто "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) --- 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...