#python #nlp #nltk
#python #nlp #nltk
Вопрос:
Моя проблема немного отличается от простого сходства слов.Вопрос в том, существует ли какой-либо алгоритм для вычисления сходства между почтовым адресом и именем.
for example:
mail Abd_tml_1132@gmail.com
Name Abdullah temel
levenstein,hamming distance 11
jaro distance 0.52
но, скорее всего, этот почтовый адрес принадлежит этому имени.
Комментарии:
1. Вы пробовали удалять часть строки после
@
, а затем применять алгоритм сходства2. Это похоже на результаты, полученные при удалении этой части.
Ответ №1:
Нет прямого пакета, но это может решить вашу проблему:
Внесение идентификатора электронной почты в список
a = 'Abd_tml_1132@gmail.com'
rest = a.split('@', 1)[0] # Removing @
result = ''.join([i for i in rest if not i.isdigit()]) ## Removing digits as no names contains digits in them
list_of_email_words =result.split('_') # making a list of all the words. The separator can be changed from _ or . w.r.t to email id
list_of_email_words = list(filter(None, list_of_email_words )) # remove any blank values
Добавление имени в список:
b = 'Abdullah temel'
list_of_name_words =b.split(' ')
Примените нечеткое соответствие к обоим спискам:
score =[]
for i in range(len(list_of_email_words)):
for j in range(len(list_of_name_words)):
d = fuzz.partial_ratio(list_of_email_words[i],list_of_name_words[j])
score.append(d)
Теперь вам просто нужно проверить, превышает ли какой-либо из элементов score
больше порогового значения, которое может быть определено вами. Например:
threshold = 70
if any(x>threshold for x in score):
print ("matched")
Ответ №2:
Fuzzywuzzy может помочь вам с необходимым решением. Сначала удалите ‘@’ и имя домена из строки с помощью регулярного выражения. После этого у вас будет 2 строки следующим образом —
from fuzzywuzzy import fuzz as fz
str1 = "Abd_tml_1132"
str2 = "Abdullah temel"
count_ratio = fz.ratio(str1,str2)
print(count_ratio)
Вывод —
46