Python, как динамически найти имя человека в строке

Я столкнулся с такой же ошибкой внутри DockerFile во время сборки, пока изображение было общедоступным. Я сделал небольшую модификацию в файле Docker.

 RUN git clone  https://github.com/kacole2/express-node-mongo-skeleton.git /www/nodejs

Это было бы потому, что использование синтаксиса git@github.com: ... заканчивается> использованием SSH для клонирования и внутри контейнера закрытый ключ недоступен. Вместо этого вы хотите использовать RUN git clone> https://github.com/edenhill/librdkafka.git .

blockquote>

0
задан Martijn Pieters 11 March 2019 в 15:56
поделиться

3 ответа

В основном вам нужно нечеткое сопоставление строк, см.

https://en.wikipedia.org/wiki/Approximate_string_matching

https: //www.datacamp.com/community/tutorials/fuzzy-string-python

На основании этого вы можете проверить, насколько похожи входные данные по сравнению с вашим словарем:

 from fuzzywuzzy import fuzz

 name = "nick"
 tomatch = ["Nick", "ick", "nik", "nic", "nck", "nickey", "njick", "nickk", "nickn"]
 for str in tomatch:
    ratio = fuzz.ratio(str.lower(), name.lower())
    print(ratio)

Этот код выдаст следующий результат:

100
86
86
86
86
80
89
89
89

Вы должны поэкспериментировать с различными коэффициентами и проверить, какие из ваших требований будут пропускать только одну букву

0
ответ дан Dariusz Ostolski 11 March 2019 в 15:56
поделиться

Вам нужно использовать Levenshtein_distance

.

0
ответ дан balderman 11 March 2019 в 15:56
поделиться

Из того, что я понимаю, вы не смотрите на нечеткое совпадение. (Потому что вы не проголосовали против других ответов). Если вы просто пытаетесь оценить то, что вы указали в своем запросе, вот код. Я поставил некоторые дополнительные условия, где я напечатал соответствующее сообщение. Не стесняйтесь удалять их.

def wordmatch(baseword, wordtoMatch, lengthOfMatch):
    lis_of_baseword = list(baseword.lower())
    lis_of_wordtoMatch = list(wordtoMatch.lower()) 
    sum = 0
    for index_i, i in enumerate(lis_of_wordtoMatch):
        for index_j, j in enumerate(lis_of_baseword):
            if i in lis_of_baseword:
                if i == j and index_i <= index_j:
                    sum = sum + 1
                    break
                else:
                    pass
            else:
                print("word to match has characters which are not in baseword")
                return 0
    if sum >= lengthOfMatch and len(wordtoMatch) <= len(baseword):
        return 1
    elif sum >= lengthOfMatch and len(wordtoMatch) > len(baseword):
        print("word to match has no of characters more than that of baseword")
        return 0
    else:
        return 0

base = "Nick"
tomatch = ["Nick", "ick", "nik", "nic", "nck", "nickey","njick","nickk","nickn"]
wordlength_match = 3 # this says how many words to match in the base word. In your case, its 3

for t_word in tomatch:
    print(wordmatch(base,t_word,wordlength_match))

результат выглядит следующим образом

1
1
1
1
1
word to match has characters which are not in baseword
0
word to match has characters which are not in baseword
0
word to match has no of characters more than that of baseword
0
word to match has no of characters more than that of baseword
0

Дайте мне знать, послужило ли это вашей цели.

0
ответ дан areddy 11 March 2019 в 15:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: