Здравствуйте, это проблема, которую я хочу решить, но я застрял.

Учитывая список URL-адресов, я хочу сделать следующее:

  1. извлечь имя в URL
  2. сопоставить найденное в URL имя со словарем существующих имен
  3. иметь 1 словарь из всех найденных имен, разделить найденные имена на 2 отдельных словаря, 1 из которых связан с именами, найденными в словаре, а другой - с именами, не найденными

Пример:

INPUT : 
urls = ['www.twitter.com/users/aoba-joshi/$#fsd=43r', 
        'www.twitter.com/users/chrisbrown-e2/#4f=34ds', 
        'www.facebook.com/celebrity/neil-degrasse-tyson',
        'www.instagram.com/actor-nelson-bigetti']

# the key is the ID associated to the names, and the values are all the potential names

existing_names = {1 : ['chris brown', 'chrisbrown', 'Brown Chris', 'brownchris'] ,
                  2 : ['nelson bigetti', 'bigetti nelson', 'nelsonbigetti', 'bigettinelson'],
                  3 : ['neil degrasse tyson', 'tyson neil degreasse', 'tysonneildegrasse', 'neildegrassetyson']}


OUTPUT : 
# names_found will be a dictionary with the key as the URL and the values as the found name
names_found = {'www.twitter.com/users/aoba-joshi/$#fsd=43r' : 'aoba joshi',
               'www.twitter.com/users/chrisbrown-e2/#4f=34ds' : 'chris brown',
               'www.facebook.com/celebrity/neil-degrasse-tyson' : 'neil degrasse tyson',
               'www.instagram.com/actor-nelson-bigetti' : 'nelson bigetti'}

# existing_names_found is a dictionary where the keys are the found name, and the values are the corresponding list of names in the existing names dictionary

existing_names_found = {'chris brown' : ['chris brown', 'chrisbrown', 'Brown Chris', 'brownchris'],
                        'neil degrasse tyson' : ['neil degrasse tyson', 'tyson neil degreasse', 'tysonneildegrasse', 'neildegrassetyson'],
                        'nelson bigetti' : ['nelson bigetti', 'bigetti nelson', 'nelsonbigetti', 'bigettinelson']}

# new_names_found is a dictionary with the keys as the new name found, and the values as the url associated to the new found name
new_names_found = {'aoba joshi' : 'www.twitter.com/users/aoba-joshi/$#fsd=43r'}
0
v_coder12 21 Июл 2020 в 22:09

2 ответа

Лучший ответ

Хорошо ... если я правильно понял, что ты хочешь сделать ... вот что должно сработать


for link in links_list:
    link_split = link.split('/')
    name_list = link_split[2].split('-')     # makes from chris-brown-xx => chrisbrownxx
    name = ""
    for part in name:
        name + part
    for (key, value) in existing_names:    # check if the name is in the list
        for name_x in value:
            name_x = # same as I did with name_list, but this time with " "
            if name_x in name.lower():
                # append it to new_names_found

(Извините заранее, я набираю это на своем телефоне, но, надеюсь, это будет полезно :))

(в качестве альтернативы, вы можете попытаться посмотреть, содержит ли он обе части текста ... но это не сработает на что-то вроде этого -> "Люк Люк" и проверяя его на "Люк О'Нил") ... Есть много проблемы

2
StyleZ 21 Июл 2020 в 19:31

Начните, вот шаги, чтобы сделать эту программу:

  1. Создайте for для просмотра каждого отдельного URL и с помощью функции split('/') разбейте каждый URL на список и найдите значение 2 в этом списке.
  2. Затем вы можете использовать другой цикл for для просмотра ключей и значений словаря existing_names. В этот цикл включите оператор if, который сравнивает извлеченное вами имя с присутствующими именами.
  3. Затем вы добавляете эти значения в словари или списки, которые вы хотите.
1
Max 21 Июл 2020 в 19:28