File size: 8,171 Bytes
b9a69cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
from PyPDF2 import PdfReader
import json
import requests
import io


class AI_RH:
    def treat_text(self, pdf):
        pdfreader = PdfReader(io.BytesIO(pdf))
        raw_text = ''
        for i, page in enumerate(pdfreader.pages):
            content = page.extract_text()
            if content:
                if '•' in content:
                    content = content.replace("•", "")
                raw_text += content
        return raw_text
    
    def create_contents(self, pdf):
        text_ = self.treat_text(pdf)
        query = f"""

Responda apenas o dicionário em formato json, não acrescente mais nada.

Retorne apenas o dicionário com as informações solicitadas e nada mais.

Texto:



{text_}

#End

"""
        system_cfg = """

Responda em formato dicionário python padrão.

Responda em português.

Ao encerrar o dicionário, não acrescente mais nada.

Os dados identificadores da pessoa, como nome, localização, email e telefone devem vir com rótulo (Exemplo: Nome: Nome Sobrenome, Email: email_da_pessoa, Telefone: telefone_da_pessoa). 

O nome deve ter todos os primeiros caracteres de cada nome em maiúscula.

O telefone pode estar bagunçado no meio do texto, portanto, considere qualquer sequência numeral de 9 números como um telefone válido.

As experiências, ou empresas trabalhadas, é um dos dados mais relevantes. Coloque cada empresa e ano de ingressão e conclusão se houver. 

Coloque os as empresas trabalhadas, certificados e cursos em formato de lista, separando cada curso como um item da lista. 

O E-MAIL É UMA DAS INFORMAÇÕES MAIS RELEVANTES, procure com atenção. Geralmente ele está escrito no meio do texto, portanto, lembre-se de considerar o que está antes e depois do "@" como o email. Não reorganize as palavras do email de jeito algum, retorne como encontrar. 

Geralmente o cargo está anexado à empresa (Exemplo: Cargo em Empresa_X). É IMPORTANTE CLASSIFICAR todas as experiências do mais recente para o mais antigo, considerando sempre a data de início como parâmetro para tal. 

O telefone pode estar bagunçado no meio do texto, portanto, considere qualquer sequência numeral de 9 números como um telefone válido. 

Considere o dado de habilidades ou skills tudo que você identificar como potencias cursos que a pessoa fez. Faculdades, cursos técnicos e pós graduações devem ficar no campo de Ensino. Por vezes, o candidato não descreve suas habilidades, nesses casos, inclua o campo Habilidades porém retorne vazio.

Algumas vezes a pessoa descreve como "Certificados" suas habilidades. Considere isso também para o campo Habilidades.

Por vezes, a pessoa o descreve como qualificação complementar ou certificações, portanto, considere isso para atribuir à chave de Habilidades.

Sempre leve em consideração a descrição das atividades para o campo Descrição de cada Cargo.

Se atente aos conhecimentos citados no texto e agrupe tudo dentro da chave Habilidades, não renomeie essa chave jamais.

Caso esteja descrito carteira de habilitação no texto, acrescente isso ao campo Habilidades.

Responda em formato dicionário python padrão. 

Não comece a resposta com "json", apenas os dados. 

Você receberá um texto que será convertido em dicionário python padrão. 

Apenas chaves e valores. 

Fique atento à formatação.

Quando não encontrar, retorne null no campo correspondente.

Respeite a ordem dos itens abaixo, independente de como esteja escrita no texto.

***

A idade pode vir descrita ou como data de nascimento. Considere ambos.

Nome:

Idade:

Localização:

Email: (Considere qualquer coisa antes e depois do "@" como email.)

Telefone: (Sempre no formato +55 11 99999-9999)

***



***

Experiências: (o nome do campo sempre no plural, independente da quantidade)

Coloque todos os empregos. Para cada emprego, inclua:

Cargo:

Empresa:

Descrição: (Geralmente a descrição está logo após o cargo e a empresa. Considere sempre que encontrar.)

Data de Início: 

Data de Término (se aplicável):

***



***

Educação: (Esse campo sempre se chamará "Educação", independente de como esteja chamando no texto original.)

Considere cursos técnicos, faculdades, cursos superiores, pós graduações. Retorne o campo Educação mesmo se não encontrar nada. Para cada item de formação acadêmica, inclua:

Formação:

Instituição:

Data de conclusão: (se houver)

***



***

Habilidades: 

(Esse campo sempre se chamará "Habilidades", independente de como esteja chamando no texto original. Sempre escreva o campo Habilidades mesmo se não encontrar nada.)

Para cada habilidade, inclua:

Conhecimento:



***



Abaixo segue um exemplo de formatação. Toda resposta deve vir nesse exato formato. Por favor, considere apenas a formatação e o nome das chaves, e ignore o conteúdo:



 {

    "Nome": "Marcelo Oliveira",

    "Idade": 24,

    "Localização": "São Paulo, SP",

    "Email": "[email protected]",

    "Telefone": "+55 11 99354 6847",

    "Experiências": [

        {

            "Cargo": "Auxiliar Técnico em Eletrônica",

            "Empresa": "Grupo PLL",

            "Descrição: "Manutenção de aparelhos (celulares e tablets), voltado para o reaproveitamento de placas e componentes de dispositivos danificados."

            "Data de Início": "Maio de 2019",

            "Data de Término": "Outubro de 2023"

        }

    ],

    "Educação": [

        {

            "Formação": "Ensino Médio",

            "Instituição": "São Paulo, SP",

            "Data de Conclusão": "Julho de 2016"

        },

        {

            "Formação": "Técnico em eletroeletrônica",

            "Instituição": "Etec Profª Drª Doroti Quiomi Kanashiro Toyohara",

            "Data de Conclusão": "Junho de 2016"

        }

    ],

    "Habilidades": [

        {

            "Conhecimento": "Curso: Técnico em eletroeletrônica"

        },

        {

            "Conhecimento": "Diagnóstico e consertos"

        }

    ]

}





"""

        content = self.chat_completion(system_cfg, query)
        print (content)
        return content
        




    def chat_completion(self, system_content, user_content):
        url = "http://localhost:1234/v1/chat/completions"

        payload = json.dumps({
        "model": "lmstudio-community/Meta-Llama-3-8B-Instruct-GGUF",
        "messages": [
            {
            "role": "system",
            "content": system_content
            },
            {
            "role": "user",
            "content": user_content
            }
        ],
        "temperature": 0,
        "max_tokens": -1
        })
        headers = {
        'Content-Type': 'application/json'
        }

        response = requests.request("POST", url, headers=headers, data=payload)
        n_data = json.loads(response.text)
        content = n_data["choices"][0]["message"]["content"]
        return content

        




    def resumo_ai_function(self, job_dict, resume_dict):
        query = f"""

        Você é um analista de RH com 10 anos de experiência.

        Analise se o candidato possui as qualificações necessárias para a vaga.

        Considere o conjunto de habilidades, descrição das experiências anteriores e outras informações que o candidato tenha.

        Leia atentamente o currículo. Não invente informações que não esteja explicitamente descrita no currículo.

        Vaga: {job_dict}

        Currículo: {resume_dict}

        Seja simples e breve na sua resposta. Responda no formato do exemplo abaixo.

        Exemplo: <nome> tem as qualificações <habilidades, formação, qualificação, etc.> que se adequa a vaga. No entanto, não foi mencionado <algo da vaga> no currículo. Avaliação: <numero> %.



        """
        system_cfg = """### Instruction:

        Responda em porcentagem de 0 a 100.

        Responda em português.

        Ao encerrar a resposta, não acrescente mais nada.

        """
        content = self.chat_completion(system_cfg, query)
        return content