2016-09-19 2 views
-5

Ich habe eine source.txt-Datei, die aus Wörtern besteht. Jedes Wort befindet sich in einer neuen Zeile.multidimensionales Wörterbuch erstellen, um Wortvorkommen zu zählen

apple 
tree 
bee 
go 
apple 
see 

Ich habe auch eine taget_words.txt Datei, wo die Wörter auch in jeweils einer Zeile sind.

apple 
bee 
house 
garden 
eat 

Jetzt habe ich für jeden der Zielwörter in der Quelldatei zu suchen. Wenn ein Zielwort gefunden wird, z.B. apfel, sollte ein Wörterbucheintrag für das Zielwort und jedes der 3 vorhergehenden und 3 folgenden Wörter gemacht werden. Im Beispielfall würde die

words_dict = {'apple':'tree', 'apple':'bee', 'apple':'go'} 

sein Wie kann ich Python sagen durch die Schaffung und das Wörterbuch bevölkert diese drei Worte vor und nach dem Eintritt in dem source_file zu beachten? Meine Idee war, Listen zu verwenden, aber idealerweise sollte der Code sehr effizient und schnell sein, da die Dateien aus einigen Millionen Wörtern bestehen. Ich denke, mit Listen ist die Berechnung sehr langsam.

from collections import defaultdict 

words_occ = {} 
defaultdict = defaultdict(words_occ) 
with open('source.txt') as s_file, open('target_words.txt') as t_file: 
    for line in t_file: 
     keys = [line.split()] 
    lines = s_file.readlines() 
    for line in lines: 
     s_words = line.strip() 
     # if key is found in s_words 
     # look at the 1st, 2nd, 3rd word before and after 
     # create a key, value entry for each of them   

Später, ich habe das Auftreten eines jeden Schlüssel, Wert-Paar zählen und die Zahl auf ein separates Wörterbuch hinzuzufügen, deshalb habe ich mit einem defaultdict gestartet.

Ich würde mich über jeden Vorschlag für den obigen Code freuen.

+2

Wenn Sie absolut keine Ahnung haben, wie dies zu tun ist, kann ich Ihnen vorschlagen, das Wörterbuch für Python zu lesen? Siehe hier: https: //docs.python.org/3.5/tutorial/datastructures.html#dictionaries – MooingRawr

+3

".. erstellen Sie ein mehrdimensionales Wörterbuch für das Wort Apfel". Es ist unklar (für mich), was genau du versuchst zu tun. – asherbar

+0

Was Sie beschreiben, klingt nicht wie ein "mehrdimensionales" Wörterbuch, nur ein normales. Schlagen Sie vor, dass Sie mit einer for-Schleife beginnen, die jede Zeile der Datei liest und schrittweise die gewünschte Struktur erstellt. Da, jetzt kannst du anfangen! – martineau

Antwort

0

Das erste Problem, mit dem Sie konfrontiert werden, ist Ihr mangelndes Verständnis für Diktate. Jede Taste kann nur einmal auftreten, wenn Sie also den Dolmetscher fragen Sie den Wert des einen geben Sie gaben Sie vielleicht eine Überraschung:

>>> {'apple':'tree', 'apple':'bee', 'apple':'go'} 
{'apple': 'go'} 

Das Problem ist, dass es nur einen Wert mit dem Schlüssel verknüpft sein können 'apple'.

Sie suchen nach geeigneten Datenstrukturen, aber StackOverflow dient zur Verbesserung oder Behebung von problematischem Code.

Verwandte Themen