0
votes

Faire une phrase de la valeur du dictionnaire

lien pour le fichier TXT d'origine https://medusa.ueut.be/fr/ Exercices / 187053144 / Description / WM6YAQUBWDHKPHQX / Media / iCD.txt

C'est ce que j'ai obtenu: xxx

Chaque caractère de la chaîne doit être remplacé par Choisir au hasard parmi tous les codes d'hippocrate possibles qui codent le caractère et le résultat de retour contiennent du code où le caractère est dans et l'index du caractère en valeur

donc. C'est la réponse que je suppose d'obtenir xxx

et, c'est la réponse que j'ai eue. xxx

pour Obtenez que j'ai écrit du code comme celui-ci xxx

Les codes représentant le caractère dans CoD_String doivent être dans la même commande avec une chaîne donnée originale, mais je suis gêné. Comment puis-je résoudre ce problème?


23 commentaires

Qu'entendez-vous par: codes Hippocrate qui codent le caractère ?


De plus, si vous incorporez des choix aléatoires dans ce code, comment vous attendez-vous à obtenir une réponse cohérente à chaque fois?


Cela signifie que je dois trouver chaque caractère de Dictionnaire de dictionnaire représentant des codes d'Hippocrate, de la valeur du dictionnaire que je dois vérifier que le caractère de la chaîne de donner est impliqué dans la valeur ou non. Ensuite, s'il est en valeur, obtenez la clé et l'index du caractère en valeur. C'est o.k pour obtenir une réponse diff tant que je reçois la localisation du personnage dans le dictionnaire. ex) donné_string = 'o' Dictionary = {'D89.1': «cryoglobulinemia»} La réponse doit être soit D89.1.3 ou D89.1.6


Pouvez-vous nous signaler où exactement le problème est? Comme l'indice de caractère incorrect? Est-ce que ça fait le mauvais code?


Ou dites-vous que vous correspondez correctement à des caractères à des codes valides, mais l'ordre de la sortie n'est pas préservé de manière à ce que les éléments correspondent correctement?


Ou dites-vous que vous correspondez correctement à des caractères à des codes valides, mais l'ordre de la sortie n'est pas préservé de manière à ce que les éléments correspondent correctement? <=== C'est ce que je veux dire merci


Ah ok je comprends maintenant. Laissez-moi essayer de courir cela et voyez si je peux comprendre ce que le problème est


Je viens de télécharger le code complet que j'ai fait. Je travaille sur la partie encodée merci pour votre aide


Pas de problème et est le fichier self.code Un fichier contenant le dictionnaire que vous avez fourni? Si oui, pourriez-vous fournir ce fichier aussi afin que je puisse être sûr que je gère votre code exactement de la même manière que vous êtes


Non, il s'agit d'une méthode de classe juste pour init je vais ajouter un lien pour l'original en ligne TXT.File


Je veux dire ici: avec Open (Self.Code) comme f , vous l'utilisez comme un fichier, donc je me demande ce que je devrais passer à la fonction init


TextFile devrait passer à travers la fonction init


obtenu, aussi je pense que vous avez peut-être oublié d'inclure réellement le lien car il est juste du texte régulier


désolé juste l'a ajouté


Donc, ma meilleure estimation est que vous comptez sur l'ordre de pouvoir être préservé dans les dictionnaires de Python, ce qui n'est pas toujours le cas, mais il y a beaucoup d'autres choses qui se passent ici, donc je tente lentement de comprendre ce que le problème pourrait être. Cela vous dérange-t-il si j'essaie de retravailler une solution différente (mais pour accomplir le même résultat)?


Bien sûr, j'essaie également d'autres moyens de résoudre ce problème.


Ok sonne bien, c'est en fait un problème assez intéressant. Au fait, le cas du caractère compte-t-il, ou devrais-je tout traiter comme cas insensible?


cas de caractère.


De plus, tous les caractères spéciaux et l'espace doivent être trouvés en valeur du dictionnaire.


Cela semble bien, et si chaque personnage n'est pas trouvé, une erreur doit-elle être lancée?


Vous envisagez également uniquement le premier index de chaque caractère d'une valeur particulière, ou tous les indices d'un caractère dans une valeur particulière


Oui, une erreur de valeur devrait être soulevée pour cette affaire et pour la deuxième question, je compte tous les indices d'un caractère en particulier de valeur, mais que cette condition n'a pas mentionné dans le problème, je ne suis donc pas vraiment sûr.


Ok je pense avoir une solution de travail, je viens de poster une réponse. Il prend en compte le ValueRorror ainsi que plusieurs indices dans une seule valeur


3 Réponses :


1
votes

Si la mémoire n'est pas un problème, je pense que vous devriez construire un index des choix possibles de chaque personnage du dictionnaire. Voici un exemple de code: xxx

notes:

  • Char_codes Index Tous les choix possibles de chaque caractère dans le dictionnaire

  • Il échantillon toute la clé du dictionnaire d'abord (uniformément aléatoire), puis il échantillon de la position dans la chaîne (uniformément aléatoire). Mais ce n'est pas un échantillonnage uniformément parmi tous les choix possibles d'un caractère.


1 commentaires

J'ai essayé de la même manière, mais la mémoire est émise. Merci pour votre réponse!



1
votes

Ceci devrait fonctionner pour votre Encode CODE> Fonction:

def encode(self, plaintxt):
    code_map = {}
    codes = []
    with open(self.code) as f:
        for line in f:
            line = line.rstrip().split(' ', 1)
            code_map[line[0]] = line[1]

    for ch in plaintxt:
        matches = []
        for key, value in code_map.items():
            pos = -1
            while True:
                pos = value.find(ch, pos + 1)
                if pos != -1:
                    matches.append((key, pos))
                else:
                    break

        if not matches:
            raise ValueError(f'Character {ch} cannot be encoded as there are no matches')

        code_tuple = random.choice(matches)
        code, idx = code_tuple
        codes.append(f'{code}.{idx}')

    return ' '.join(codes)


4 commentaires

@goldenasian BTW Je viens de faire une mise à jour qui le rend plus efficace spatiale, si vous souhaitez utiliser cette version à la place.


Pensez que celui-ci est une réponse parfaite! Merci beaucoup pour votre aide!


@goldenasian Pas de problème, c'était en fait un problème assez intéressant de travailler


@ weavarier99 et l'explication était vraiment facile à comprendre merci.



1
votes

En préparation de la transformation, vous pouvez créer un dictionnaire avec chaque lettre du mappage de la CIM Description dans une liste de codes qui le contiennent à divers index.

Ensuite, le processus de transformation serait simplement une question de cueillir une du code.index de l'entrée dans le dictionnaire pour chaque lettre de la chaîne donnée: p>

Préparation ... P>

with open(fileName,'r') as f:
    icd        = [line.split(" ",1) for line in f.read().split("\n")]
    icdLetters = dict() 
    for codeIndex,(code,description) in enumerate(icd):
        for letterIndex,letter in enumerate(description):
            icdLetters.setdefault(letter,[]).append((codeIndex,letterIndex))

import random
def letterToCode(letter):
    if letter not in icdLetters: return "-"
    codeIndex,letterIndex = random.choice(icdLetters[letter])
    return f"{icd[codeIndex][0]}.{letterIndex}"


given_string = 'You are what you eat.'
result       = [ letterToCode(c) for c in given_string ]


1 commentaires

Merci j'étais sur le point de chercher un moyen de sauver la mémoire :) C'était vraiment utile.