Python: analyse négative / positive: application d'analyse de texte

Qu'est-ce qu'une analyse négative / positive?

Aperçu

En commençant par la psychologie, les humains ont analysé leurs émotions.

Parmi eux, en analyse négative / positive, principalement les remarques et les idées des gens Analysez si elle est positive (positive) ou rétrograde (négative).

L'analyse négative / positive peut être considérée comme un type de technique appelée «analyse des sentiments».

Cela extrait des expressions liées à l'évaluation et aux émotions contenues dans les phrases, etc. Il fait référence aux techniques d'analyse des émotions dans les phrases.

Les méthodes d'analyse négatives / positives incluent la classification mot par mot à l'aide d'un dictionnaire polaire et l'apprentissage en profondeur.

Dictionnaire de polarité

négatif/Les points positifs sont appelés "polarité"
Un dictionnaire de polarité est une collection de mots avec polarité.

Le dictionnaire polaire appelé PN Table ne polarisait pas manuellement un grand nombre de mots. Il est fait en attribuant des points de -1 à +1 à des mots très pertinents basés sur des mots avec une petite quantité d'informations de polarité.

En outre, il existe un «dictionnaire japonais de la polarité d'évaluation» publié sur la page du laboratoire Inui-Okazaki de l'université de Tohoku. C'est en le marquant comme neutre en plus de négatif et positif L'équilibre polaire des mots contenus dans le dictionnaire est équilibré.

Il existe également un "Dictionnaire des expressions polaires" créé par le laboratoire Yahoo! JAPAN.

#Sorties PNTable.
import pandas as pd
pn_df = pd.read_csv('./6020_negative_positive_data/data/pn_ja.dic',\
                    sep=':',
                    encoding='utf-8',
                    names=('Word','Reading','POS', 'PN')
                   )
print (pn_df)

image.png

Analyse négative / positive à l'aide du dictionnaire polaire

Analyse morphologique

L'analyse morphologique consiste à diviser une phrase en mots qui constituent la plus petite unité.

En effectuant une analyse morphologique, vous pouvez trouver le mot correspondant au dictionnaire de polarité. Cette fois, nous effectuerons une analyse morphologique à l'aide de MeCab et changerons le texte en une forme facile à lire.

import MeCab
mecab = MeCab.Tagger('')

title = open('./6020_negative_positive_data/data/aidokushono_insho.txt')
file = title.read()
title.close()

print(mecab.parse(file))

image.png

Liste des analyses morphologiques

Tout d'abord, facilitez l'exécution d'autres traitements en listant les résultats de l'analyse.

Lors de l'analyse morphologique avec MeCab, la dernière ligne est «vierge» et l'avant-dernière ligne est «EOS». Puisque ces deux lignes ne sont pas utilisées, supprimez-les.

Dans chaque ligne du résultat de l'analyse, le mot est suivi d'une tabulation et les autres informations sont séparées par une virgule.

import MeCab
import pandas as pd
import re

mecab = MeCab.Tagger('')

title = open('./6020_negative_positive_data/data/aidokushono_insho.txt')
file = title.read()
title.close()

def get_diclist(file):
    parsed = mecab.parse(file)
    #Séparez le résultat de l'analyse par un saut de ligne
    lines = parsed.split('\n')
    #Créer une nouvelle liste avec les deux dernières lignes supprimées
    lines = lines[0:-2]
    
    #Créer une liste de résultats d'analyse
    diclist = []
    for word in lines:
        #Créez des données séparées par des tabulations et des virgules
        data = re.split('\t|,',word)  
        datalist = {'BaseForm':data[7]}
        diclist.append(datalist)
    return(diclist)

wordlist = get_diclist(file)
print(wordlist)

image.png

Faire un jugement négatif / positif sur le résultat de l'analyse

Lire le dictionnaire de polarité (table PN) Vous pouvez donner la polarité aux mots qui apparaissent en les comparant avec la liste des résultats d'analyse.

Créez un dictionnaire de mots et de valeurs de polarité uniquement à partir de PNTable. Crée une nouvelle liste de mots et de valeurs de polarité qui existent dans le nouveau PNTable.

import pandas as pd
#Lisez le dictionnaire
pn_df = pd.read_csv('./6020_negative_positive_data/data/pn_ja.dic',\
                    sep=':',
                    encoding='utf-8',
                    names=('Word','Reading','POS', 'PN')
                   )

#Changer PNTable en type dict avec uniquement des mots et des valeurs de polarité
word_list = list(pn_df['Word'])
pn_list = list(pn_df['PN'])
pn_dict = dict(zip(word_list, pn_list))

#Extraire les mots qui existent dans le tableau PN de la liste des résultats d'analyse
def add_pnvalue(diclist_old):
    diclist_new = []
    for word in diclist_old:
        baseword = word['BaseForm']        
        if baseword in pn_dict:
            #Ajouter la valeur de polarité et son mot s'il existe dans le PNTable
            pn = float(pn_dict[baseword])
        else:
            #S'il n'existe pas, indiquez non trouvé
            pn = 'notfound'
        word['PN'] = pn
        diclist_new.append(word)
    return(diclist_new)

wordlist = get_diclist(file) #1.2.C'est la fonction utilisée dans 3.
pn_list = add_pnvalue(wordlist)

print(pn_list)

image.png

Mise en œuvre de l'analyse négative / positive

import re
import csv
import time
import pandas as pd
import matplotlib.pyplot as plt
import MeCab
import random
%matplotlib inline

#Lire le fichier
title = open('./6020_negative_positive_data/data/aidokushono_insho.txt')
file = title.read()
title.close()

#Créer une instance MeCab
mecab = MeCab.Tagger('')

#Lire le dictionnaire
pn_df = pd.read_csv('./6020_negative_positive_data/data/pn_ja.dic',\
                    sep=':',
                    encoding='utf-8',
                    names=('Word','Reading','POS', 'PN')
                   )


def get_diclist(file):
    parsed = mecab.parse(file)      
    lines = parsed.split('\n')  
    lines = lines[0:-2]         
    diclist = []
    for word in lines:
        l = re.split('\t|,',word)
        d = {'BaseForm':l[7]}
        diclist.append(d)
    return(diclist)

word_list = list(pn_df['Word'])
pn_list = list(pn_df['PN'])
pn_dict = dict(zip(word_list, pn_list))

def add_pnvalue(diclist_old):
    diclist_new = []
    for word in diclist_old:
        base = word['BaseForm']       
        if base in pn_dict:
            pn = float(pn_dict[base]) 
        else:
            pn = 'notfound'
        word['PN'] = pn
        diclist_new.append(word)
        
    pn_point = []
    for word in diclist_new:
        pn = word['PN']
        if pn != 'notfound':
            pn_point.append(pn)
            
    return(pn_point)

wordlist = get_diclist(file)
pn_list = add_pnvalue(wordlist)
    
plt.plot(pn_list)
plt.title(title)
plt.show

image.png

Recommended Posts

Python: analyse négative / positive: application d'analyse de texte
Analyse négative / positive 1 Application de l'analyse de texte
Python: analyse négative / positive: analyse négative / positive de Twitter à l'aide de RNN-Partie 1
Analyse négative / positive 3 Analyse négative / positive de Twitter (2)
Python: texte japonais: analyse morphologique
Text mining avec Python ① Analyse morphologique
Analyse de données python
Raclage et analyse positive négative des articles en ligne Bunharu
Texte de cluster en Python
Analyse de données avec python 2
Python: analyse des séries chronologiques
Text mining avec Python ① Analyse morphologique (re: version Linux)
Présentation de l'analyse de données python
Analyse vocale par python
Traitement de texte avec Python
Défiez l'analyse des composants principaux des données textuelles avec Python
Modèle d'analyse de données Python
Analyse d'association en Python
Analyse vocale par python
Application de Python 3 vars
Analyse de données avec Python
Application Python: Pandas # 3: Dataframe
Analyse de régression avec Python
Mon conteneur d'analyse de données python
Traitement de texte UTF8 avec python
Application Python: Pandas Partie 1: Basique
[Python] Analyse morphologique avec MeCab
Python pour l'analyse des données Chapitre 4
[Python] Inf représente l'infini positif
Techniques statistiques Python-Analyse statistique contre Python-
Analyse des émotions par Python (word2vec)
[Python] Notes sur l'analyse des données
Analyse des contraintes symétriques axiales avec Python
Application Python: visualisation de données, partie 2: matplotlib
Notes d'apprentissage sur l'analyse des données Python
Analyse de squelette planaire avec Python
Vtuber est-il positif? Est-ce négatif?
Analyse morphologique japonaise avec Python
Parler avec Python [synthèse vocale]
J'ai fait un texte Python
Python pour l'analyse des données Chapitre 2
Analyse de régression simple avec Python
Application Web avec Python + Flask ② ③
Analyse de données à l'aide de pandas python
Analyse des secousses musculaires avec Python
Analyse des émotions par SMS avec ML-Ask
Application Web avec Python + Flask ④
Python pour l'analyse des données Chapitre 3