0
votes

Comment créer un dictionnaire contenant des mots d'un texte sous forme de clés et du «subliste dans lequel il apparaît» comme des valeurs?

Ma question est assez similaire aux autres mais ici ma liste est une sorte de spécial.

Je dois créer un moteur de recherche à Python. Pour cela, je dois créer un dictionnaire comme je l'ai dit dans le titre. P>

Permettez-moi de vous donner le contexte: p>

J'ai fondamentalement un texte composé de plusieurs parties séparées par "[===========]". / p>

comme: p> xxx pré>

J'ai créé un algorithme qui combine ces listes jusqu'à ce que nous "touchent" un "==========" et Placez-les dans une seule liste où [Blablabla BlaBliblou] est la liste [o], [blanchablou] [blibloubla] est la liste [1] etc ... p>

L'algorithme: p>

    {blablabla:1, blablilou:1, blablablou:2, blibloubla:2, oubabababa:3,
baboulila:3}


9 commentaires

{BLABLABLA: 1, BLABLILOU: 1, BLABLABLOUCH: 2, BLIBLOUBLA: 2, OUBABABABABA: 3, Baboulila: 3} semble un {Word: Count} Dictionary. Est-ce?


Qu'entendez-vous par «mot: dictionnaire de compte»?


Dans Blablabla: 1 , qu'est-ce que 1 représente?


En fait, je sais comment créer un dictionnaire de compte de mots, mais mon problème est que je dois la combiner avec la liste précédente que j'ai créée (cela pourrait être quelque chose qui ne va pas avec elle)


J'ai: [[[Blablabla BlaBliblou] [Blablablou Blibloubla] [Oubabababa Baboulila]] Alors le "1" de Blablabla: 1 signifie que blablabla est dans le numéro subliste 1


d'accord maintenant je comprend


Mais ce serait blablabla: 0 en fait au lieu de 1, c'est mon erreur


Avez-vous vérifié la réponse que j'ai postée, répond-il à vos spécifications?


Je viens de le voir, je vais faire: merci beaucoup pour vous répondre! Je vous ferai savoir


3 Réponses :


0
votes

On dirait-il? XXX PRE>

Il vous obtiendra la sortie attendue: P>

defaultdict(list,
            {'blablabla': [0],
             'blabliblou': [0],
             'blablablou': [1],
             'blibloubla': [1],
             'oubabababa': [2],
             'baboulila': [2]})


1 commentaires

Merci piyush! Cela fonctionne presque mais les clés sont les lettres. La sortie que j'ai est comme: {b: [0], l: [0]} etc



0
votes
from collections import defaultdict

l = [ ["blablabla", "blabliblou"], ["blablablou", "blibloubla"], ["oubabababa", "baboulila"] ]

d = defaultdict(list)
for i, line in enumerate(l):
    [d[word].append(i) for word in line]

print(dict(d))
>>> {'blablabla': [0], 'oubabababa': [2], 'blablablou': [1], 'blabliblou': [0], 'baboulila': [2], 'blibloubla': [1]}


18 commentaires

Le texte BLAbla n'est pas le texte que je dois utiliser mais je l'ai utilisé comme exemple pour faciliter la compréhension. Donc, j'ai écrit: 'Importer Re à partir des collections Importation de défautDict Dict = Ouvrir ("Docs-parl-mini.txt", "R", codage = "utf-8") Liste = [] d = fichier.read () x = = re.split (r "= +", d) pour i in gamme (len (x)): liste.append (x [i]) d = defaultDict (liste) pour i, ligne inumérer (1): [D [MOT]


Oh désolé, je ne sais pas vraiment comment mettre des pièces de code dans mes messages


Dans pour i, ligne en énumérant (l) c'est un l (lettre) non 1. Mais je pense que vous rencontrerez d'autres erreurs. Tout d'abord, vous ne devriez pas utiliser list comme nom pour les variables, car il écrase la liste méthode, et c'est pourquoi vous obtenez la prochaine erreur


Oh ok je l'ai réparé! Et maintenant j'ai: D = DefaultDict (Liste) TypeError: Premier argument doit être appelable ou aucun


'list = []' 'd = fichier.read ()' 'x = re.split (r "= +", d)' 'pour i in gamme (len (x)):' 'Liste.append (x [i]) 'Cette partie du code est celle que j'ai écrite pour créer ma liste


Vous ne devez jamais utiliser list , dict , tuple etc .. comme nom de vos variables


Quel erreur ! Merci de me dire, je suis confus! Je vais corriger


Dans mon code l , que vous avez mis écrire comme 1, est la liste des listes que vous obtenez de votre regex, [["BLABLABLA"] ["BLABLABLOU"] ["BLABLABLOU", "BLABLABLOU ] "[" Oubabababa "," Baboulila "]]] , alors adaptez votre code approppatoire


Oui Ne t'inquiète pas! Je me demandais juste si c'était quelque chose qui ne va pas avec ça


Pourriez-vous s'il vous plaît vérifier mon code ci-dessus? Je l'ai mis à jour


Cela ne fonctionne pas comme je le ferais: les clés sont les lettres et les valeurs sont les sublistes où la lettre se produit


Pouvez-vous poster un exemple d'une liste réelle l ? Même juste quelques éléments si trop grand


Il s'agit d'un échantillon du texte de base: en préposé, je Souhaièreté Que des observions de la minute de silence. =========== Madame la Présidente, c'est une motion de procédre. VOUS AVEZ PROBABLE DE L'AVEZ APPRIS PRESSE QU DES CROMES Immondes ONT Été Perpétrés au Sri Lanka. ========== MA Question Porte sur ONU SUJET QUI EST À L'ORDRE DU JOUR DU JEUDI ET QUE JE SOULÈTAI DONC UNE NOUVELLE FOI. ========== à la Demande d'Un Député English, Monsieur Doltelau, une éjàle introduite; Elle est une résolution des signatures de la Récolté de nombros


l = {[en préposé, je souille que nous observions une minute de silence. Madame la Présidente, c'est une motion de procédre. VOUS AVEZ PROBABLEMENT APPRIS PRESSE QU DES CROMES INCLONDES ONT ÉTÉPÉTÉRÉES AU SRI LANKA.], [QUESTION MA PORTE SUR UN SUJET QUI EST À L'ORDRE DU JEUDI ET QUE JE SOULÈVEAI DONC UNE NOUVELLE FOI.], [ La Demande d'Un Député English, Monsieur Doltelau, une déjuité Ajàle Introduite; Elle est une signature de Récolté de nombreux Dont la Mienne.]}


Changer [d [Word] .append (i) pour mot en ligne] à [d [word] .append (i) pour mot en ligne.split ()]


Ça marche ! Étonnante ! Juste un autre problème HAHA: Avez-vous une fonction pour ignorer les symboles comme: "(". "."? Parce que l'algorithme suppose "(situation" et "situation" comme deux mots distincts ".


La solution rapide consiste à utiliser [d [word] .append (i) pour mot dans re.findall ("\ w +", ligne)] , de toute façon, je suggère de regarder des packages comme NLTK.org si votre projet est à propos de l'analyse de texte


Merci beaucoup, c'est gentil de votre part



0
votes

Ceci est le code que j'ai jusqu'à présent: xxx

Il semble fonctionner, mais les clés sont les lettres et les valeurs sont les sublistes où la lettre se produise


0 commentaires