Извлечение только технических ключевых слов из текста с использованием библиотеки RAKE в Python

Я хочу использовать rake для извлечения технических ключевых слов из описания вакансии, которое я нашел в Linkedin и которое выглядит следующим образом:

input = "In-depth understanding of the Python software development stacks, ecosystems, frameworks and tools such as Numpy, Scipy, Pandas, Dask, spaCy, NLTK, sci-kit-learn and PyTorch.Experience with front-end development using HTML, CSS, and JavaScript.
Familiarity with database technologies such as SQL and NoSQL.Excellent problem-solving ability with solid communication and collaboration skills.
Preferred Skills And QualificationsExperience with popular Python frameworks such as Django, Flask or Pyramid."

Я запускаю этот код, поскольку он должен возвращать ключевые слова.

from rake_nltk import Rake

r = Rake()
r.extract_keywords_from_text(input)
keywords = r.get_ranked_phrases_with_scores()

for score, keyword in keywords:
    if len(keyword.split()) == 1:  # Check if the keyword is one word
        print(f"{keyword}: {score}")

Но вывод такой:

frameworks: 2.0
tools: 1.0
sql: 1.0
spacy: 1.0
scipy: 1.0
sci: 1.0
qualificationsexperience: 1.0
pytorch: 1.0
pyramid: 1.0
pandas: 1.0
numpy: 1.0
nosql: 1.0
nltk: 1.0
learn: 1.0
kit: 1.0
javascript: 1.0
front: 1.0
flask: 1.0
familiarity: 1.0
experience: 1.0
ecosystems: 1.0
django: 1.0
dask: 1.0
css: 1.0

Просто мне просто нужно явное название инструментов, навыков и фреймворков. Такие как «Numpy», «Scipy», «HTML» и т. д. Они используются в тексте, а НЕ каждое слово, встречающееся в нем (например, «опыт» или «инструменты»).

Есть ли способ сделать это? Или мне следует просто предоставить список всех возможных фреймворков Python и связанных с ними навыков, а затем отфильтровать вывод rake? Если последнее является решением, как мне найти/составить подробный список?

Любая помощь приветствуется.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
76
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Rake — это независимый от домена алгоритм извлечения ключевых слов, поэтому вы не сможете использовать его для извлечения ключевых слов, связанных с конкретным доменом. Вам необходимо отфильтровать выходные данные как самое простое решение, и для этого вы можете использовать различные документы, аналогичные приведенной ниже ссылке, чтобы собрать данные и составить из них список. https://gist.github.com/pvanfas/8b4518996136d1a5ffc79513b3105033

Также можно улучшить результаты, опробовав другие библиотеки, такие как KeyBERT.

Спасибо. Я обязательно попробую.

Fatemeh 28.04.2024 16:52
Ответ принят как подходящий

Вы можете использовать классификацию жетонов навыков и знаний из библиотеки Hugging Face.

from transformers import pipeline

token_skill_classifier = pipeline(model = "jjzha/jobbert_skill_extraction", aggregation_strategy = "first")
token_knowledge_classifier = pipeline(model = "jjzha/jobbert_knowledge_extraction", aggregation_strategy = "first")

def aggregate_span(results):
    new_results = []
    current_result = results[0]

    for result in results[1:]:
        if result["start"] == current_result["end"] + 1:
            current_result["word"] += " " + result["word"]
            current_result["end"] = result["end"]
        else:
            new_results.append(current_result)
            current_result = result

    new_results.append(current_result)

    return new_results

def ner(text):
    output_skills = token_skill_classifier(text)
    for result in output_skills:
        if result.get("entity_group"):
            result["entity"] = "Skill"
            del result["entity_group"]

    output_knowledge = token_knowledge_classifier(text)
    for result in output_knowledge:
        if result.get("entity_group"):
            result["entity"] = "Knowledge"
            del result["entity_group"]

    if len(output_skills) > 0:
        output_skills = aggregate_span(output_skills)
    if len(output_knowledge) > 0:
        output_knowledge = aggregate_span(output_knowledge)

    return {"text": text, "entities": output_skills}, {"text": text, "entities": output_knowledge}

Я слышал о NER, но думал, что он предназначен только для «людей», «компаний», «мест» и т. д. Я использовал его, и он сработал. Спасибо!

Fatemeh 30.04.2024 10:13

Другие вопросы по теме