2016-11-17 1 views
0

So mein Problem ist, habe ich ein Array in einem anderen Skript namens "GA" erstellt, um die Wörter zu speichern, wie es schließlich 100 halten kann + Wörter. Ich versuche dann, dieses Array aufzurufen und nach den Wörtern in einem anderen txt doc zu suchen und auszugeben, wie oft jedes Wort gefunden wurde. Im ersten Teil meines Codes 'def ReadFile' öffne ich die Datei, säubere sie und zeige die Zeilen an, in denen diese Wörter sind.Python 3 mit Word-Zähler, um Zeile und wie oft ein Wort erscheint aus einem Array in Datei

Das Problem selbst ist, ich kann nicht scheinen, eine Weise zu finden, um anzuzeigen Zeilen mit dem Wort sowie Ausgabe, wie oft jeder getroffen wurde, hier ist mein Code.

import re 
from collections import Counter 
from Categories.GoingAce import GA 

path = "ChatLogs/Chat1.txt" 
file = path 

Lex = Counter(GA) 

count = {} 

def ReadFile(): 

    with open(file) as file_read: 
     content = file_read.readlines() 
     for line in content: 
      if any(word in line for word in Lex): 
       Cleanse = re.sub('<.*?>', '', line) 
       print(Cleanse) 

    file_read.close() 

def WordCount(): 

    with open(file) as f: 
     Lex = Counter(f.read().split()) 
    for item in Lex.items(): print ("{}\t{}".format(*item)) 
    f.close() 


#ReadFile() 
WordCount() 

Original-Eingang wird so aussehen

<200> <ilovethaocean> <08/22/06 12:15:36 AM> hi asl? 
<210> <a_latino_man559> <08/22/06 12:15:53 AM> 32 m fresno 
<210> <a_latino_man559> <08/22/06 12:15:53 AM> u? 
<200> <ilovethaocean> <08/22/06 12:16:12 AM> "13/f/ca, how r u?" 
<200> <a_latino_man559> <08/22/06 12:16:18 AM> 13? 

ich diese dann verwenden, um alles in Klammern zu verstecken:

Cleanse = re.sub('<.*?>', '', line) 
        print(Cleanse) 

die wie folgt ausgibt:

hallo asl?

32 m fresno

u?

"13/f/ca, wie r?"

13?

Zusammen mit, dass als wir als Beispiel sagen, mein GA-Array enthält (hallo, u, 13) mein perfektes Ziel wäre eine Ausgabe wie folgt sein:

hallo erschien 1mal line_num hallo asl?

Sie erschienen 2 mal line_num u?

Zeilennummer 13/f/ca, wie r?

usw.

+0

Kannst du den Eindruck pl reparieren? Leichtigkeit? – Bahrom

+0

Ich verstehe nicht, was mit dem Einzug falsch ist, es sieht gut aus? – Lewis20

+0

Betrachten Sie Ihre Funktionen, die Körper beider Funktionen sind nicht eingerückt. – Bahrom

Antwort

0

Hier ist ein Ansatz mit einem vereinfachten Beispiel:

from collections import defaultdict 

occurrences = defaultdict(list) 
words = ['cat', 'dog', 'bird', 'person'] 

with open(path_to_your_file) as f: 
    for i, line in enumerate(f.readlines(), start=1): 
     for word in words: 
      if word in line: 
       occurrences[word] += [(i, line)] 

for (word, matches) in occurrences.items(): 
    total_count = sum(line.count(word) for _, line in matches) 
    print '%s appeared %d time(s). Line(s):' % (word, total_count) 
    print '\n'.join(['\t %d) %s' % (line_num, line.strip()) for line_num, line in matches]) 

Bei einer Textdatei mit folgendem Inhalt:

cat, rat, dog, cat 
bird, person 
animal 
insect 
whatever 
another bird 
etc. 

Das Skript druckt

bird appeared 2 time(s). Line(s): 
    2) bird, person 
    6) another bird 
person appeared 1 time(s). Line(s): 
    2) bird, person 
dog appeared 1 time(s). Line(s): 
    1) cat, rat, dog, cat 
cat appeared 2 time(s). Line(s): 
    1) cat, rat, dog, cat 
+0

Danke für die Lösung ist es teilweise, was ich suche, aber leider brauche ich es, um den Satz anzuzeigen und dann geben Sie eine Gesamtzahl, wie oft jedes Wort am Ende erschienen ist oder die beiden in verschiedene Funktionen aufgeteilt haben wie ich – Lewis20

+0

@ Lewis20 versucht habe, können Sie eine Probe gereinigter Eingabedatei Inhalt (so dass es nicht nötig ist, mich mit Regex zu verwirren) mit einer Beispielliste von Wörtern und der erwarteten Ausgabe? Ich werde dann meine Frage für Ihren Anwendungsfall bearbeiten. – Bahrom

+0

Ich habe eine Probe so gut wie möglich hinzugefügt, um zu erklären, was ich bin – Lewis20

Verwandte Themen