1
votes

catégoriser la phrase en fonction des mots de la phrase pour plusieurs phrases

b = []
def ch_1(x,y):
    for i in x:
        if y in i:
            b.append("web")
        else:
            b.append("others")
    return b

1 commentaires

Prenez une liste de phrases. Faites une liste de mots "web" ou "autre" par phrase selon qu'ils contiennent l'un des mots d'une autre liste.


5 Réponses :


0
votes

Vous devez parcourir les deux listes données comme paramètres.

['web', 'web', 'others']

Sortie

def ch_1(x,y):
    b = []
    for i in x:
        for j in y:
            if j in i:
                b.append('web')
                break
        else:
            b.append('others')
    return b
print(ch_1(data, words))


7 commentaires

Je veux une seule catégorie pour chaque phrase, c'est-à-dire que la sortie doit être [web, web, others]


J'ai essayé cela mais la même erreur / confusion. La sortie doit être [web, web, others] car les deux premières phrases contiennent des mots web / online. Peux tu vérifier s'il te plaît


@anant Cela ne devrait pas. Ça marche pour moi. J'ai même essayé data = ["mon portail Web ne fonctionne pas", "en ligne est mieux que hors ligne", "j'aime aller à la pharmacie pour acheter des médicaments", "tester Web", "tester en ligne", "ne rien tester '] il donne [' web ',' web ',' others ',' web ',' web ',' others '] comme sortie.


Merci beaucoup. Ça a marché. En fait, j'ai essayé mais je n'ai pas utilisé de pause. Merci :)


Quel serait le changement de code si j'ai plus d'une liste à vérifier. Par exemple words_2 = ['pomme']. donc si la phrase a «pomme» dans sa catégorie, il y aura des fruits. Il y a donc maintenant trois catégories: Web, Fruits, Autres


@anant Bonjour, vous pouvez publier ceci comme une question distincte. Astuce: créez un dictionnaire avec des clés comme 'web' , 'fruits' et les valeurs correspondantes comme liste. Vous devrez ensuite parcourir ce dictionnaire avec dict_.items () ; si trouvé, ajoutez la clé dans la nouvelle liste, sinon ajoutez 'others' .


ok ce que je comprends que vous dites pour créer un dictionnaire comme dictio = {'fruits': ['apple'], 'web': ['web', 'online']} et parcourir le dictionnaire pour obtenir la catégorie souhaitée. mais pouvez-vous m'aider à comprendre le code pour cela s'il vous plaît



0
votes

Utilisation de dans l'opérateur pour vérifier la chaîne " contient 'sous-chaîne.

['web', 'web', 'others']

O / P:

data = ["my web portal is not working","online is better than offline", "i like going to pharmacy shop for medicines"]
words = ["web", "online"]

def ch_1(x,y):
    b = []
    for i in x:
        web = False
        for j in y:
            if j in i:
                web = True
                break
        if web:
            b.append("web")
        else:
            b.append("others")
    return b

print(ch_1(data,words))


2 commentaires

La sortie doit être [web, web, others]


@anant Avez-vous essayé mon code, la sortie sera la même que vous attendiez



0
votes

Ce code convient à n'importe quel nombre de mots dans mots et phrases dans data:

{
'i like going to pharmacy shop for medicines': ['others'],
'online is better than offline': ['online'],
'my web portal is not working': ['web']
}
data = [
    "my web portal is not working",
    "online is better than offline",
    "i like going to pharmacy shop for medicines"
]

words = ["web", "online"]


def ch_1(words, data):
    categories = {sentence: [] for sentence in data}
    for sentence in data:
        for word in words:
            if word in sentence:  # and categories[sentence] == [] ((if you want exactly one category for each sentence))
                categories[sentence].append(word)
    for sentence in categories:
        if categories[sentence] == []:
            categories[sentence].append('others')
    return categories

print(ch_1(words, data))


1 commentaires

Légère différence de sortie nécessaire. Cela devrait être Web, Web, autres



0
votes

Dans votre déclaration

TypeError: 'in <string>' requires string as left operand, not list

y est une liste. Vous ne montrez pas comment vous avez appelé ch_1, mais je suppose que vous avez utilisé ch_1 (données, mots). Le paramètre y est donc ["web", "online"], et vous essayez de trouver la liste entière dans i, qui est une chaîne. Donc, vous obtenez le message

if y in i:

car il s'attend à ce que y soit une chaîne à trouver dans la chaîne i. Lui fournir une liste n'a pas de sens. Si vous utilisiez y [0] dans i, ou y [1] dans i, alors vous fourniriez correctement une chaîne à rechercher dans i.


3 commentaires

Vous avez raison, lorsque je fournissais y [0] dans i, j'obtenais une sortie correcte, mais mon problème est que j'ai une longue liste de mots. Je ne peux pas fournir y [index] plusieurs fois. Toute solution pour ça


Essayez, le cas échéant (a dans i pour a dans y): je vous recommande également d'essayer de trouver des noms de variables significatifs.


Utilisé tout ne fonctionne pas. La solution fournie par @Arkistarvh Kltzuonstev a fonctionné. Merci pour l'aide



0
votes

Essayez la forme de [expression conditionnelle pour la phrase dans les données] :

data = [
    "my web portal is not working",
    "online is better than offline",
    "i like going to pharmacy shop for medicines",
]
words = ["web", "online"]

["web" if any(word in sentence for word in words) else "others" for sentence in data]


0 commentaires