0
votes

Ajouter des noms de caractères et leurs lignes à un nouveau dictionnaire de tableau / liste

J'ai un script de film. Mon premier travail consiste à collecter les lignes de chaque personnage dans un dictionnaire.

Plus tard, je devrai mettre les données en une série. P>

En ce moment, j'ai tout le dialogue dans une liste, en commençant par les noms de personnages. Il est formaté comme ceci: p>

dialogue [0] 'Nom1 \ N (16 blouses) Yo, yo, bien que tu es ici homme.' P>

Tous les noms se terminent par \ n. Et puis toutes les lignes de dialogue commencent par 16 espaces bleus. Je pense que cela pourrait être utile mais je ne suis pas sûr de savoir comment utiliser cela. P>

J'ai essayé un certain nombre de choses, mais pas à peu près pas de chance. P>

          NAME1
Yo, Yo, good that you're here
man.

          NAME2
     (Laughing)
I don't think that's good!  We were
at the club, smoking, laughing -- doing
stuff.


3 commentaires

Utilisez cette regex pour scinder les données: '([A-Z0-9] +) \\ N [] {16} (. +)


Avant d'aller au script de film d'origine, veuillez vérifier ma méthode de réponse 2 car il semble que vous disposiez de dialogues multilés. Puisque vous savez déjà savoir scission entre les dialogues de caractères, cela pourrait fonctionner.


Dans le fichier texte d'origine, le nom est-il toujours précédé de plusieurs espaces blancs? et le dialogue commence depuis le début de la ligne?


3 Réponses :


0
votes

Réponse modifiée: Retour à votre fichier d'origine, si nous pouvons assumer que tous les noms de caractère ont 22 caractères blancheurs avant d'eux, nous pouvons faire quelque chose comme ceci:

{'NAME1': ["Yo, Yo, good that you're here", 'man.', ''], 'NAME2': ['(Laughing)', "I don't think that's good!  We were", 'at the club, smoking, laughing -- doing', 'stuff.', '']}


8 commentaires

Merci pour la réponse. Je reçois cette erreur: ValueError: Trop de valeurs pour déballer (attendu 2)


Pouvez-vous essayer cela? nom, ligne = item.split (maxsplit = 1)


Me donne le même message d'erreur: ValueError: Pas assez de valeurs pour déballer (attendu 2, obtenu 1)


Ce n'est pas la même erreur ... mais de toute façon, je suppose que vos données ont une mise en forme incohérente qui doit être nettoyée en premier @fishman


J'ai fait une édition pour afficher le script d'origine. Pourriez-vous m'expliquer comment j'aurais le même dictionnaire résulte de cela? Peut-être que ce serait plus facile de cette façon


Ce code me donne toutes les lignes du texte séparément? J'ai besoin des personnages comme une seule touche du dictionnaire, puis de leurs lignes


@ Poisson je ne comprends pas, c'est exactement le résultat ici, chaque personnage est une clé, puis une liste de leurs lignes est la valeur.


@fisman exactement comme si vous avez spécifié: "Nom1: [Line1, Line2, Line3 ...] Nom2: [Line1, Line2, Line3 ...]"



0
votes

Méthode 1:

divisé par '\ N' et bande. Le premier élément de la liste sera prénom et restant sera vos lignes. str.pop modifiera votre liste en place. Cette solution ne fonctionnera pas si vos dialogues ont des lignes multiles. xxx

méthode 2:

Lorsque vous avez des dialogues multilés Par exemple, les dialogues peuvent contenir le caractère «\ N», premier scission par première survenance de caractère «\ N». Le premier élément sera un nom et un élément suivant que nous divulguons davantage par '16 Whitapes '. xxx

comme fonction, xxx

NOTE: ICI pour la 2e division, vous pouvez remplacer par le motif de blanchiment que vous avez. Vous pouvez même le scinder avec une regex. J'ai utilisé des espaces simples ici.

code ajouté sur demande d'itération: xxx


11 commentaires

Lorsque vous exécutez la fonction, cela me donne cette erreur: AttributeError: 'Liste' Object n'a pas d'attribut 'Split'


Pouvez-vous coller un échantillon de dialogue que vous utilisez comme entrée dans la fonction de Pastebin comme entrée et mettez un lien ici.


AAH que vous avez mal compris. Je vous ai demandé de l'utiliser sur la question initiale. I.e. Dialogue [0] Je suppose est 1 dialogue de 1 caractère. Je pensais que vous avez déjà cette logique en place, n'est-ce pas?


Je souhaite donc que vous utilisiez cela pour chaque dialogue dans la liste de dialogue que vous avez, comme vous le mentionnez dans la question initiale.


Comment puis-je exécuter la fonction sur chaque élément de dialogue?


Essayez simplement de dialogue [0] à partir de maintenant et dites si cela fonctionne comme prévu. Je vais suggérer après ça.


Ahh oui, cela fonctionne parfaitement. Je reçois le nom du personnage, puis sa ligne comme valeur. Alors maintenant j'ai besoin du nom du personnage comme clé, puis toutes leurs lignes comme valeur


J'ai ajouté le code à itérer sur une liste de dialogue complète. dialogue_list est essentiellement votre liste de dialogue que vous avez. Le code que vous avez couru bien a bien fonctionné pour Dialogue_List [0]. Voir si cela fonctionne.


Le dialogue variable contient une liste de toutes mes lignes. Si je le change en dialogue_list, cela me donne un dictionnaire vide: {}


Ahh attend. Quand j'exécute la fonction, cela me donne ceci: AttributeError: l'objet 'Liste' n'a aucun attribut 'Split'; J'utilisais dialogue [0] et c'était me donnant juste te première ligne de mes lignes, pas un dictionnaire


Vous devez rechercher la variable Data dans l'extrait que j'ai ajouté sur votre demande, c'est le dictionnaire que vous souhaitez, la fonction d'analyse utilise simplement 1 dialogue unique, il s'agit simplement d'un autre utilitaire.



0
votes
  • Lignes de texte divisées li>
  • Créez des dict avec des clés uniques pour chaque acteur li>
  • Ajouter des lignes d'acteurs à DICT LI>

    EDIT: Ajout d'espaces dans Nom Regex, Nom de la bande Whiteespace P>

    {'NAME 1': ['YO, YO, '],
     'NAME1': ["YO, YO, good that you're here man.'"],
     'NAME2': ['YO, YO, good that ', "YO, YO, good that you're here'"]}
    

7 commentaires

Me donne une erreur d'index: IndexError: index de liste hors de portée


Cela a fonctionné, mais il y a une petite erreur où il montre un nom de caractère avec un espace après comme nom différent


Cela a fonctionné merci! Mais il y a un autre problème que je viens de remarquer, il y a 4 copies de chaque série de lignes. Comme dans, il y a des doublons


@fisman, que voulez-vous dire par ensemble de lignes, pourriez-vous donner un exemple?


Comme dans, il trouve toutes les lignes et c'est bien. Mais alors il y a 4 beaucoup de toutes ces lignes: ibb.co/sdvj4hm


@ Poissons pourriez-vous me fournir un échantillon d'entrée le plus petit qui reproduit cette erreur?


Je réinitialise toutes les variables et maintenant tout fonctionne à nouveau, pas de doublons. Merci beaucoup. C'était le code qui a fonctionné.