{"id":576446,"date":"2025-06-18T15:41:56","date_gmt":"2025-06-18T14:41:56","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=pycharm&#038;p=576446"},"modified":"2025-06-18T16:10:34","modified_gmt":"2025-06-18T15:10:34","slug":"introduction-a-l-analyse-de-sentiments-en-python","status":"publish","type":"pycharm","link":"https:\/\/blog.jetbrains.com\/fr\/pycharm\/2025\/06\/introduction-a-l-analyse-de-sentiments-en-python\/","title":{"rendered":"Introduction \u00e0 l&#8217;analyse de sentiments en Python"},"content":{"rendered":"<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-576463 size-full\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/06\/PC-social-BlogFeatured-1280x720-2x-20.png\" alt=\"\" width=\"2559\" height=\"1439\" \/><\/figure>\n<p>L&#8217;analyse de sentiments est l&#8217;une des m\u00e9thodes les plus r\u00e9pandues d&#8217;analyse de texte. Elle permet de comprendre rapidement ce que ressentent les gens dans de nombreux domaines et a des applications utiles dans des activit\u00e9s telles que le service client, les \u00e9tudes de march\u00e9 et recherches sur les produits, et l&#8217;analyse concurrentielle.<\/p>\n<p>Comme tous les aspects du traitement du langage naturel (NLP), l&#8217;analyse de sentiments peut rapidement devenir complexe. Heureusement, <a href=\"https:\/\/www.jetbrains.com\/guide\/python\/\" target=\"_blank\" rel=\"noopener\">Python<\/a> a d&#8217;excellents paquets et outils qui rendent cette branche du traitement du langage naturel bien plus facile \u00e0 aborder.<\/p>\n<p>Dans cet article, nous allons passer en revue quelques-uns des paquets les plus populaires d&#8217;analyse des sentiments en Python, examiner leur mode de fonctionnement et voir comment vous pouvez entra\u00eener votre propre mod\u00e8le d&#8217;analyse avec des techniques de pointe. Nous allons \u00e9galement examiner quelques-unes des fonctionnalit\u00e9s de <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/pycharm\/data-science\/\" target=\"_blank\" rel=\"noopener\" data-type=\"link\" data-id=\"https:\/\/www.jetbrains.com\/pycharm\/data-science\/\">PyCharm<\/a> qui facilitent et acc\u00e9l\u00e8rent consid\u00e9rablement l&#8217;utilisation de ces paquets.<\/p>\n<h2 class=\"wp-block-heading\">Qu&#8217;est-ce que l&#8217;analyse de sentiments\u00a0?<\/h2>\n<p>L&#8217;analyse de sentiments consiste \u00e0 examiner le contenu d&#8217;un texte afin d&#8217;en d\u00e9terminer le ton \u00e9motionnel. Il ressort de cette d\u00e9finition que l&#8217;analyse de sentiments est un domaine tr\u00e8s vaste, qui fait appel \u00e0 un grand nombre de m\u00e9thodes de traitement du langage naturel.<\/p>\n<p>Il existe de nombreuses fa\u00e7ons de d\u00e9finir le \u00ab\u00a0ton \u00e9motionnel\u00a0\u00bb. Les m\u00e9thodes les plus couramment utilis\u00e9es d\u00e9terminent la <em>valence<\/em> ou la <em>polarit\u00e9<\/em> d&#8217;un texte, c&#8217;est-\u00e0-dire le degr\u00e9 de positivit\u00e9 ou de n\u00e9gativit\u00e9 du sentiment qui y est exprim\u00e9. Le ton \u00e9motionnel est g\u00e9n\u00e9ralement trait\u00e9 comme une question de classification de texte, dans laquelle le texte est cat\u00e9goris\u00e9 comme positif ou n\u00e9gatif.<\/p>\n<p>Prenons par exemple l&#8217;<a href=\"https:\/\/www.amazon.com\/AmazonBasics-12-Cup-Coffee-Reusable-Stainless\/dp\/B084ZH769P\/ref=sr_1_1_ffob_sspa?th=1\" target=\"_blank\" rel=\"noopener\">avis suivant sur un produit vendu par Amazon<\/a>\u00a0:<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-532284\" style=\"aspect-ratio: 3.373529411764706; width: 840px; height: auto;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/11\/Screenshot-2024-07-24-at-15.14.00.png\" alt=\"\" width=\"2294\" height=\"680\" \/><\/figure>\n<p>Ce client n&#8217;est \u00e0 l&#8217;\u00e9vidence pas satisfait, et les techniques d&#8217;analyse de sentiments classeraient cet avis comme n\u00e9gatif.<\/p>\n<p>Comparons-le \u00e0 l&#8217;avis d&#8217;un client beaucoup plus satisfait\u00a0:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-532295\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/11\/Screenshot-2024-07-24-at-15.13.21.png\" alt=\"\" width=\"1566\" height=\"408\" \/><\/figure>\n<p>Cette fois, les techniques d&#8217;analyse de sentiments classeraient cet avis comme positif.<\/p>\n<h3 class=\"wp-block-heading\">Diff\u00e9rents types d&#8217;analyse de sentiments<\/h3>\n<p>Il y a de nombreuses fa\u00e7ons d&#8217;extraire des informations \u00e0 caract\u00e8re \u00e9motionnel d&#8217;un texte. Nous allons examiner quelques-unes des principales m\u00e9thodes.<\/p>\n<h4 class=\"wp-block-heading\">M\u00e9thodes de d\u00e9finition du sentiment<\/h4>\n<p>Tout d&#8217;abord, les approches d&#8217;analyse d\u00e9finissent les sentiments et les \u00e9motions de diff\u00e9rentes fa\u00e7ons.<\/p>\n<p><strong>Binaire<\/strong>\u00a0: dans ce cas, la valence d&#8217;un document est divis\u00e9e en deux cat\u00e9gories, <em>positive<\/em> ou <em>n\u00e9gative<\/em>, comme avec le <a href=\"https:\/\/huggingface.co\/datasets\/stanfordnlp\/sst2\" target=\"_blank\" rel=\"noopener\">jeu de donn\u00e9es SST-2<\/a>. Il existe des classifications de valence apparent\u00e9es qui ajoutent une classe <em>neutre<\/em> (dans laquelle un texte n&#8217;exprime aucun sentiment concernant un sujet) ou m\u00eame une classe <em>conflit<\/em> (dans laquelle un texte exprime \u00e0 la fois des sentiments positifs et n\u00e9gatifs sur un sujet).<\/p>\n<p>Certains analyseurs de sentiments utilisent une mesure apparent\u00e9e pour classifier les textes comme <em>subjectifs<\/em> ou <em>objectifs<\/em>.<\/p>\n<p><strong>Granulaire<\/strong> : ce terme peut s&#8217;appliquer \u00e0 diff\u00e9rents types d&#8217;approches de l&#8217;analyse des sentiments, mais ici, nous faisons r\u00e9f\u00e9rence \u00e0 la d\u00e9composition de valences positives et n\u00e9gatives sur une \u00e9chelle de Likert. Un exemple connu est le <a href=\"https:\/\/huggingface.co\/datasets\/SetFit\/sst5\" target=\"_blank\" rel=\"noopener\">jeu de donn\u00e9es SST-5<\/a>, qui utilise une \u00e9chelle de Likert \u00e0 cinq points avec les classes <em>tr\u00e8s positif<\/em>, <em>positif<\/em>, <em>neutre<\/em>, <em>n\u00e9gatif<\/em> et <em>tr\u00e8s n\u00e9gatif<\/em>.<\/p>\n<p><strong>Continue<\/strong>\u00a0: la valence d&#8217;un texte peut \u00eatre mesur\u00e9e de fa\u00e7on continue, avec des scores indiquant dans quelle mesure le sentiment de l&#8217;auteur du texte est positif ou n\u00e9gatif. Par exemple, <a href=\"https:\/\/github.com\/cjhutto\/vaderSentiment\" target=\"_blank\" rel=\"noopener\">l&#8217;analyseur de sentiments VADER<\/a> attribue \u00e0 un texte un score entre -1 (<em>tr\u00e8s n\u00e9gatif<\/em>) et 1 (<em>tr\u00e8s positif<\/em>), les scores proches de 0 indiquant un sentiment neutre.<\/p>\n<p><strong>Bas\u00e9e sur les \u00e9motions<\/strong>\u00a0: \u00e9galement appel\u00e9e d\u00e9tection ou identification des \u00e9motions, cette approche tente de d\u00e9tecter l&#8217;\u00e9motion sp\u00e9cifique exprim\u00e9e dans un texte. Vous pouvez approcher cela de deux fa\u00e7ons. La d\u00e9tection cat\u00e9gorielle des \u00e9motions tente de classer le sentiments exprim\u00e9 par un texte au sein d&#8217;une liste restreinte d&#8217;\u00e9motions, g\u00e9n\u00e9ralement bas\u00e9e sur le <a href=\"https:\/\/www.tandfonline.com\/doi\/abs\/10.1080\/02699939208411068\" target=\"_blank\" rel=\"noopener\">mod\u00e8le d&#8217;Ekman<\/a>, qui inclut la <em>col\u00e8re<\/em>, le <em>d\u00e9go\u00fbt<\/em>, la <em>peur<\/em>, la <em>joie<\/em>, la <em>tristesse<\/em> et la <em>surprise<\/em>. <a href=\"https:\/\/huggingface.co\/j-hartmann\/emotion-english-distilroberta-base#appendix-%F0%9F%93%9A\" target=\"_blank\" rel=\"noopener\">Certains jeux de donn\u00e9es<\/a> sont con\u00e7us pour ce type de d\u00e9tection d&#8217;\u00e9motions. La d\u00e9tection dimensionnelle, moins r\u00e9pandue dans l&#8217;analyse de sentiments, tente quant \u00e0 elle de mesurer <a href=\"https:\/\/link.springer.com\/article\/10.1007\/s12144-014-9219-4\" target=\"_blank\" rel=\"noopener\">trois aspects \u00e9motionnels<\/a> d&#8217;un texte\u00a0: la <em>polarit\u00e9<\/em>, l&#8217;<em>excitation<\/em> (l&#8217;intensit\u00e9 de l&#8217;\u00e9motion) et la <em>dominance<\/em> (le degr\u00e9 de contr\u00f4le de l&#8217;expression \u00e9motionnelle).<\/p>\n<h4 class=\"wp-block-heading\">Niveaux d&#8217;analyse<\/h4>\n<p>Nous pouvons \u00e9galement prendre en compte diff\u00e9rents niveaux d&#8217;analyse d&#8217;un texte. Pour mieux comprendre cela, nous allons examiner un autre avis sur la machine \u00e0 caf\u00e9\u00a0:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-532307\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/11\/Screenshot-2024-07-24-at-16.43.21.png\" alt=\"\" width=\"1438\" height=\"374\" \/><\/figure>\n<p><strong>\u00c0 l&#8217;\u00e9chelle du document<\/strong>\u00a0: il s&#8217;agit du niveau d&#8217;analyse le plus basique, dans lequel un seul sentiment est retir\u00e9 de l&#8217;ensemble du texte. L&#8217;analyse au niveau du document peut convenir pour des textes tr\u00e8s courts, tels que des Tweets, mais risque de donner des r\u00e9ponses trompeuses en pr\u00e9sence de sentiments nuanc\u00e9s. Par exemple, si nous avions bas\u00e9 l&#8217;analyse de sentiments de cet avis sur l&#8217;ensemble du document, il serait class\u00e9 dans la cat\u00e9gorie neutre ou conflit, car nous avons deux sentiments oppos\u00e9s concernant la m\u00eame machine \u00e0 caf\u00e9.<\/p>\n<p><strong>\u00c0 l&#8217;\u00e9chelle des phrases<\/strong>\u00a0: le sentiment de chaque phrase est \u00e9valu\u00e9 s\u00e9par\u00e9ment. Pour l&#8217;avis sur la machine \u00e0 caf\u00e9, l&#8217;analyse \u00e0 l&#8217;\u00e9chelle des phrases nous dirait que la personne qui l&#8217;a \u00e9crit avait un avis positif sur certains aspects du produit, mais n\u00e9gatif sur d&#8217;autres. Toutefois, cette analyse ne nous dit pas ce qui a plu et d\u00e9plu \u00e0 cette personne.<\/p>\n<p><strong>Bas\u00e9e sur les aspects<\/strong>\u00a0: ce type d&#8217;analyse de sentiments va plus loin et tente de comprendre les sentiments des utilisateurs concernant des aspects sp\u00e9cifiques. Dans l&#8217;avis sur la machine \u00e0 caf\u00e9, l&#8217;utilisateur a mentionn\u00e9 deux aspects\u00a0: l&#8217;<em>apparence<\/em> du produit et le <em>bruit<\/em> qu&#8217;il fait. En extrayant ces aspects, nous obtenons des informations plus pr\u00e9cises sur ce que l&#8217;utilisateur aime et n&#8217;aime pas. Il a exprim\u00e9 un sentiment positif concernant l&#8217;apparence de la machine, mais n\u00e9gatif en ce qui concerne le bruit qu&#8217;elle fait.<\/p>\n<h4 class=\"wp-block-heading\">Associer l&#8217;analyse de sentiments aux autres techniques de traitement du langage naturel<\/h4>\n<p><strong>Bas\u00e9e sur l&#8217;intention<\/strong>\u00a0: dans ce dernier type d&#8217;analyse des sentiments, le texte est class\u00e9 de deux fa\u00e7ons\u00a0: en termes de sentiments exprim\u00e9s et en fonction du sujet du texte. Par exemple, si une entreprise de t\u00e9l\u00e9com re\u00e7oit un ticket se plaignant de nombreuses interruptions de service, elle peut classer l&#8217;intention ou le sujet dans la cat\u00e9gorie <em>fiabilit\u00e9 du service<\/em> et le sentiment comme <em>n\u00e9gatif<\/em>. Comme pour l&#8217;analyse des sentiments bas\u00e9e sur les aspects, cette approche apporte beaucoup plus d&#8217;informations et ne se contente pas de dire si le client est satisfait ou pas.<\/p>\n<h3 class=\"wp-block-heading\">Applications de l&#8217;analyse de sentiments<\/h3>\n<p>Vous avez d\u00e9j\u00e0 sans doute une id\u00e9e des cas d&#8217;utilisation potentiels de l&#8217;analyse de sentiments. Pour faire simple, elle peut \u00eatre utilis\u00e9e dans tous les domaines dans lesquels on peut collecter des avis ou des retours d&#8217;exp\u00e9rience sur un sujet par \u00e9crit. Les organisations comme les personnes peuvent utiliser l&#8217;analyse des sentiments pour faire de la veille sur les r\u00e9seaux sociaux et mesurer ce que les gens ressentent concernant une marque, une organisation ou un sujet.<\/p>\n<p>L&#8217;analyse des retours des clients permet d&#8217;identifier les sentiments exprim\u00e9s dans leurs avis ou leurs tickets. Les avis sur les produits peuvent \u00eatre analys\u00e9s pour d\u00e9terminer le degr\u00e9 de satisfaction des utilisateurs. Enfin, l&#8217;analyse de sentiments peut constituer un \u00e9l\u00e9ment cl\u00e9 des \u00e9tudes de march\u00e9 et de l&#8217;analyse concurrentielle, car le ressenti des clients vis-\u00e0-vis des tendances \u00e9mergentes, des fonctionnalit\u00e9s et des concurrents permet d&#8217;orienter les strat\u00e9gies d&#8217;une entreprise.<\/p>\n<h2 class=\"wp-block-heading\">Comment fonctionne l&#8217;analyse de sentiments\u00a0?<\/h2>\n<p>Au niveau g\u00e9n\u00e9ral, l&#8217;analyse de sentiments fonctionne en associant des mots (ou, dans les mod\u00e8les plus complexes, la tonalit\u00e9 g\u00e9n\u00e9rale d&#8217;un texte) \u00e0 une \u00e9motion. Les approches les plus courantes de l&#8217;analyse de sentiments appartiennent \u00e0 l&#8217;une des trois m\u00e9thodes d\u00e9crites ci-dessous.<\/p>\n<h3 class=\"wp-block-heading\">Approches bas\u00e9es sur un lexique<\/h3>\n<p>Ces m\u00e9thodes s&#8217;appuient sur un lexique qui inclut des scores de sentiments pour une s\u00e9rie de mots. Elles combinent ces scores en utilisant un ensemble de r\u00e8gles pour \u00e9tablir le sentiment g\u00e9n\u00e9ral d&#8217;un texte. Ces m\u00e9thodes sont souvent tr\u00e8s rapides et ont l&#8217;avantage de fournir des scores de sentiments plus fins. Cependant, le lexique doit \u00eatre compil\u00e9 manuellement et sa production peut donc \u00eatre longue et co\u00fbteuse.<\/p>\n<h3 class=\"wp-block-heading\">Mod\u00e8les de machine learning<\/h3>\n<p>Ces m\u00e9thodes entra\u00eenent un mod\u00e8le de machine learning, le plus souvent un classificateur Bayes na\u00eff, sur un jeu de donn\u00e9es contenant du texte avec des libell\u00e9s de sentiments, tels que des critiques de cin\u00e9ma. Ainsi, les textes sont g\u00e9n\u00e9ralement class\u00e9s comme positifs ou n\u00e9gatifs, et parfois comme neutres. Ces mod\u00e8les tendent \u00e9galement \u00e0 \u00eatre tr\u00e8s rapides, mais comme ils ignorent g\u00e9n\u00e9ralement la relation entre les mots contenus dans l&#8217;entr\u00e9e, ils peuvent \u00eatre moins efficaces pour des textes plus complexes qui comprennent des qualificateurs et des n\u00e9gations.<\/p>\n<h3 class=\"wp-block-heading\">Grands mod\u00e8les de langage (LLM)<\/h3>\n<p>Ces m\u00e9thodes reposent sur la finesse de l&#8217;adaptation d\u2019un grand mod\u00e8le de langage pr\u00e9-entra\u00een\u00e9 et bas\u00e9 sur un transformateur sur les m\u00eames ensembles de donn\u00e9es que ceux utilis\u00e9s pour entra\u00eener les classificateurs de machine learning mentionn\u00e9s pr\u00e9c\u00e9demment. Ces mod\u00e8les avanc\u00e9s sont capables de mod\u00e9liser les relations complexes entre les mots d&#8217;un texte, mais sont g\u00e9n\u00e9ralement plus lents que les deux autres m\u00e9thodes.<\/p>\n<h2 class=\"wp-block-heading\">Analyse de sentiments en Python<\/h2>\n<p><a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/python.html\" target=\"_blank\" rel=\"noopener\">Python<\/a> a un riche \u00e9cosyst\u00e8me de paquets pour le <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/tag\/nlp\/\">traitement du langage naturel<\/a>, ses utilisateurs ont donc l&#8217;embarras du choix en mati\u00e8re d&#8217;analyse de sentiments.<\/p>\n<p>Nous allons examiner quelques-uns des <a href=\"https:\/\/www.jetbrains.com\/guide\/python\/tutorials\/getting-started-pycharm\/installing-and-managing-python-packages\/\" target=\"_blank\" rel=\"noopener\">paquets Python<\/a> les plus populaires pour l&#8217;analyse de sentiments.<\/p>\n<h3 class=\"wp-block-heading\">Les meilleures biblioth\u00e8ques Python pour l&#8217;analyse de sentiments<\/h3>\n<h4 class=\"wp-block-heading\">VADER<\/h4>\n<p><a href=\"https:\/\/www.nltk.org\/api\/nltk.sentiment.vader.html\" target=\"_blank\" rel=\"noopener\">VADER (Valence Aware Dictionary and sentiments Reasoner)<\/a> est un analyseur de sentiments populaire bas\u00e9 sur l&#8217;utilisation d&#8217;un lexique. Int\u00e9gr\u00e9 dans le puissant <a href=\"https:\/\/www.nltk.org\/index.html\" target=\"_blank\" rel=\"noopener\">paquet NLTK<\/a>, cet analyseur fournit quatre scores de sentiments\u00a0: les degr\u00e9s de sentiments <em>positif<\/em>, <em>neutre<\/em> ou <em>n\u00e9gatif<\/em>, ainsi qu&#8217;un score de sentiments <em>mixte<\/em>. Les scores positif, neutre et n\u00e9gatif vont de 0 \u00e0 1, et indiquent la proportion de texte qui est positive, neutre ou n\u00e9gative. Les scores mixtes vont de \u20131 (tr\u00e8s n\u00e9gatif) \u00e0 1 (tr\u00e8s positif), et indiquent la valence globale du sentiment du texte.<\/p>\n<p>Prenons un exemple simple pour voir comment cela fonctionne :<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from nltk.sentiment.vader import SentimentIntensityAnalyzer\nimport nltk<\/pre>\n<p>Nous devons d&#8217;abord t\u00e9l\u00e9charger le lexique de VADER.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">nltk.download('vader_lexicon')<\/pre>\n<p>Nous allons ensuite cr\u00e9er une instance du <code>sentimentsIntensityAnalyzer()<\/code> de VADER et extraire les scores de sentiments avec la m\u00e9thode <code>polarity_scores()<\/code>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">analyzer = SentimentIntensityAnalyzer()\n\nsentence = \"I love PyCharm! It's my favorite Python IDE.\"\nsentiment_scores = analyzer.polarity_scores(sentence)\nprint(sentiment_scores)<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{'neg': 0.0, 'neu': 0.572, 'pos': 0.428, 'compound': 0.6696}<\/pre>\n<p>On peut voir que VADER a donn\u00e9 \u00e0 ce texte un score de sentiments de 0,67 et a class\u00e9 son contenu comme 43\u00a0% positif, 57\u00a0% neutre et 0\u00a0%\u00a0n\u00e9gatif.<\/p>\n<p>VADER examine les scores de sentiments de chaque mot dans son lexique et en les combinant avec un ensemble de r\u00e8gles nuanc\u00e9es. Par exemple, les qualificateurs peuvent augmenter ou r\u00e9duire l&#8217;intensit\u00e9 du sentiment d&#8217;un mot, de sorte qu&#8217;un qualificateur tel que \u00ab\u00a0un peu\u00a0\u00bb plac\u00e9 avant un mot r\u00e9duit l&#8217;intensit\u00e9 du sentiment, tandis que le qualificateur \u00ab\u00a0extr\u00eamement\u00a0\u00bb l&#8217;amplifie.<\/p>\n<p>Le lexique de VADER inclut des abr\u00e9viations telles que \u00ab\u00a0smh\u00a0\u00bb (pour \u00ab\u00a0shaking my head\u00a0\u00bb) et des \u00e9mojis, ce qui le rend particuli\u00e8rement bien adapt\u00e9 aux textes des r\u00e9seaux sociaux. La limitation principale de VADER est qu&#8217;il ne fonctionne que pour l&#8217;anglais, mais il existe des projets, tels que <a href=\"https:\/\/github.com\/brunneis\/vader-multi\" target=\"_blank\" rel=\"noopener\"><code>vader-multi<\/code><\/a> comme alternative. J&#8217;ai \u00e9crit un autre article expliquant <a href=\"https:\/\/t-redactyl.io\/blog\/2017\/04\/using-vader-to-handle-sentiment-analysis-with-social-media-text.html\" target=\"_blank\" rel=\"noopener\">comment VADER fonctionne<\/a> si vous souhaitez en apprendre plus sur ce paquet.<\/p>\n<h4 class=\"wp-block-heading\">NLTK<\/h4>\n<p>Vous pouvez aussi utiliser NLTK pour entra\u00eener votre propre classificateur de sentiments bas\u00e9 sur le machine learning, en vous appuyant sur les classificateurs de <code>scikit-learn<\/code>.<\/p>\n<p>Il existe de nombreuses fa\u00e7ons de traiter le texte \u00e0 alimenter dans ces mod\u00e8les, mais la mani\u00e8re la plus simple consiste \u00e0 se baser sur les mots pr\u00e9sents dans le texte, un type de mod\u00e9lisation de texte appel\u00e9 approche \u00ab sac de mots \u00bb (bag-of-words). Le type de sac de mots le plus simple consiste est la <em>vectorisation binaire<\/em>, dans laquelle chaque mot est trait\u00e9 comme une caract\u00e9ristique, la valeur de cette caract\u00e9ristique \u00e9tant 0 ou 1 (selon que ce mot est pr\u00e9sent ou absent dans le texte).<\/p>\n<p>Si vous d\u00e9couvrez le traitement des donn\u00e9es texte et le NLP, et si vous souhaitez savoir comment le texte peut \u00eatre converti en entr\u00e9es pour les mod\u00e8les de machine learning, j&#8217;ai fait une <a href=\"https:\/\/www.youtube.com\/live\/WYmyZBg2VFI?feature=shared&amp;t=261\" target=\"_blank\" rel=\"noopener\">intervention orale \u00e0 ce sujet<\/a>.<\/p>\n<p>Vous trouverez un exemple dans la <a href=\"https:\/\/www.nltk.org\/howto\/sentiment.html#sentiment-analysis\" target=\"_blank\" rel=\"noopener\">documentation de NLTK<\/a>, dans lequel un classificateur Naive Bayes est entra\u00een\u00e9 \u00e0 pr\u00e9dire si un texte est subjectif ou objectif. Dans cet exemple, un qualificateur de n\u00e9gation suppl\u00e9mentaire est ajout\u00e9 \u00e0 certains termes en fonction de r\u00e8gles qui indiquent la probabilit\u00e9 d&#8217;utilisation de ce mot ou de ce caract\u00e8re pour nier un sentiment exprim\u00e9 ailleurs dans le texte. Real Python propose \u00e9galement un <a href=\"https:\/\/realpython.com\/python-nltk-sentiment-analysis\/#customizing-nltks-sentiment-analysis\" target=\"_blank\" rel=\"noopener\">tutoriel sur l&#8217;analyse de sentiments<\/a> concernant l&#8217;entra\u00eenement de vos propres classificateurs avec NLTK, si vous souhaitez approfondir ce sujet.<\/p>\n<h4 class=\"wp-block-heading\">Pattern et TextBlob<\/h4>\n<p>Le paquet <a href=\"https:\/\/github.com\/clips\/pattern\" target=\"_blank\" rel=\"noopener\">Pattern<\/a> est une autre approche bas\u00e9e sur un lexique pour <a href=\"https:\/\/github.com\/clips\/pattern\/blob\/d25511f9ca7ed9356b801d8663b8b5168464e68f\/pattern\/text\/__init__.py#L2316\" target=\"_blank\" rel=\"noopener\">analyser les sentiments<\/a>. Il utilise le lexique <a href=\"https:\/\/github.com\/aesuli\/SentiWordNet\" target=\"_blank\" rel=\"noopener\">SentiWordNet<\/a>, dans lequel chaque groupe de synonymes (<em>synset<\/em>) provenant de <a href=\"https:\/\/github.com\/clips\/pattern\" target=\"_blank\" rel=\"noopener\">WordNet<\/a> re\u00e7oit un score de positivit\u00e9, de n\u00e9gativit\u00e9 et d&#8217;objectivit\u00e9. Les scores positifs et n\u00e9gatifs de chaque mot sont combin\u00e9s en utilisant une s\u00e9rie de r\u00e8gles pour parvenir \u00e0 un score final de polarit\u00e9. De m\u00eame, le score d&#8217;objectivit\u00e9 de chaque mot est combin\u00e9 pour produire un score de subjectivit\u00e9 final.<\/p>\n<p>Dans la mesure o\u00f9 WordNet contient des informations sur les cat\u00e9gories grammaticales, les r\u00e8gles peuvent prendre en compte la pr\u00e9sence d&#8217;adjectifs ou d&#8217;adverbes associ\u00e9s \u00e0 un mot modifiant son sentiment. L&#8217;ensemble de r\u00e8gles tient \u00e9galement compte des n\u00e9gations, des points d&#8217;exclamation et des \u00e9mojis, et peut m\u00eame traiter les idiomes et les sarcasmes.<\/p>\n<p>Toutefois, Pattern en tant que biblioth\u00e8que autonome est uniquement compatible avec Python\u00a03.6. Le mode d&#8217;utilisation le plus commun de Pattern consiste donc \u00e0 passer par <a href=\"https:\/\/textblob.readthedocs.io\/en\/dev\/\" target=\"_blank\" rel=\"noopener\">TextBlob<\/a>. Par d\u00e9faut, <a href=\"https:\/\/github.com\/sloria\/TextBlob\/blob\/e19171014bfba910d1e33527f46d514837da234e\/src\/textblob\/en\/sentiments.py#L15\" target=\"_blank\" rel=\"noopener\">l&#8217;analyseur de sentiments TextBlob<\/a> utilise sa propre impl\u00e9mentation de la biblioth\u00e8que Pattern pour g\u00e9n\u00e9rer des scores de sentiments.<\/p>\n<p>Voyons tout cela en action\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from textblob import TextBlob<\/pre>\n<p>Vous pouvez voir que nous ex\u00e9cutons la m\u00e9thode TextBlob sur notre texte, puis que nous extrayons le sentiment en utilisant l&#8217;attribut <code>sentiment<\/code>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">pattern_blob = TextBlob(\"I love PyCharm! It's my favorite Python IDE.\")\nsentiment = pattern_blob.sentiment\n\nprint(f\"Polarity: {sentiment.polarity}\")\nprint(f\"Subjectivity: {sentiment.subjectivity}\")<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Polarity: 0.625\nSubjectivity: 0.6<\/pre>\n<p>Pour notre exemple de phrase, Pattern dans TextBlob renvoie un score de polarit\u00e9 de 0,625 (relativement proche du score donn\u00e9 par VADER) et un score de subjectivit\u00e9 de 0,6.<\/p>\n<p>Mais il existe une deuxi\u00e8me fa\u00e7on d&#8217;obtenir les scores de sentiments dans TextBlob. Ce paquet inclut \u00e9galement un <a href=\"https:\/\/github.com\/sloria\/TextBlob\/blob\/e19171014bfba910d1e33527f46d514837da234e\/src\/textblob\/en\/sentiments.py#L53\" target=\"_blank\" rel=\"noopener\">classificateur Naive Bayes pr\u00e9-entra\u00een\u00e9<\/a>, qui permet de d\u00e9signer un extrait de texte comme positif ou n\u00e9gatif et indique la probabilit\u00e9 que le texte soit positif ou n\u00e9gatif.<\/p>\n<p>Pour utiliser cette m\u00e9thode, nous devons au pr\u00e9alable t\u00e9l\u00e9charger le module <code>punkt<\/code> et le jeu de donn\u00e9es <code>movie-reviews<\/code> de NLTK, qui est utilis\u00e9 pour entra\u00eener ce mod\u00e8le.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import nltk\nnltk.download('movie_reviews')\nnltk.download('punkt')\n\nfrom textblob import TextBlob\nfrom textblob.sentiments import NaiveBayesAnalyzer<\/pre>\n<p>Nous devons de nouveau ex\u00e9cuter <code>TextBlob<\/code> sur notre texte, mais cette fois-ci nous allons ajouter l&#8217;argument <code>analyzer=NaiveBayesAnalyzer()<\/code>. Ensuite, comme pr\u00e9c\u00e9demment, nous utilisons l&#8217;attribut de sentiments pour extraire les scores de sentiments.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">nb_blob = TextBlob(\"I love PyCharm! It's my favorite Python IDE.\", analyzer=NaiveBayesAnalyzer())\nsentiment = nb_blob.sentiment\nprint(sentiment)<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Sentiment(classification='pos', p_pos=0.5851800554016624, p_neg=0.4148199445983381)<\/pre>\n<p>Cette fois-ci nous obtenons un libell\u00e9 <code>pos<\/code> (positif) et le mod\u00e8le donne comme probabilit\u00e9 59\u00a0% positif et 41\u00a0% n\u00e9gatif.<\/p>\n<h4 class=\"wp-block-heading\">spaCy<\/h4>\n<p>Une autre option pour l&#8217;analyse de sentiments est d&#8217;utiliser <a href=\"https:\/\/spacy.io\/\" target=\"_blank\" rel=\"noopener\">spaCy<\/a>. spaCy est un autre paquet populaire de NLP pour le code Python qui offre une large gamme d&#8217;options de traitement du texte.<\/p>\n<p>La premi\u00e8re m\u00e9thode consiste \u00e0 utiliser le plugin <a href=\"https:\/\/spacy.io\/universe\/project\/spacy-textblob\" target=\"_blank\" rel=\"noopener\">spacytextblob<\/a> pour utiliser l&#8217;analyseur de sentiments TextBlob dans votre pipeline spaCy. Avant de faire cela, vous devez d&#8217;abord installer <code>spacy<\/code> et <code>spacytextblob<\/code>, puis t\u00e9l\u00e9charger le mod\u00e8le de langage appropri\u00e9.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import spacy\nimport spacy.cli\nfrom spacytextblob.spacytextblob import SpacyTextBlob\n\nspacy.cli.download(\"en_core_web_sm\")<\/pre>\n<p>Nous chargeons ensuite ce mod\u00e8le de langage et ajoutons <code>spacytextblob<\/code> \u00e0 notre pipeline de traitement de texte. TextBlob peut \u00eatre utilis\u00e9 via la m\u00e9thode <code>pipe<\/code> de spaCy, ce qui permet de l&#8217;inclure dans le cadre d&#8217;un pipeline de traitement de texte plus complexe, avec notamment des \u00e9tapes de pr\u00e9traitement telles que le balisage des parties du discours, la lemmatisation et la reconnaissance d&#8217;entit\u00e9s nomm\u00e9es. Le pr\u00e9traitement permet de normaliser et d&#8217;enrichir le texte, afin d&#8217;aider les mod\u00e8les \u00e0 obtenir le plus d&#8217;informations possibles \u00e0 partir des entr\u00e9es textuelles en aval.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">nlp = spacy.load('en_core_web_sm')\nnlp.add_pipe('spacytextblob')<\/pre>\n<p>Pour le moment, nous allons juste analyser notre exemple de phrase sans pr\u00e9traitement\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">doc = nlp(\"I love PyCharm! It's my favorite Python IDE.\")\n\nprint('Polarity: ', doc._.polarity)\nprint('Subjectivity: ', doc._.subjectivity)<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Polarity:  0.625\nSubjectivity:  0.6<\/pre>\n<p>Nous obtenons les m\u00eames r\u00e9sultats que lors de l&#8217;utilisation de TextBlob vue auparavant.<\/p>\n<p>La deuxi\u00e8me fa\u00e7on d&#8217;analyser les sentiments dans spaCy consiste \u00e0 entra\u00eener notre propre mod\u00e8le en utilisant la <a href=\"https:\/\/spacy.io\/api\/textcategorizer\" target=\"_blank\" rel=\"noopener\">classe TextCategorizer<\/a>. Cela permet d&#8217;entra\u00eener toute une gamme de <a href=\"https:\/\/spacy.io\/api\/architectures\" target=\"_blank\" rel=\"noopener\">mod\u00e8les cr\u00e9\u00e9s par spaCy<\/a> en utilisant un jeu de donn\u00e9es d&#8217;entra\u00eenement pour l&#8217;analyse de sentiments. Encore une fois, dans la mesure o\u00f9 cela fait partie du pipeline spaCy, vous disposez de nombreuses options de pr\u00e9-traitement de votre texte avant de passer \u00e0 l&#8217;entra\u00eenement de votre mod\u00e8le.<\/p>\n<p>Enfin, vous pouvez utiliser des LLM pour effectuer l&#8217;analyse de sentiments via <a href=\"https:\/\/spacy.io\/api\/large-language-models#sentiment\" target=\"_blank\" rel=\"noopener\">spacy-llm<\/a>. Cela vous permet de faire appel \u00e0 diff\u00e9rents LLM propri\u00e9taires, tels que ceux d&#8217;OpenAI, d&#8217;Anthropic, de Cohere et de Google, pour effectuer l&#8217;analyse de sentiments de vos textes.<\/p>\n<p>Cette approche diff\u00e8re l\u00e9g\u00e8rement des autres m\u00e9thodes que nous avons d\u00e9j\u00e0 pr\u00e9sent\u00e9es. Au lieu d&#8217;entra\u00eener un mod\u00e8le, on peut utiliser des mod\u00e8les g\u00e9n\u00e9ralistes comme GPT-4 pour pr\u00e9dire le sentiment d&#8217;un texte. Vous pouvez faire cela au moyen d&#8217;un apprentissage \u00ab\u00a0zero-shot\u00a0\u00bb (dans lequel le mod\u00e8le re\u00e7oit un prompt mais aucun exemple) ou d&#8217;un apprentissage \u00ab\u00a0few-shot\u00a0\u00bb (dans lequel ke mod\u00e8le re\u00e7oit un prompt et plusieurs exemples).<\/p>\n<h4 class=\"wp-block-heading\">Transformers<\/h4>\n<p>Le dernier paquet Python d&#8217;analyse de sentiments dont nous allons parler est <a href=\"https:\/\/huggingface.co\/docs\/transformers\/en\/index\" target=\"_blank\" rel=\"noopener\">Transformers<\/a> de <a href=\"https:\/\/huggingface.co\/\" target=\"_blank\" rel=\"noopener\">Hugging Face<\/a>.<\/p>\n<p>Hugging Face h\u00e9berge tous les principaux LLM open source accessible gratuitement (y compris les mod\u00e8les de vision par ordinateur et audio) et fournit une plate-forme pour l&#8217;entra\u00eenement, le d\u00e9ploiement et le partage de ces mod\u00e8les. Son paquet Transformers offre une large gamme de fonctionnalit\u00e9s (notamment l&#8217;analyse de sentiments) pour travailler avec les LLM h\u00e9berg\u00e9s par Hugging Face.<\/p>\n<h2 class=\"wp-block-heading\">Comprendre les r\u00e9sultats des analyseurs de sentiments<\/h2>\n<p>Maintenant que nous avons couvert tous les modes d&#8217;analyse de sentiments avec Python, vous vous demandez sans doute, \u00ab\u00a0Comment puis-je les appliquer \u00e0 mes donn\u00e9es\u00a0?\u00a0\u00bb<\/p>\n<p>Pour le comprendre, nous allons utiliser PyCharm pour comparer deux paquets, VADER et TextBlob. Leurs scores multiples de sentiments offrent de nouvelles perspectives sur nos donn\u00e9es. Nous allons utiliser ces paquets pour analyser le jeu de donn\u00e9es des avis Amazon.<\/p>\n<p>PyCharm Professional est un IDE Python puissant pour la <a href=\"https:\/\/www.jetbrains.com\/fr-fr\/pycharm\/data-science\/\" target=\"_blank\" rel=\"noopener\">science des donn\u00e9es<\/a> qui prend en charge la <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/auto-completing-code.html\" target=\"_blank\" rel=\"noopener\">saisie semi-automatique du code<\/a> Python, les inspections et le <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/debugging-code.html\" target=\"_blank\" rel=\"noopener\">d\u00e9bogage<\/a>, des <a href=\"https:\/\/www.jetbrains.com\/pycharm\/integrations\/#databases\" target=\"_blank\" rel=\"noopener\">bases de donn\u00e9es<\/a> enrichies, <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/running-jupyter-notebook-cells.html\" target=\"_blank\" rel=\"noopener\">Jupyter<\/a>, <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/using-git-integration.html\" target=\"_blank\" rel=\"noopener\">Git<\/a>, <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/conda-support-creating-conda-virtual-environment.html\" target=\"_blank\" rel=\"noopener\">Conda<\/a> et bien plus, tout cela pr\u00eat \u00e0 l&#8217;emploi. Vous disposez \u00e9galement de fonctionnalit\u00e9s incroyablement utiles, telles que <em>Column Statistics<\/em> et <em>Chart View<\/em> pour DataFrame, ainsi que les <a href=\"https:\/\/www.jetbrains.com\/pycharm\/integrations\/\" target=\"_blank\" rel=\"noopener\">int\u00e9grations<\/a> Hugging Face qui permettent de manipuler les LLM bien plus rapidement et facilement. Dans cet article, nous allons voir ce qu&#8217;apportent les fonctionnalit\u00e9s avanc\u00e9es de PyCharm pour la manipulation des dataframes, afin d&#8217;obtenir une vue d&#8217;ensemble rapide du mode de distribution des scores de sentiments entre les deux paquets.<\/p>\n<p>Si vous \u00eates pr\u00eat \u00e0 commencer votre propre projet d&#8217;analyse de sentiments, vous pouvez activer votre abonnement gratuit de trois mois \u00e0 PyCharm. Cliquez sur le lien ci-dessous, puis saisissez le code promotionnel\u00a0: <strong>PCSA24<\/strong>. Vous recevrez un code d&#8217;activation par e-mail.<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/fr-fr\/store\/redeem\/\" target=\"\" rel=\"noopener\">Activez votre abonnement de 3\u00a0mois<\/a><\/div>\n<\/div>\n<p>La premi\u00e8re chose \u00e0 faire est de charger les donn\u00e9es. Nous pouvons utiliser la m\u00e9thode <code>load_dataset()<\/code> du paquet Datasets pour t\u00e9l\u00e9charger ces <a href=\"https:\/\/huggingface.co\/datasets\/fancyzhx\/amazon_polarity\" target=\"_blank\" rel=\"noopener\">donn\u00e9es depuis Hugging Face Hub<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from datasets import load_dataset\namazon = load_dataset(\"fancyzhx\/amazon_polarity\")<\/pre>\n<p>Vous pouvez survoler le nom du jeu de donn\u00e9es pour voir la carte de jeu de donn\u00e9es Hugging Face directement dans PyCharm, afin d&#8217;obtenir facilement des informations sur les ressources Hugging Face sans quitter l&#8217;IDE.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-532334\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-29-at-16.59.07.png\" alt=\"\" width=\"2354\" height=\"1372\" \/><\/figure>\n<p>Le contenu de ce jeu de donn\u00e9es est visible ici\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">amazon<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">DatasetDict({\n    train: Dataset({\n        features: ['label', 'title', 'content'],\n        num_rows: 3600000\n    })\n    test: Dataset({\n        features: ['label', 'title', 'content'],\n        num_rows: 400000\n    })\n})<\/pre>\n<p>Le jeu de donn\u00e9es d&#8217;entra\u00eenement comporte 3,6\u00a0millions d&#8217;observations, tandis que celui de donn\u00e9es de test en comporte 400\u00a0000. Nous allons travailler avec le jeu de donn\u00e9es d&#8217;entra\u00eenement dans ce tutoriel.<\/p>\n<p>Nous allons maintenant charger le <code>sentimentsIntensityAnalyzer<\/code> de VADER et la m\u00e9thode TextBlob.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from nltk.sentiment.vader import SentimentIntensityAnalyzer\nimport nltk\n\nnltk.download(\"vader_lexicon\")\n\nanalyzer = SentimentIntensityAnalyzer()<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from textblob import TextBlob<\/pre>\n<p>Le jeu de donn\u00e9es d&#8217;entra\u00eenement comporte trop d&#8217;observations pour qu&#8217;elles puissent \u00eatre visualis\u00e9es confortablement, nous allons donc prendre au hasard un \u00e9chantillon de 1\u00a0000\u00a0avis repr\u00e9sentant le sentiment g\u00e9n\u00e9ral de toutes les personnes ayant donn\u00e9 leur avis.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from random import sample\nsample_reviews = sample(amazon[\"train\"][\"content\"], 1000)<\/pre>\n<p>Il faut maintenant g\u00e9n\u00e9rer les scores VADER et TextBlob pour chacun de ces avis. Nous allons examiner le texte de chaque avis, le soumettre aux analyseurs de sentiments, puis joindre les scores \u00e0 une liste d\u00e9di\u00e9e.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">vader_neg = []\nvader_neu = []\nvader_pos = []\nvader_compound = []\ntextblob_polarity = []\ntextblob_subjectivity = []\n\nfor review in sample_reviews:\n   vader_sent = analyzer.polarity_scores(review)\n   vader_neg += [vader_sent[\"neg\"]]\n   vader_neu += [vader_sent[\"neu\"]]\n   vader_pos += [vader_sent[\"pos\"]]\n   vader_compound += [vader_sent[\"compound\"]]\n  \n   textblob_sent = TextBlob(review).sentiment\n   textblob_polarity += [textblob_sent.polarity]\n   textblob_subjectivity += [textblob_sent.subjectivity]<\/pre>\n<p>Chacune de ces listes sera ensuite plac\u00e9e dans un DataFrame <a href=\"https:\/\/pandas.pydata.org\/\" target=\"_blank\" rel=\"noopener\">pandas<\/a> en tant que colonne distincte\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import pandas as pd\n\nsent_scores = pd.DataFrame({\n   \"vader_neg\": vader_neg,\n   \"vader_neu\": vader_neu,\n   \"vader_pos\": vader_pos,\n   \"vader_compound\": vader_compound,\n   \"textblob_polarity\": textblob_polarity,\n   \"textblob_subjectivity\": textblob_subjectivity\n})<\/pre>\n<p>Nous sommes maintenant pr\u00eats \u00e0 explorer nos r\u00e9sultats.<\/p>\n<p>En g\u00e9n\u00e9ral, c&#8217;est le moment o\u00f9 nous commen\u00e7ons \u00e0 cr\u00e9er du code pour l\u2019analyse exploratoire des donn\u00e9es. Cela peut se faire en utilisant la m\u00e9thode <code>describe<\/code> de pandas pour obtenir des statistiques r\u00e9capitulatives sur nos colonnes et en \u00e9crivant du code <a href=\"https:\/\/matplotlib.org\/\" target=\"_blank\" rel=\"noopener\">Matplotlib<\/a> ou <a href=\"https:\/\/seaborn.pydata.org\/\" target=\"_blank\" rel=\"noopener\">seaborn<\/a> pour visualiser nos r\u00e9sultats. Cependant, PyCharm dispose de plusieurs fonctionnalit\u00e9s pour acc\u00e9l\u00e9rer l&#8217;ensemble de ce processus.<\/p>\n<p>Nous allons maintenant imprimer notre DataFrame.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sent_scores<\/pre>\n<p>Un bouton s&#8217;affiche dans le coin sup\u00e9rieur droit, appel\u00e9 <em>Show Column Statistics<\/em>. En cliquant sur ce bouton, on obtient deux options\u00a0: <em>Compact<\/em> et <em>Detailed<\/em>. S\u00e9lectionnez <em>Detailed<\/em>.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-532356\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-29-at-17.10.32.png\" alt=\"\" width=\"898\" height=\"420\" \/><\/figure>\n<p>Nous disposons \u00e0 pr\u00e9sent de statistiques r\u00e9capitulatives, fournies dans le cadre de nos en-t\u00eates de colonnes\u00a0! En les examinant, on constate que le score mixte de VADER pr\u00e9sente une moyenne de 0,4 (m\u00e9diane = 0,6), tandis que le score de polarit\u00e9 de TextBlob renvoie une moyenne de 0,2 (m\u00e9diane = 0,2).<\/p>\n<p>Ce r\u00e9sultat indique qu&#8217;en moyenne, VADER a tendance \u00e0 estimer le m\u00eame ensemble d&#8217;avis plus positivement que TextBlob. Il montre \u00e9galement que pour les deux analyseurs de sentiments, la probabilit\u00e9 d&#8217;avis positifs est sup\u00e9rieure \u00e0 celle d&#8217;avis n\u00e9gatifs, et nous pouvons aller plus loin en v\u00e9rifiant certaines visualisations.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-532367\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-29-at-17.33.49.png\" alt=\"\" width=\"2816\" height=\"1534\" \/><\/figure>\n<p>Nous disposons aussi d&#8217;une autre fonctionnalit\u00e9 dans PyCharm, le DataFrame <em>Chart View<\/em>. Le bouton de cette fonction se trouve dans le coin sup\u00e9rieur gauche.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-532378\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-29-at-17.55.46.png\" alt=\"\" width=\"764\" height=\"454\" \/><\/figure>\n<\/div>\n<p>Cliquez sur ce bouton pour basculer vers l&#8217;\u00e9diteur de graphique. \u00c0 partir de l\u00e0, il devient possible de cr\u00e9er des visuels sans \u00e9crire de code, directement depuis notre DataFrame.<\/p>\n<p>Commen\u00e7ons par le score composite de VADER. Pour commencer \u00e0 cr\u00e9er ce graphique, allez dans <em>Show Series Settings <\/em>dans le coin sup\u00e9rieur droit.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-532389\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/11\/Screenshot-2024-11-29-at-17.57.11.png\" alt=\"\" width=\"634\" height=\"368\" \/><\/figure>\n<\/div>\n<p>Supprimez les valeurs par d\u00e9faut pour <em>X Axis<\/em> et <em>Y Axis<\/em>. Remplacez les valeurs de <em>X Axis <\/em> et <em>Y Axis<\/em> par <code>vader_compound<\/code>. Cliquez sur la fl\u00e8che pr\u00e8s du nom de variable dans le champ <em>Y Axis<\/em>, puis s\u00e9lectionnez <code>count<\/code>.<\/p>\n<p>Enfin, s\u00e9lectionnez <em>Histogram<\/em> dans les ic\u00f4nes de graphique, juste sous <em>Series Settings<\/em>. Le score composite VADER est susceptible d\u2019avoir une distribution bimodale, avec un l\u00e9ger pic autour de -0,8 et un pic beaucoup plus important autour de 0,9. Ces pics repr\u00e9sentent probablement la division des avis entre positifs et n\u00e9gatifs. Les avis positifs sont beaucoup plus nombreux que les avis n\u00e9gatifs.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-532401\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/12\/Screenshot-2024-12-02-at-09.26.23.png\" alt=\"\" width=\"2856\" height=\"1534\" \/><\/figure>\n<p>Nous allons r\u00e9p\u00e9ter le m\u00eame exercice et cr\u00e9er un histogramme pour visualiser la distribution des scores de polarit\u00e9 de TextBlob.<\/p>\n<p>TextBlob tend \u00e0 \u00e9valuer la plupart des avis comme neutres, avec tr\u00e8s peu d&#8217;avis fortement positifs ou n\u00e9gatifs. Pour expliquer les \u00e9carts des scores renvoy\u00e9s par ces deux analyseurs de sentiments, nous allons examiner deux avis VADER oppos\u00e9s, l&#8217;un \u00e9valu\u00e9 comme fortement positif et l&#8217;autre comme fortement n\u00e9gatif, mais que TextBlob a \u00e9valu\u00e9 comme neutres.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-532412\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/12\/Screenshot-2024-12-02-at-09.32.45.png\" alt=\"\" width=\"2850\" height=\"1528\" \/><\/figure>\n<p>Nous obtiendrons l&#8217;indice du premier avis que VADER a \u00e9valu\u00e9 comme positif, mais que TextBlob a \u00e9valu\u00e9 comme neutre\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sent_scores[(sent_scores[\"vader_compound\"] &gt;= 0.8) &amp; (sent_scores[\"textblob_polarity\"].between(-0.1, 0.1))].index[0]<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">42<\/pre>\n<p>Ensuite, nous allons extraire l&#8217;indice du premier avis que VADER a \u00e9valu\u00e9 comme n\u00e9gatif, mais que TextBlob a \u00e9valu\u00e9 comme neutre\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sent_scores[(sent_scores[\"vader_compound\"] &lt;= -0.8) &amp; (sent_scores[\"textblob_polarity\"].between(-0.1, 0.1))].index[0]<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">0<\/pre>\n<p>Commen\u00e7ons par extraire l&#8217;avis positif\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sample_reviews[42]<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\"I love carpet sweepers for a fast clean up and a way to conserve energy. The Ewbank Multi-Sweep is a solid, well built appliance. However, if you have pets, you will find that it takes more time cleaning the sweeper than it does to actually sweep the room. The Ewbank does pick up pet hair most effectively but emptying it is a bit awkward. You need to take a rag to clean out both dirt trays and then you need a small tooth comb to pull the hair out of the brushes and the wheels. To do a proper cleaning takes quite a bit of time. My old Bissell is easier to clean when it comes to pet hair and it does a great job. If you do not have pets, I would recommend this product because it is definitely well made and for small cleanups, it would suffice. For those who complain about appliances being made of plastic, unfortunately, these days, that's the norm. It's not great and plastic definitely does not hold up but, sadly, product quality is no longer a priority in business.\"<\/pre>\n<p>Cet avis semble mixte, avec toutefois une tendance au positif.<\/p>\n<p>Nous allons maintenant examiner l&#8217;avis n\u00e9gatif\u00a0:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">sample_reviews[0]<\/pre>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">'The only redeeming feature of this Cuisinart 4-cup coffee maker is the sleek black and silver design. After that, it rapidly goes downhill. It is frustratingly difficult to pour water from the carafe into the chamber unless it's done extremely slow and with accurate positioning. Even then, water still tends to dribble out and create a mess. The lid, itself, is VERY poorly designed with it's molded, round \"grip\" to supposedly remove the lid from the carafe. The only way I can remove it is to insert a sharp pointed object into one of the front pouring holes and pry it off! I've also occasionally had a problem with the water not filtering down through the grounds, creating a coffee ground lake in the upper chamber and a mess below. I think the designer should go back to the drawing-board for this one.'<\/pre>\n<p>Cet avis est n\u00e9gatif, sans ambigu\u00eft\u00e9. En comparant les deux, on peut dire que VADER semble \u00eatre plus pr\u00e9cis, mais qu&#8217;il a tendance \u00e0 accorder plus d&#8217;importance aux termes positifs dans un texte.<\/p>\n<p>La derni\u00e8re chose que nous pouvons prendre en compte est l&#8217;\u00e9quilibre entre la subjectivit\u00e9 et l&#8217;objectivit\u00e9 dans les diff\u00e9rents avis. Nous allons faire cela en cr\u00e9ant un histogramme du score de subjectivit\u00e9 de TextBlob.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-532423\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/12\/Screenshot-2024-12-02-at-09.36.19.png\" alt=\"\" width=\"2848\" height=\"1524\" \/><\/figure>\n<p>De fa\u00e7on int\u00e9ressante, la subjectivit\u00e9 est bien distribu\u00e9e dans les avis, la plupart d&#8217;entre eux \u00e9tant un m\u00e9lange d&#8217;arguments subjectifs et objectifs. Un petit nombre d&#8217;avis sont \u00e9galement tr\u00e8s subjectifs (proches de 1) ou tr\u00e8s objectifs (proches de 0).<\/p>\n<p>Ces scores nous offrent une bonne mani\u00e8re de segmenter les donn\u00e9es. Si vous souhaitez identifier concr\u00e8tement ce que les gens aiment ou n&#8217;aiment pas concernant les produits, vous pouvez examiner les avis ayant un faible score de subjectivit\u00e9 et les scores mixtes de VADER proches de 1 et -1, respectivement.<\/p>\n<p>En revanche, si vous voulez conna\u00eetre la r\u00e9action \u00e9motionnelle des gens face aux produits, vous pouvez utiliser ceux qui ont un score de subjectivit\u00e9 \u00e9lev\u00e9 et des scores mixtes VADER \u00e9lev\u00e9s et faibles.<\/p>\n<h2 class=\"wp-block-heading\">Points \u00e0 prendre en compte<\/h2>\n<p>Comme pour tout probl\u00e8me de traitement du langage naturel, plusieurs points sont \u00e0 prendre en compte lors de l&#8217;analyse de sentiments.<\/p>\n<p>L&#8217;un des crit\u00e8res les plus importants est la langue des textes \u00e0 analyser. De nombreuses m\u00e9thodes bas\u00e9es sur des lexiques ne fonctionnent que pour un nombre limit\u00e9 de langues. Ainsi, si vous travaillez sur des langues qui ne sont pas prises en charge par ces lexiques, il peut \u00eatre n\u00e9cessaire d&#8217;adopter une autre approche, comme l&#8217;utilisation de LLM optimis\u00e9s ou l&#8217;entra\u00eenement de vos propres mod\u00e8les.<\/p>\n<p>Plus les textes sont complexes, plus il est difficile de d\u00e9tecter correctement les sentimentss avec les mod\u00e8les bas\u00e9s sur le lexique et sur le sac de mots. Le sarcasme ou les indicateurs de contexte plus subtils peuvent \u00eatre difficilement rep\u00e9rables avec les mod\u00e8les les plus simples, et ces derniers risquent de ne pas \u00eatre en mesure de classer pr\u00e9cis\u00e9ment le sentiments de ces textes. Les LLM peuvent traiter des textes plus complexes, mais cela implique d&#8217;exp\u00e9rimenter avec diff\u00e9rents mod\u00e8les.<\/p>\n<p>Enfin, lors de l&#8217;analyse de sentiments, les m\u00eames probl\u00e8mes se produisent lorsque vous traitez un probl\u00e8me de machine learning. La qualit\u00e9 de vos mod\u00e8les d\u00e9pend directement de celle des donn\u00e9es d&#8217;entra\u00eenement que vous utilisez. Si vous ne pouvez pas obtenir des jeux de donn\u00e9es d&#8217;entra\u00eenement et de test haute qualit\u00e9 en rapport avec le probl\u00e8me \u00e0 traiter, vous ne pourrez pas pr\u00e9dire correctement le sentiments de votre public cible.<\/p>\n<p>Vous devez \u00e9galement vous assurer que vos cibles ont bien une relation avec votre probl\u00e8me m\u00e9tier. Il peut sembler s\u00e9duisant de cr\u00e9er un mod\u00e8le pour savoir si vos produits rendent vos clients \u00ab\u00a0tristes\u00a0\u00bb, \u00ab\u00a0en col\u00e8re\u00a0\u00bb ou \u00ab\u00a0d\u00e9go\u00fbt\u00e9s\u00a0\u00bb, mais si cela ne vous aide pas \u00e0 prendre une d\u00e9cision sur l&#8217;am\u00e9lioration de vos produits, votre probl\u00e8me restera sans solution.<\/p>\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n<p>Dans cet article de blog, nous avons examin\u00e9 en d\u00e9tail l&#8217;analyse de sentiments en Python et montr\u00e9 comment ce domaine complexe a \u00e9t\u00e9 rendu plus accessible par toute une s\u00e9rie de paquets puissants.<\/p>\n<p>Nous avons couvert les applications potentielles de l&#8217;analyse du sentiments, les diff\u00e9rentes fa\u00e7ons de l&#8217;\u00e9valuer, ainsi que les principales m\u00e9thodes de mesure du sentiments exprim\u00e9 par un texte. Nous avons \u00e9galement vu des fonctionnalit\u00e9s pratiques de PyCharm qui acc\u00e9l\u00e8rent et simplifient l&#8217;utilisation des mod\u00e8les et l&#8217;interpr\u00e9tation de leurs r\u00e9sultats.<\/p>\n<p>Les LLM sont actuellement au c\u0153ur du traitement du langage naturel, mais les anciennes techniques bas\u00e9es sur des analyseurs bas\u00e9s sur des lexiques ou des mod\u00e8les traditionnels de machine learning, tels que les classificateurs Naive Bayes, ont toujours leur place dans l&#8217;analyse de sentiments. Ces techniques sont \u00e0 privil\u00e9gier lors de l&#8217;analyse de textes simples, ou lorsque la vitesse, les pr\u00e9visions ou la simplicit\u00e9 de d\u00e9ploiement sont des priorit\u00e9s. Les LLM conviennent mieux aux textes plus complexes ou nuanc\u00e9s.<\/p>\n<p>Maintenant que vous avez compris les bases, vous pouvez apprendre comment proc\u00e9der \u00e0 une <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/12\/how-to-do-sentiment-analysis-with-large-language-models\/\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/12\/how-to-do-sentiments-analysis-with-large-language-models\/\">analyse des sentiments avec les LLM<\/a> dans notre tutoriel. Ce guide \u00e9tape par \u00e9tape vous apprend comment s\u00e9lectionner le mod\u00e8le le mieux adapt\u00e9 \u00e0 votre t\u00e2che, l&#8217;utiliser pour l&#8217;analyse de sentiments, voire l&#8217;optimiser vous-m\u00eame.<\/p>\n<p>Si vous souhaitez aller plus loin concernant le traitement du langage naturel ou le machine learning apr\u00e8s avoir lu l&#8217;article de blog, voici quelques ressources utiles\u00a0:<\/p>\n<ul>\n<li><a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/12\/how-to-do-sentiment-analysis-with-large-language-models\/\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/12\/how-to-do-sentiment-analysis-with-large-language-models\/\">D\u00e9couvrir comment r\u00e9aliser une analyse de sentiments avec des LLM<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2022\/06\/start-studying-machine-learning-with-pycharm\/\">Commencer l&#8217;\u00e9tude du machine learning avec PyCharm<\/a><\/li>\n<li><a href=\"https:\/\/lp.jetbrains.com\/research\/ml_methods\/\" target=\"_blank\" rel=\"noopener\" data-type=\"link\" data-id=\"https:\/\/lp.jetbrains.com\/research\/ml_methods\/\">Explorer les m\u00e9thodes de machine learning en ing\u00e9nierie logicielle<\/a><\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Commencer l&#8217;analyse de sentiments dans PyCharm d\u00e8s aujourd&#8217;hui<\/h2>\n<p>Si vous \u00eates pr\u00eat \u00e0 commencer votre propre projet d&#8217;analyse de sentiments, vous pouvez activer votre abonnement gratuit de trois mois \u00e0 PyCharm. Cliquez sur le lien ci-dessous, puis saisissez le code promotionnel\u00a0: <strong>PCSA24<\/strong>. Vous allez recevoir un code d&#8217;activation par e-mail.<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/fr-fr\/store\/redeem\/\" target=\"\" rel=\"noopener\">Activez votre abonnement de 3\u00a0mois<\/a><\/div>\n<\/div>\n\n\n<p><em>Auteur de l&#8217;article original en anglais<\/em> :<\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/11\/BK7A9876_korr_sRGB_8_1000x1500px_square_resized-200x200.jpg\" width=\"200\" height=\"200\" alt=\"Jodie Burchell\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                            <h4>Jodie Burchell<\/h4>\n                                        <p>Dr. Jodie Burchell is the Developer Advocate in Data Science at JetBrains, and was previously a Lead Data Scientist at Verve Group Europe. She completed a PhD in clinical psychology and a postdoc in biostatistics, before leaving academia for a data science career. She has worked for 7 years as a data scientist in both Australia and Germany, developing a range of products including recommendation systems, analysis platforms, search engine improvements and audience profiling. She has held a broad range of responsibilities in her career, doing everything from data analytics to maintaining machine learning solutions in production. She is a long time content creator in data science, across conference and user group presentations, books, webinars, and posts on both her own and JetBrain&#8217;s blogs.<\/p>\n                <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":813,"featured_media":576463,"comment_status":"closed","ping_status":"closed","template":"","categories":[952],"tags":[8557,3252,5377,8652],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/pycharm\/576446"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/pycharm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/types\/pycharm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/users\/813"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/comments?post=576446"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/pycharm\/576446\/revisions"}],"predecessor-version":[{"id":576508,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/pycharm\/576446\/revisions\/576508"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media\/576463"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/media?parent=576446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/categories?post=576446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/tags?post=576446"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/fr\/wp-json\/wp\/v2\/cross-post-tag?post=576446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}