File size: 10,244 Bytes
0d840ea |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
"""
Module d'analyse de texte pour détecter automatiquement le type de contrat nécessaire.
"""
def analyze_work_description(description):
"""
Analyse la description fournie par l'utilisateur pour déterminer le type de contrat approprié.
Args:
description (str): Description fournie par l'utilisateur
Returns:
list: Liste des types de contrats nécessaires ["Auteur (droits d'auteur)", "Image (droit à l'image)"]
"""
# Normaliser le texte pour l'analyse
texte = description.lower()
# Initialiser les scores
score_auteur = 0
score_image = 0
# DROITS D'AUTEUR - Mots-clés par catégorie
mots_textuels = ["livre", "roman", "nouvelle", "poème", "article", "essai", "mémoire", "thèse", "scénario",
"manuscrit", "rédaction", "texte", "écriture", "publication", "écrit", "éditorial", "blog",
"ouvrage", "brochure", "journal", "magazine", "recueil", "rédactionnel"]
mots_musicaux = ["musique", "composition", "partition", "chanson", "mélodie", "arrangement", "œuvre musicale",
"symphonie", "album", "single", "son", "enregistrement", "morceau", "opus", "instrumental",
"concert", "orchestration", "chant", "lyrics", "paroles", "refrain", "harmonie", "acoustique",
"piano", "guitare", "violon", "batterie", "chanter", "interprétation musicale"]
mots_graphiques = ["peinture", "dessin", "illustration", "graphisme", "logo", "infographie", "design",
"tableau", "esquisse", "croquis", "fresque", "œuvre plastique", "affiche", "aquarelle",
"sculpture", "gravure", "sérigraphie", "street art", "graffiti", "photographie artistique",
"collage", "estampe", "lithographie", "pochette", "couverture"]
mots_numeriques = ["logiciel", "site web", "application", "code", "programme", "script", "algorithme",
"jeu vidéo", "développement", "appli", "interface", "plateforme", "solution digitale",
"nft", "token", "crypto", "blockchain", "web3", "intelligence artificielle", "ia",
"données", "base de données", "système", "api", "plugin", "extension", "widget"]
mots_architecturaux = ["plan", "maquette", "conception architecturale", "design d'espace", "modélisation 3D",
"architecture", "structure", "bâtiment", "édifice", "monument", "urbanisme",
"aménagement", "paysagisme", "intérieur", "déco", "décoration"]
mots_autres_auteur = ["concept", "idée", "invention", "savoir-faire", "méthode", "formule", "base de données",
"compilation", "collection", "œuvre", "création", "synthèse", "travail", "production",
"droit d'auteur", "propriété intellectuelle", "copyright", "brevet"]
# DROITS À L'IMAGE - Mots-clés par catégorie
mots_image_personne = ["photographie", "portrait", "silhouette", "apparence", "visage", "corps", "identité visuelle",
"selfie", "avatar", "photo d'identité", "figure", "physionomie", "traits", "mannequin",
"modèle photo", "acteur", "actrice", "comédien", "comédienne", "figurant", "témoignage vidéo"]
mots_image_contexte = ["pose", "séance photo", "shooting", "mannequin", "modèle", "figurant", "mise en scène",
"studio photo", "apparition", "photoshoot", "objectif", "capturer", "appareil photo",
"caméra", "filmer", "enregistrer", "photographier", "filmer", "enregistrer"]
mots_image_visibilité = ["identifiable", "reconnaissable", "apparaître", "figurer", "posant", "visible",
"présent", "participation", "exposé", "exhibé", "montré", "droit à l'image",
"consentement", "image", "vidéo"]
mots_image_supports = ["photo", "image", "pellicule", "cliché", "instantané", "polaroid", "négatif",
"diapositive", "tirage", "impression photographique", "portrait", "photomaton"]
# COMBINAISON DROITS D'AUTEUR + DROITS À L'IMAGE
mots_videos = ["vidéo", "film", "court-métrage", "clip", "documentaire", "reportage", "captation", "tournage",
"filmé", "filmage", "enregistrement vidéo", "séquence", "rushes", "montage vidéo", "movie",
"cinéma", "réalisation", "vidéaste", "youtubeur", "youtubeuse", "influenceur", "influenceuse",
"vlog", "tiktok", "instagram", "content creator", "créateur de contenu"]
mots_performances = ["performance", "spectacle", "concert", "prestation", "apparition", "interprétation",
"récital", "show", "émission", "interview", "représentation", "apparition publique",
"scène", "plateaux", "théâtre", "danse", "chorégraphie", "ballet", "opéra", "music-hall",
"one man show", "stand-up", "humoriste", "conférence", "conférencier"]
mots_digital_personnel = ["stream", "livestream", "webinaire", "podcast vidéo", "tutoriel vidéo", "cours filmé",
"formation vidéo", "diffusion en direct", "chaîne youtube", "vlog", "direct",
"twitch", "live", "enregistrement zoom", "vidéoconférence", "stories", "reels"]
mots_œuvres_mixtes = ["œuvre audiovisuelle", "multimédia", "installation artistique interactive",
"réalité virtuelle", "réalité augmentée", "performance audiovisuelle", "mapping vidéo",
"projection", "hologramme", "expo interactive", "jeu immersif"]
# Vérifier les correspondances pour les droits d'auteur
for mot in mots_textuels + mots_musicaux + mots_graphiques + mots_numeriques + mots_architecturaux + mots_autres_auteur:
if mot in texte or any(m in texte for m in mot.split()):
score_auteur += 1
# Vérifier les correspondances pour les droits à l'image
for mot in mots_image_personne + mots_image_contexte + mots_image_visibilité + mots_image_supports:
if mot in texte or any(m in texte for m in mot.split()):
score_image += 1
# Vérifier les correspondances pour la combinaison (augmente les deux scores)
for mot in mots_videos + mots_performances + mots_digital_personnel + mots_œuvres_mixtes:
if mot in texte or any(m in texte for m in mot.split()):
score_auteur += 1
score_image += 1
# Cas spéciaux nécessitant une analyse plus contextuelle
if "chant" in texte or "chante" in texte or "chanson" in texte:
score_auteur += 1
if any(mot in texte for mot in ["vidéo", "film", "enregistrement vidéo", "youtube", "clip"]):
score_image += 1
if "exposit" in texte: # exposition/expositions
score_auteur += 1
if any(mot in texte for mot in ["photo", "portrait", "modèle", "personne"]):
score_image += 1
# Analyser les combinaisons courantes
if "voix" in texte:
score_auteur += 1
if "visage" in texte or "image" in texte or "vidéo" in texte:
score_image += 1
# Déterminer le type de contrat
types_contrat = []
if score_auteur > 0:
types_contrat.append("Auteur (droits d'auteur)")
if score_image > 0:
types_contrat.append("Image (droit à l'image)")
# Si aucun type détecté, suggérer les deux par sécurité
if not types_contrat:
return ["Auteur (droits d'auteur)", "Image (droit à l'image)"]
return types_contrat
def get_explanation(detected_types):
"""
Génère une explication claire des types de contrats détectés.
Args:
detected_types (list): Types de contrats détectés
Returns:
str: Explication pour l'utilisateur
"""
if len(detected_types) == 2:
return """
J'ai détecté que vous avez besoin d'un **contrat combiné de cession de droits d'auteur et de droits à l'image**.
Ce type de contrat est adapté lorsque:
- L'œuvre est protégée par le droit d'auteur (texte, musique, design, etc.)
- ET l'image d'une personne est visible et exploitée (vidéo, photo, etc.)
Vous pouvez modifier cette sélection si nécessaire.
"""
elif "Auteur (droits d'auteur)" in detected_types:
return """
J'ai détecté que vous avez besoin d'un **contrat de cession de droits d'auteur** uniquement.
Ce type de contrat est adapté pour les œuvres protégées comme:
- Textes, livres, articles
- Musiques, compositions
- Dessins, peintures, designs
- Logiciels, sites web
- Et autres créations originales
Si votre projet implique également l'image reconnaissable d'une personne, vous pourriez aussi avoir besoin d'un contrat de droits à l'image.
"""
elif "Image (droit à l'image)" in detected_types:
return """
J'ai détecté que vous avez besoin d'un **contrat de cession de droits à l'image** uniquement.
Ce type de contrat est adapté lorsque:
- L'image ou la vidéo d'une personne est utilisée
- La personne est identifiable ou reconnaissable
- Il n'y a pas d'œuvre originale protégée par le droit d'auteur
Si votre projet implique également une œuvre originale, vous pourriez aussi avoir besoin d'un contrat de cession de droits d'auteur.
"""
else:
return """
Je n'ai pas pu déterminer automatiquement le type de contrat nécessaire.
Veuillez sélectionner manuellement:
- Contrat de droits d'auteur: pour les œuvres originales (textes, musiques, designs, etc.)
- Contrat de droits à l'image: pour l'utilisation de l'image d'une personne
- Les deux: si les deux aspects sont présents
"""
|