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.

  • Pythonische Möglichkeit, FOR-Loop und IF-Anweisung zu kombinieren
  • Python Progamming Loop
  • Umwandlung für Loops zu Loops in Python
  • Liste der Ints durch die erste Ziffer jedes int
  • Mehr Pythonic / Pandorable Ansatz zum Looping über eine Pandas Serie
  • Bitte Code überprüfen mein Beispiel Python Programm
  • Brauchen Sie Hilfe, um eine Schleife hinzuzufügen, um Programm in Python neu zu starten
  • Ausbrechen von verschachtelten Schleifen [doppelte]
  • Welche Schleife kann ich verwenden, um zu iterieren, damit ich die folgende Ausgabe bekommen kann?
  • Ich versuche, meine Funktion zu beheben
  • Iterate über verschachtelte Listen, Tupel und Wörterbücher
  • Python ist die beste Programmiersprache der Welt.