У меня есть фрейм данных, содержащий столбец типов профилей, который выглядит так:
0 Android Java
1 Software Development Developer
2 Full-stack Developer
3 JavaScript Frontend Design
4 Android iOS JavaScript
5 Ruby JavaScript PHP
Я использовал NLP для нечеткого сопоставления похожих профилей, который вернул следующий кадр данных сходства:
left_side right_side similarity
7 JavaScript Frontend Design Design JavaScript Frontend 0.849943
8 JavaScript Frontend Design Frontend Design JavaScript 0.814599
9 JavaScript Frontend Design JavaScript Frontend 0.808010
10 JavaScript Frontend Design Frontend JavaScript Design 0.802881
12 Android iOS JavaScript Android iOS Java 0.925126
15 Machine Learning Engineer Machine Learning Developer 0.839165
21 Android Developer Developer Android Developer 0.872646
25 Design Marketing Testing Design Marketing 0.817195
28 Quality Assurance Quality Assurance Developer 0.948010
Хотя это помогло мне перейти с 478 уникальных профилей на 461, я хотел бы сосредоточиться на таких профилях:
Frontend Design JavaScript Design Frontend JavaScript
Единственный инструмент, который я видел для решения этой проблемы, — это difflib? Мой вопрос заключается в том, какие другие методы будут доступны, чтобы пройти и стандартизировать эти профили, состоящие из одних и тех же слов, но не по порядку, в одну стандартную строку. Таким образом, желаемый результат будет заключаться в том, чтобы взять строку, содержащую Design, Frontend и JavaScript, и заменить ее на Design Frontend JavaScript.
Прямо сейчас я объединяю свой исходный фрейм данных с фреймом подобия, чтобы заменить все вхождения строки профиля справа на левую сторону, но это означает, что я заменяю правую сторону ниже (Java Python Data Science) на левую сторону ниже (JavaScript наука о данных Python).
53 JavaScript Python Data Science Java Python Data Science
Любая помощь будет принята с благодарностью!!!
РЕДАКТИРОВАТЬ *** Я написал следующее, чтобы заменить все слова, встречающиеся как в столбцах words_to_keep, так и в столбце clean_talentpool['profile'], но, похоже, это не работает? Не мог бы кто-нибудь указать, чего я не вижу? Я был бы очень признателен!
def standardize_word_order(row):
words_to_keep = [
"javascript frontend design",
"android ios javascript",
"android developer developer",
"android developer",
"quality assurance",
"quality assurance engineer",
"architecture developer",
"big data architecture developer",
"data architecture developer",
"software architecture developer",
"javascript python data science",
"frontend php javascript",
"javascript android ios",
"frontend design javascript",
"java python data science",
"javascript frontend android",
".net javascript frontend",
]
for word in words_to_keep:
if (sorted(word.replace(" ", ""))) == sorted(
row.replace(" ", "")
) and word != row:
row.replace(row, word)
return row
clean_talentpool["profile"] = clean_talentpool["profile"].apply(
lambda x: standardize_word_order(x)
)