File size: 4,443 Bytes
708c7f3 24d75a8 e6299f1 24d75a8 5269150 05e7340 0558690 24d75a8 05e7340 24d75a8 3099456 e6299f1 3099456 24d75a8 e6299f1 24d75a8 3099456 24d75a8 e6299f1 24d75a8 c5d8201 e6299f1 0558690 e6299f1 05e7340 a998357 e6299f1 24d75a8 a998357 e6299f1 a998357 e6299f1 a998357 e6299f1 24d75a8 e6299f1 24d75a8 a998357 24d75a8 e6299f1 24d75a8 a998357 e6299f1 21ab89f 95f0067 21ab89f 95f0067 21ab89f 95f0067 e6299f1 3099456 95f0067 0558690 95f0067 0558690 3099456 af5803e 95f0067 |
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 |
import re
import pandas as pd
import pymorphy2
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.metrics import accuracy_score
from translate import Translator
import streamlit as st
# Инициализация морфологического анализатора
morph = pymorphy2.MorphAnalyzer()
nkz_list = pd.read_csv('filtered_nkz.csv')
# Предобработка данных
from translate import Translator
def translate_text(text, from_lang='kk', to_lang='ru'):
"""
Перевод текста с одного языка на другой.
:param text: Исходный текст для перевода.
:param from_lang: Язык исходного текста (по умолчанию казахский 'kk').
:param to_lang: Язык перевода (по умолчанию русский 'ru').
:return: Переведённый текст.
"""
try:
translator = Translator(from_lang=from_lang, to_lang=to_lang)
translated_text = translator.translate(text)
return translated_text
except Exception as e:
print(f"Ошибка перевода: {e}")
return text # Возвращаем исходный текст в случае ошибки
# Уникальные казахские буквы
kazakh_letters = set("әғқңөұүі")
def preprocess_text(text):
"""Функция для предобработки текста: перевод, очистка, приведение к нижнему регистру, лемматизация."""
if not isinstance(text, str):
return ""
# Проверка на наличие уникальных казахских букв
if any(char in kazakh_letters for char in text.lower()):
text = translate_text(text)
# Очистка текста
text = text.lower().strip() # Приведение к нижнему регистру
text = re.sub(r'[^\w\s]', '', text) # Удаление пунктуации
text = re.sub(r'[a-zA-Z0-9]', '', text)
words = text.split()
lemmas = [morph.parse(word)[0].normal_form for word in words] # Лемматизация
return ' '.join(lemmas)
def find_best_matches(profession, nkz_list, vectorizer, tfidf_nkz, top_n=10):
"""Находит топ-10 наилучших соответствий для одной профессии в списке НКЗ."""
# Предобработка профессии
processed_profession = preprocess_text(profession)
print(processed_profession)
# Преобразование векторной модели
tfidf_profession = vectorizer.transform([processed_profession])
# Вычисление схожести
similarity = cosine_similarity(tfidf_profession, tfidf_nkz)
# Получаем индексы топ-N самых схожих профессий
top_n_idx = similarity[0].argsort()[-top_n:][::-1] # Сортируем по убыванию
# Формируем результат
top_matches = []
for idx in top_n_idx:
top_matches.append({
'profession': processed_profession,
'nkz_match': nkz_list.iloc[idx]['NAME_RU2'],
'nkz_code': nkz_list.iloc[idx]['CODE'], # Код НКЗ
'similarity': similarity[0][idx]
})
dfs = pd.DataFrame(top_matches)
return dfs
nkz_list['cleaned'] = nkz_list['NAME_RU2'].apply(preprocess_text)
vectorizer = TfidfVectorizer()
tfidf_nkz = vectorizer.fit_transform(nkz_list['cleaned'])
# Streamlit app
st.title("Occupation Similarity Finder")
text1 = st.text_input("Enter the occupation to compare:", "Оператор пульта управления")
if st.button("Find Similar Occupations"):
try:
# Find similar occupations
results = find_best_matches(text1, nkz_list, vectorizer, tfidf_nkz, top_n=10)
# similar_texts = find_similar_combined(text1, k=5)
# similar_texts_df = pd.DataFrame(similar_texts)
# Display results
if results is not None:
st.write("Similar Occupations:")
st.dataframe(results)
# st.dataframe(similar_texts_df)
else:
st.warning("No similar occupations found.")
except Exception as e:
st.error(f"An error occurred: {e}")
|