Как мне создать поиск, используя методы НЛП, которые ищут введенную именованную сущность, а также любые возможные вариации имени, которые она может иметь? - PullRequest
0 голосов
/ 28 февраля 2019

В настоящее время я использую TextBlob для создания чат-бота, и я до сих пор извлекал именованные сущности, используя извлечение имен существительных и находя pos-тег NNP.При вводе вопроса тестового пользователя, такого как «Последний сингл Уилла Смита?», Я правильно получаю «Уилл Смит».Но я хочу иметь возможность искать не только «Уилл Смит», но и «Уильям Смит», «Билл Смит», «Уилли Смит», «Билли Смит» - в основном другие широко известные варианты названия на английском языке.Я использую API Spotipy, когда пытаюсь получить художников Spotify.Что я сейчас делаю в PyCharm:

while True:
    response = input()
    searchQuery = TextBlob(response)
    who = []
    for item, tag in searchQuery.tags:
        if tag == "NNP":
            for nounPhrase in searchQuery.noun_phrases:
                np = TextBlob(nounPhrase)
                if item.lower() in np.words:
                    if nounPhrase not in who:
                        who.append(nounPhrase)

    print(who)
        if who:
            for name in who:
                if spotifyObject.search(name, 50, 0, 'artist', None):
                    searchResults = spotifyObject.search(name, 50, 0, 'artist', None)
                    artists = searchResults['artists']['items']
                    for a in artists:
                        print(a['name'])

1 Ответ

0 голосов
/ 01 марта 2019

Быстрый вопрос:

Почему вы хотите, чтобы «Билл Смит» появлялся под тем же поиском Уилла Смита?Я считаю, что они 2 разных художника.

Вариант 1 Если я правильно понимаю ваш вопрос, я полагаю, вы можете использовать регулярные выражения для имени исполнителя.

Например, имя LIKE% (любое имя кулака)% + smith

Поскольку я предполагаю, что поиск недействителен в вашем случае, если поиск возвращает "Уилл Саттон", например.


Опция 2

Хотите что-то похожее на функцию sense2vec SpaCy.Который возвращает слово с процентным сходством.Например, вы можете установить цель, которая возвращает результаты только> 70%.https://explosion.ai/demos/sense2vec

Если это бесполезно, то объясните свой вопрос еще раз;чуть более подробно (например, что делает правильный поиск)

Спасибо

...