Создание mapper.py в Linux и оператор if не работает

Вопрос или проблема

Я пытаюсь создать mapper.py в Linux, который затем будет работать в комбинации с reducer.py на базе данных h1b.

Вот код, который я использую:

import sys
for line in sys.stdin:
line = line.strip()
EMPLOYER_NAME = line.split(",") [1].strip()
PREVAILING_WAGE = line.split (",") [5].strip()
JOB_TYPE = "академический" if "УНИВЕРСИТЕТ" in EMPLOYER_NAME.lower() else "индустрия"
print ('%s\t%s\t%s' % (JOB_TYPE,EMPLOYER_NAME,PREVAILING_WAGE))

Код работает, но классифицирует все записи как “индустрия” вместо некоторых как “индустрия”, а некоторые как “академический”. Например, “Университет Мичигана” классифицируется как “индустрия”.
введите описание изображения здесь

Я попытался проверить, что в слове university в колонке “Employer_Name” нет пробелов или других символов, и их нет, так что это не должно быть проблемой.

Ответ или решение

Создание mapper.py в Linux и проблема с оператором if

Вы разрабатываете скрипт mapper.py для обработки данных из базы данных H1B, и столкнулись с проблемой, при которой все записи классифицируются как "индустрия". Давайте разберемся с вашим кодом и определим, что может быть причиной этого.

Анализ кода

Ваш код выглядит следующим образом:

import sys
for line in sys.stdin:
    line = line.strip()
    EMPLOYER_NAME = line.split(",")[1].strip()
    PREVAILING_WAGE = line.split(",")[5].strip()
    JOB_TYPE = "academic" if "UNIVERSITY" in EMPLOYER_NAME.lower() else "industry"
    print('%s\t%s\t%s' % (JOB_TYPE, EMPLOYER_NAME, PREVAILING_WAGE))

Ошибки в коде

  1. Неверное определение "academic": Ваша логика определения типа работы зависит от проверки наличия слова "UNIVERSITY" в названиях работодателей. Проблема может возникнуть, если вы используете строки, которые могут не содержать точного совпадения. Например, названия университетов могут быть записаны с ошибками или включать другие символы.

  2. Проблемы с данными: Хотя вы отметили, что в поле EMPLOYER_NAME нет пробелов или других символов, важно также быть уверенным в корректной обработке данных. Если у вас есть записи с дополнительными пробелами или знаками препинания, это может влиять на результат. Убедитесь, что в названиях работодателей нет невидимых символов.

Рекомендации по исправлению

  1. Убедитесь в корректности данных: Проверьте, что данные в ваших входных файлах не содержат лишних символов. Вы можете добавить вывод для отладки, чтобы увидеть, какие именно значения передаются в EMPLOYER_NAME.

  2. Расширьте проверку на наличие "UNIVERSITY": Попробуйте использовать регулярные выражения для более гибкой проверки. Например, можно использовать библиотеку re:

    import re
    import sys
    
    for line in sys.stdin:
        line = line.strip()
        EMPLOYER_NAME = line.split(",")[1].strip()
        PREVAILING_WAGE = line.split(",")[5].strip()
    
        # Используем регулярное выражение для проверки "university"
        JOB_TYPE = "academic" if re.search(r'\b(university)\b', EMPLOYER_NAME, re.I) else "industry"
    
        print('%s\t%s\t%s' % (JOB_TYPE, EMPLOYER_NAME, PREVAILING_WAGE))
  3. Логирование для отладки: Добавьте вывод для проверки переменной EMPLOYER_NAME, прежде чем сделать классификацию, чтобы убедиться, что она действительно содержит то, что вы ожидаете:

    print("Employer:", EMPLOYER_NAME)
  4. Проверка формата входных данных: Убедитесь, что формат входных данных соответствует ожидаемому. Возможно, не все строки содержат запятые, или они могут иметь разное количество полей.

Заключение

Следуя вышеуказанным рекомендациям, вы сможете устранить проблему с неправильной классификацией работодателей в вашем скрипте mapper.py. Важно внимательно анализировать данные, идентифицировать потенциальные проблемы с форматированием и при необходимости использовать более гибкие механизмы поиска и сопоставления. Это позволит вам добиться правильного результата: некоторые записи будут правильно классифицированы как "academic", а другие — как "industry".

Оцените материал
Добавить комментарий

Капча загружается...