Začněte nyníZačněte zdarma

Základní negace

Uživatelé ti velmi často řeknou, co nechtějí — a to je důležité pochopit! Negace je obecně v NLP složitý problém. Tady si ukážeme velmi jednoduchý přístup, který funguje v mnoha případech.

K dispozici máš seznam testů tests. Prozkoumej ho v Shellu — každý test je n-tice obsahující:

  • Řetězec se zprávou, která obsahuje entity.
  • Slovník, kde jsou entity klíče a hodnota je boolean říkající, zda jsou negovány.

Tvým úkolem je definovat funkci negated_ents(), která ve zprávě hledá negované entity.

Toto cvičení je součástí kurzu

Building Chatbots in Python

Zobrazit kurz

Pokyny k cvičení

  • Pomocí list comprehension zkontroluj, jestli se ve zprávě vyskytují slova "south" nebo "north", a extrahuj tyto entity.
  • Rozděl větu na části, které končí každou entitou. Postupuj takto:
    • Pomocí metody .index() na phrase najdi počáteční index každé entity e a přičti k němu délku entity, čímž získáš index jejího konce.
    • Začínaje hodnotou start=0 vytvárej řezy řetězce od start do end pro každé end v ends. Každý řez přidej do seznamu chunks. Nezapomeň při každé iteraci aktualizovat počáteční pozici.
  • Pro každou entitu: pokud se v daném řezu vyskytuje "not" nebo "n't", považuj tuto entitu za negovanou.

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

# Define negated_ents()
def negated_ents(phrase):
    # Extract the entities using keyword matching
    ents = [e for e in ["____", "____"] if e in phrase]
    # Find the index of the final character of each entity
    ends = sorted([____ + ____ for e in ents])
    # Initialise a list to store sentence chunks
    chunks = []
    # Take slices of the sentence up to and including each entitiy
    start = 0
    for end in ends:
        chunks.____(phrase[____:____])
        start = end
    result = {}
    # Iterate over the chunks and look for entities
    for chunk in chunks:
        for ent in ents:
            if ent in chunk:
                # If the entity contains a negation, assign the key to be False
                if "not" in chunk or "n't" in chunk:
                    result[ent] = ____
                else:
                    result[ent] = ____
    return result  

# Check that the entities are correctly assigned as True or False
for test in tests:
    print(negated_ents(test[0]) == test[1])
Upravit a spustit kód