Python: Negative / Positive Analyse: Twitter Negative / Positive Analyse mit RNN-Teil 1

Negative / Positive Analyse von Twitter mit RNN-Teil 1

Was ist RNN?

Es ist schwierig, negativ / positiv zu beurteilen, indem man den Kontext des Satzes mit dem Polarwörterbuch liest Eine ordnungsgemäße Analyse ist möglicherweise nicht möglich.

Hier aus dem Satzfluss unter Verwendung des rekursiven neuronalen Netzwerks (RNN) Erfahren Sie, wie Sie eine negative / positive Analyse durchführen.

Weil RNN zuvor berechnete Informationen speichern und lernen kann Sagen Sie das Wort voraus, das nach dem Satz kommt Es wird wegen der Wahrscheinlichkeit des Auftretens von Wörtern für die maschinelle Übersetzung verwendet.

Natürlich können Sie dies auf Japanisch tun, aber aufgrund der Beziehung der Daten werde ich es diesmal auf Englisch analysieren.

Negative / Positive Analyse von Twitter

Da hat Twitter eine Zeichenbegrenzung von 140 Zeichen Der Benutzer sendet einen kurzen Satz.

Weil Sie viele Daten erhalten können Es wird zur Analyse verschiedener natürlicher Sprachverarbeitungen einschließlich negativer und positiver Analysen verwendet.

Dieses Mal lernen wir die Verwendung von Twitter-Daten über US Airline. Die Daten verwenden Airline Twitter Sentiment, die von Abbildung 8 verteilt werden.

Klicken Sie hier für Lizenz

import pandas as pd

Tweet = pd.read_csv('./6020_negative_positive_data/data/Airline-Sentiment-2-w-AA.csv', encoding='cp932')
tweetData = Tweet.loc[:,['text', 'airline_sentiment']]
print(tweetData)

image.png

Datenbank erstellen

Löschen Sie häufige Wörter

RNN analysiert die Wortrelevanz, daher müssen Sie häufig vorkommende Wörter entfernen.

Häufig verwendete Wörter wie I und sogenannte Stoppwörter. Die Google-Suchmaschine schließt Stoppwörter vom Suchziel aus, um die Relevanz anderer Wörter zu erhöhen.

Da die Wörter @ und flight, die Antwort bedeuten, häufig auf Twitter erscheinen. Erstellen Sie Daten mit diesen entfernten Wörtern.

import nltk
import numpy as np
import pandas as pd
import re
from nltk.corpus import stopwords
#Wenn Sie eine Fehlermeldung mit Stoppwörtern erhalten, führen Sie bitte ↓ aus
#
#nltk.download('stopwords')

#Tweet-Daten laden
Tweet = pd.read_csv('./6020_negative_positive_data/data/Airline-Sentiment-2-w-AA.csv', encoding='cp932')
tweetData = Tweet.loc[:,['text','airline_sentiment']]

#Führt eine morphologische Analyse des englischen Tweets durch
def tweet_to_words(raw_tweet):
    
    # a~Erstellen Sie eine Liste von Wörtern, die mit z beginnen und durch Leerzeichen getrennt sind
    letters_only = re.sub("[^a-zA-Z@]", " ",raw_tweet) 
    words = letters_only.lower().split()
    
    # '@'Wann'flight'が含まれる文字Wannストップワードを削除します
    stops = set(stopwords.words("english"))  
    meaningful_words = [w for w in words if not w in stops and not re.match("^[@]", w) and not re.match("flight",w)] 
    return( " ".join( meaningful_words )) 

cleanTweet = tweetData['text'].apply(lambda x: tweet_to_words(x))
print(cleanTweet)

image.png

Erstellen Sie eine Datenbank mit Wörtern

Um herauszufinden, welche Wörter Negative und Positive beeinflussen Erstellen Sie einmal eine Datenbank mit allen Wörtern.

Verwenden Sie diese Datenbank, um Wörter häufig sowie negativ und positiv zu kennzeichnen.

import nltk
import numpy as np
import pandas as pd
import re
from nltk.corpus import stopwords

Tweet = pd.read_csv('./6020_negative_positive_data/data/Airline-Sentiment-2-w-AA.csv', encoding='cp932')
tweetData = Tweet.loc[:,['text','airline_sentiment']]

def tweet_to_words(raw_tweet):
    
    # a~Erstellen Sie eine Liste von Wörtern, die mit z beginnen und durch Leerzeichen getrennt sind
    letters_only = re.sub("[^a-zA-Z@]", " ",raw_tweet) 
    words = letters_only.lower().split()
    
    # '@'Wann'flight'が含まれる文字Wannストップワードを削除します
    stops = set(stopwords.words("english"))  
    meaningful_words = [w for w in words if not w in stops and not re.match("^[@]", w) and not re.match("flight",w)] 
    return( " ".join( meaningful_words )) 

cleanTweet = tweetData['text'].apply(lambda x: tweet_to_words(x)) 

#Erstellen Sie eine Datenbank
all_text = ' '.join(cleanTweet)
words = all_text.split()
print(words)

image.png

Wörter digitalisieren

Die numerische Kennzeichnung wird für jedes Wort basierend auf der Anzahl der Vorkommen des Wortes durchgeführt. Darüber hinaus erstellen wir eine neue Liste, indem wir die CleanTweet-Zeichenfolge digitalisieren, die dieses Mal zum Lernen verwendet wird.

import nltk
import numpy as np
import pandas as pd
import re
from nltk.corpus import stopwords
from collections import Counter

Tweet = pd.read_csv('./6020_negative_positive_data/data/Airline-Sentiment-2-w-AA.csv', encoding='cp932')
tweetData = Tweet.loc[:,['text','airline_sentiment']]

def tweet_to_words(raw_tweet):
    
    # a~Erstellen Sie eine Liste von Wörtern, die mit z beginnen und durch Leerzeichen getrennt sind
    letters_only = re.sub("[^a-zA-Z@]", " ",raw_tweet) 
    words = letters_only.lower().split()
    
    # '@'Wann'flight'が含まれる文字Wannストップワードを削除します
    stops = set(stopwords.words("english"))  
    meaningful_words = [w for w in words if not w in stops and not re.match("^[@]", w) and not re.match("flight",w)] 
    return( " ".join( meaningful_words )) 

cleanTweet = tweetData['text'].apply(lambda x: tweet_to_words(x))

#Erstellen Sie eine Datenbank
all_text = ' '.join(cleanTweet)
words = all_text.split()

#Zählen Sie, wie oft ein Wort erscheint
counts = Counter(words)
#In absteigender Reihenfolge sortieren
vocab = sorted(counts, key=counts.get, reverse=True)
vocab_to_int = {word: ii for ii, word in enumerate(vocab, 1)}
#print(vocab_to_int)
#Speichert die digitalisierte Zeichenfolge in einer neuen Liste
tweet_ints = []
for each in cleanTweet:
    tweet_ints.append([vocab_to_int[word] for word in each.split()])
    
print(tweet_ints)

image.png

Negative / positive Quantifizierung

Quantifizieren Sie die negative / positive Bewertung für jeden Satz. Dieses Mal wird es in negativ = 0, positiv = 1, neutral = 2 umgewandelt.

Diese negative / positive Zahl wird verwendet, wenn aus Wörtern generierte Sätze gelernt werden.

import numpy as np
import pandas as pd

#Tweet-Daten laden
Tweet = pd.read_csv('./6020_negative_positive_data/data/Airline-Sentiment-2-w-AA.csv', encoding='cp932')
tweetData = Tweet.loc[:,['text','airline_sentiment']]

#Tweet negativ/Konvertiert eine positive Zeichenfolge in eine Zahl
labels = np.array([0 if each == 'negative' else 1 if each == 'positive' else 2 for each in tweetData['airline_sentiment'][:]]) 

print(labels)

Richten Sie die Anzahl der Spalten aus

In den erstellten tweet_ints wird die Anzahl der verschiedenen Wörter für jeden Tweet gespeichert.

Sie müssen die Spalten der Liste beim Lernen ausrichten. Außerdem werden die Zeilen, deren Anzahl von Wörtern aufgrund des cleanTweet-Prozesses 0 geworden ist, aus jeder Liste gelöscht.

from collections import Counter

#Der Code-Inhalt des vorherigen Abschnitts-------------------------
import numpy as np
import pandas as pd

#Tweet-Daten laden
Tweet = pd.read_csv('./6020_negative_positive_data/data/Airline-Sentiment-2-w-AA.csv', encoding='cp932')
tweetData = Tweet.loc[:,['text','airline_sentiment']]

#Tweet negativ/Konvertiert eine positive Zeichenfolge in eine Zahl
labels = np.array([0 if each == 'negative' else 1 if each == 'positive' else 2 for each in tweetData['airline_sentiment'][:]])

# ----------------------------------------

#Speichert die digitalisierte Zeichenfolge in einer neuen Liste
tweet_ints = []
for each in cleanTweet:
    tweet_ints.append([vocab_to_int[word] for word in each.split()])

#Finden Sie die Anzahl der Wörter in Tweet heraus
tweet_len = Counter([len(x) for x in tweet_ints])
print(tweet_len)
seq_len = max(tweet_len)
print("Zero-length reviews: {}".format(tweet_len[0]))
print("Maximum review length: {}".format(max(tweet_len)))

#Entfernen Sie mit cleanTweet Zeilen mit 0 Wörtern aus jeder Liste
tweet_idx  = [idx for idx,tweet in enumerate(tweet_ints) if len(tweet) > 0]
labels = labels[tweet_idx]
tweetData = tweetData.iloc[tweet_idx]
tweet_ints = [tweet for tweet in tweet_ints if len(tweet) > 0]

#Erstellen Sie ein Framework mit i-row quantifizierten Wörtern, die von rechts geschrieben wurden, um die Anzahl der Spalten auszurichten
features = np.zeros((len(tweet_ints), seq_len), dtype=int)
for i, row in enumerate(tweet_ints):
    features[i, -len(row):] = np.array(row)[:seq_len]

print(features)

image.png

Zusammenfassung

Erstellen eines Datensatzes aus Tweet-Daten

1,Laden von Tweet-Daten

2,Morphologische Analyse von Tweet-Daten

3,Erstellen einer Datenbank mit Wörtern

4,Eigenschaften(Datenbank)Schaffung
import nltk
import numpy as np
import pandas as pd
import re
from collections import Counter
from nltk.corpus import stopwords

#Tweet-Daten laden
Tweet = pd.read_csv('./6020_negative_positive_data/data/Airline-Sentiment-2-w-AA.csv', encoding='cp932')
tweetData = Tweet.loc[:,['text','airline_sentiment']]

#Führt eine morphologische Analyse des englischen Tweets durch
def tweet_to_words(raw_tweet):
    
    # a~Erstellen Sie eine Liste von Wörtern, die mit z beginnen und durch Leerzeichen getrennt sind
    letters_only = re.sub("[^a-zA-Z@]", " ",raw_tweet) 
    words = letters_only.lower().split()
    
    # '@'Wann'flight'が含まれる文字Wannストップワードを削除します
    stops = set(stopwords.words("english"))  
    meaningful_words = [w for w in words if not w in stops and not re.match("^[@]", w) and not re.match("flight",w)] 
    return( " ".join(meaningful_words)) 

cleanTweet = tweetData['text'].apply(lambda x: tweet_to_words(x))

#Erstellen Sie eine Datenbank
all_text = ' '.join(cleanTweet)
words = all_text.split()

#Zählen Sie, wie oft ein Wort erscheint
counts = Counter(words)

#In absteigender Reihenfolge sortieren
vocab = sorted(counts, key=counts.get, reverse=True)
vocab_to_int = {word: ii for ii, word in enumerate(vocab, 1)}

#Speichert die digitalisierte Zeichenfolge in einer neuen Liste
tweet_ints = []
for each in cleanTweet:
    tweet_ints.append([vocab_to_int[word] for word in each.split()])

#Finden Sie die Anzahl der Wörter in Tweet heraus
tweet_len = Counter([len(x) for x in tweet_ints])
seq_len = max(tweet_len)
print("Zero-length reviews: {}".format(tweet_len[0]))
print("Maximum review length: {}".format(max(tweet_len)))

#Entfernen Sie mit cleanTweet Zeilen mit 0 Wörtern aus jeder Liste
tweet_idx  = [idx for idx,tweet in enumerate(tweet_ints) if len(tweet) > 0]
tweet_ints = [tweet for tweet in tweet_ints if len(tweet) > 0]

#Erstellen Sie ein Framework mit i-row quantifizierten Wörtern, die von rechts geschrieben wurden, um die Anzahl der Spalten auszurichten
features = np.zeros((len(tweet_ints), seq_len), dtype=int)
for i, row in enumerate(tweet_ints):
    features[i, -len(row):] = np.array(row)[:seq_len]
print(features)

Recommended Posts

Python: Negative / Positive Analyse: Twitter Negative / Positive Analyse mit RNN-Teil 1
Negative / Positive Analyse 2 Twitter Negative / Positive Analyse (1)
Negative / Positive Analyse 3 Twitter Negative / Positive Analyse (2)
Python: Negative / Positive Analyse: Textanalyse-Anwendung
Suchen Sie Twitter mit Python
Mit Python auf Twitter posten
Datenanalyse mit Python-Pandas
Negative / Positive Analyse 1 Anwendung der Textanalyse
Empfehlungs-Tutorial mit Assoziationsanalyse (Python-Implementierung)
Erstellung eines negativen / positiven Klassifikators mit BERT
Zeitvariationsanalyse von Schwarzen Löchern mit Python
Twitter mit Python3
Datenanalyse Python
Führen Sie eine Entitätsanalyse mit spaCy / GiNZA in Python durch
Scraping & Negative Positive Analyse von Bunharu Online-Artikeln
[Umgebungskonstruktion] Abhängigkeitsanalyse mit CaboCha mit Python 2.7
Scraping mit Python
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 2
[Python] [Word] [python-docx] Einfache Analyse von Diff-Daten mit Python
Sammeln von Informationen von Twitter mit Python (morphologische Analyse mit MeCab)
Erläuterung des Konzepts der Regressionsanalyse mit Python Teil 1
Hauptkomponentenanalyse mit Python von nim mit nimpy
Erläuterung des Konzepts der Regressionsanalyse mit Python Extra 1
[Technisches Buch] Einführung in die Datenanalyse mit Python -1 Kapitel Einführung-
Python: Zeitreihenanalyse
Datenanalyse mit xarray
Bearbeiten Sie Redmine mit Python Redmine
Fibonacci-Sequenz mit Python
Datenanalyse Übersicht Python
Sprachanalyse mit Python
Datenbereinigung mit Python
Verwenden von Python # externen Paketen
Altersberechnung mit Python
Python-Datenanalysevorlage
Assoziationsanalyse in Python
Orthologe Analyse mit OrthoFinder
Namensidentifikation mit Python
Hinweise zur Verwendung von Python-Unterprozessen
Sprachanalyse mit Python
Versuchen Sie es mit Tweepy [Python2.7]
Datenanalyse mit Python
Regressionsanalyse mit Python
[Einführung] Künstliche Satellitendatenanalyse mit Python (Google Colab-Umgebung)
Morphologische Analyse mit Igo + mecab-ipadic-neologd in Python (mit Ruby-Bonus)