Python наивный символ соответствия строки - PullRequest
0 голосов
/ 11 сентября 2018

Я написал очень наивное совпадение поиска строки токена. Это немного слишком наивно, хотя, как и в следующем коде, это вернуло бы всех художников в списке художников из-за того, что 'a r i z o n a' маркируется.

import collections
import re

def __tokenised_match(artist, search_artist):
        matches = []
        if len(re.split(r'[\\\s/-]', search_artist)) > 1:
            a = [artist.sanitisedOne, search_artist]
            bag_of_words = [ collections.Counter(re.findall(r'\w+', words)) for words in a]
            sumbags = sum(bag_of_words, collections.Counter())
            print(sumbags)
            for key, value in sumbags.items():
                if len(re.findall(r'\b({k})\b'.format(k=key), search_artist)) > 0 and value > 1:
                    matches.append(artist)

        if len(matches):
            return matches


artists = [
{ 'artist': 'A R I Z O N A', 'sanitisedOne': 'a r i z o n a'},
{ 'artist': 'Wutang Clan', 'sanitisedOne': 'wutang clan'}
]

search_artist = 'a r i z o n a'

for artist in artists:
    print(__tokenised_match(artist, search_artist))

это создаст сумбаг, как это:

Счетчик ({'a': 4, 'r': 2, 'i': 2, 'z': 2, 'o': 2, 'n': 2})

Счетчик ({'a': 2, 'wutang': 1, 'clan': 1, 'r': 1, 'i': 1, 'z': 1, 'o': 1, 'n ': 1})

это что-то вроде крайнего случая, но мне интересно, как я могу противостоять этому виду крайнего случая. было бы хорошо, если бы «wutang clang» совпадал, но когда он состоит из таких букв, как эта… это немного много и он вернет каждого артиста из-за совпадения дважды.

1 Ответ

0 голосов
/ 11 сентября 2018

Основная проблема в том, что вы возвращаете успех только в одном матче. Это убьет вашу точность для любого артиста с легко подобранным токеном в имени. Мы могли бы настроить ваш алгоритм для соответствия определенному проценту слов или для выполнения набора букв, отношения пересечений и объединений, но ...

Я рекомендую вам использовать что-то более сильное, например, сходство строк , которое легко найти в коде Python. Будучи уже упакованным, намного проще в использовании, чем кодирование вашего собственного решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...