Wie man ordnungsgemäß durchlaufen zwei Dateien Vergleich Strings in beiden Dateien gegeneinander

Ich habe Schwierigkeiten, eine Stimmungsanalyse von Tweets (Datei 1, Standard twitter json Antwort) gegen eine Liste von Wörtern (Datei 2, Tabulator getrennte, zwei Spalten) mit ihrer ihnen zugewiesenen Stimmung (entweder positiv oder negativ) zu machen.

Das Problem ist: Die Top-Loop läuft nur einmal und dann endet das Skript, während ich durch die Datei 1 bin, dann verschachtelt bin, dass ich durch die Datei 2 schleife bin und versuche zu vergleichen und eine laufende Summe der kombinierten Stimmung für jeden Tweet zu halten.

Also habe ich:

def get_sentiments(tweet_file, sentiment_file): sent_score = 0 for line in tweet_file: document = json.loads(line) tweets = document.get('text') if tweets != None: tweet = str(tweets.encode('utf-8')) #print tweet for z in sentiment_file: line = z.split('\t') word = line[0].strip() score = int(line[1].rstrip('\n').strip()) #print score if word in tweet: print "+++++++++++++++++++++++++++++++++++++++" print word, tweet sent_score += score print "====", sent_score, "=====" #PROBLEM, IT'S ONLY DOING THIS FOR THE FIRST TWEET file1 = open(tweetsfile.txt) file2 = open(sentimentfile.txt) get_sentiments(file1, file2) 

Ich habe die bessere Hälfte eines Tages ausgegeben, um herauszufinden, warum es alle Tweets ausdruckt, ohne dass die Schraube für Datei2 verschachtelt ist, aber mit ihr verarbeitet es nur den ersten Tweet dann beendet.

One Solution collect form web for “Wie man ordnungsgemäß durchlaufen zwei Dateien Vergleich Strings in beiden Dateien gegeneinander”

Der Grund, dass es nur einmal einmal ist, dass die for-Schleife das Ende der Datei erreicht hat, also hört es auf, da es keine weiteren Zeilen mehr gibt.

Mit anderen Worten, das erste Mal, wenn deine Loop läuft, geht es durch die gesamte Datei, und dann gibt es keine weiteren Zeilen zu lesen (da es das Ende der Datei erreicht hat), wird es nicht wieder schleifen, was zu nur einem führt Linie verarbeitet werden.

Also eine Möglichkeit, dies zu lösen ist, um die Datei "zurückzuspulen", können Sie das mit der seek des Dateiobjekts machen.

Wenn Ihre Dateien nicht groß sind, ist ein anderer Ansatz, sie alle in eine Liste oder ähnliche Struktur zu lesen und dann durchzulassen.

Allerdings, da Ihre Sentiment-Score ist ein einfacher Lookup, wäre der beste Ansatz wäre, ein Wörterbuch mit den Sentiment Scores zu bauen, dann suchen Sie jedes Wort in das Wörterbuch, um die allgemeine Stimmung des Tweets zu berechnen:

 import csv import json scores = {} # empty dictionary to store scores for each word with open('sentimentfile.txt') as f: reader = csv.reader(f, delimiter='\t') for row in reader: scores[row[0].strip()] = int(row[1].strip()) with open('tweetsfile.txt') as f: for line in f: tweet = json.loads(line) text = tweet.get('text','').encode('utf-8') if text: total_sentiment = sum(scores.get(word,0) for word in text.split()) print("{}: {}".format(text,score)) 

Die with statement schließt automatisch die Dateiverarbeitung ab. Ich benutze das csv Modul , um die Datei zu lesen (es funktioniert auch für tabulatorgetrennte Dateien).

Diese Zeile macht die Berechnung:

 total_sentiment = sum(scores.get(word,0) for word in text.split()) 

Es ist eine kürzere Möglichkeit, diese Schleife zu schreiben:

 tweet_score = [] for word in text.split(): if word in scores: tweet_score[word] = scores[word] total_score = sum(tweet_score) 

Die Methode der Methode der Wörterbücher nimmt ein zweites optionales Argument, um einen benutzerdefinierten Wert zurückzugeben, wenn der Schlüssel nicht gefunden werden kann. Wenn Sie dieses zweite Argument weglassen, wird es None . In meiner Schleife benutze ich es, um 0 zurückzukehren, wenn das Wort keine Punktzahl hat.

  • Wie mache ich eine Schleife, die jeden Tag eines bestimmten Monats berücksichtigt?
  • Programm, um die n-ten Primzahl zu finden
  • Schleife von 1 bis unendlich in Python
  • Python Progamming Loop
  • Warum gibt es einen Leistungsunterschied zwischen der Reihenfolge einer verschachtelten Schleife?
  • Ändern von etwas von Iteration über ein numpy Array zu Vektorisierung
  • Wenn sonst statement nicht nach dem elif korrekt folgt [duplizieren]
  • Ausbrechen von verschachtelten Schleifen [doppelte]
  • Wie schließe ich die Funktionen mit einer for-Schleife?
  • Wie korrigiere ich dies für Loop-Over-Tupel-Funktion in Python?
  • Pandas bearbeiten einen Zellenwert mit itertuples
  • Python ist die beste Programmiersprache der Welt.