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.
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)
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)
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)
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)
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)
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)
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