2017-09-22 1 views
0

Ich möchte nur Nomen oder Nomen Gruppen aus riesigen Textdatei extrahieren. Der unten stehende Python-Code funktioniert einwandfrei, extrahiert aber die Substantive nur für die letzte Zeile. Ich bin ziemlich sicher, dass der Code erfordert ‚append‘, aber nicht wissen, wieExtrahieren Substantive mit POS-Tagging mit Python (Looping)

import nltk 
import pos_tag 
import nltk.tokenize 
import numpy 

f = open(r'infile.txt', encoding="utf8") 
data = f.readlines() 

tagged_list = [] 

for line in data: 
    tokens = nltk.word_tokenize(line) 
    tagged = nltk.pos_tag(tokens) 
    nouns = [word for word,pos in tagged \ 
      if (pos == 'NN' or pos == 'NNP' or pos == 'NNS' or pos == 'NNPS')] 
    downcased = [x.lower() for x in nouns] 
    joined = " ".join(downcased).encode('utf-8') 
    into_string = str(nouns) 

output = open(r"outfile.csv", "wb") 
output.write(joined) 
output.close() 

Das Ergebnis sieht wie folgt aus (ich ein Anfänger von Python bin.): Wohnung Verkehr der Innenstadt, die die Nomen Worte für die sind letzte Zeile der Datei. Ich möchte die Substantive für jede Zeile der Datei in einer Zeile speichern. Zum Beispiel sollten die Eingabedatei und die entsprechenden Ergebnisse wie folgt aussehen.

Input file: 
I like the milk. 
I like the milk and bread. 
I like the milk, bread, and butter. 

Output file: 
milk 
milk bread 
milk bread butter 

Hoffe jemand hilft, den Code oben zu beheben.

Antwort

1

Fügen Sie ein Zeilenende der for-Schleife hinzu und schreiben Sie es in die Datei.

... 
result = "" 
for line in data: 
    ... 
    result += joined 

output = open(r"outfile.csv", "w") 
output.write(str(result)) 
output.close() 

Wenn Sie append verwenden:

... 
result_list = [] 
for line in data: 
    ... 
    result_list.append(joined) 

output = open(r"outfile.csv", "w") 
output.write(str(result_list)) 
output.close() 

Sie können aber auch diese Schrift Art und Weise verwenden, wenn Sie die Ergebnisliste verwenden:

... 
output = open(r"outfile.csv", "w") 
for item in result_list: 
    output.write(str(item) + "\n") 
output.close() 
+0

wahrscheinlich besser eine Liste Ansatz . Sonst wird alles in einer Zeile ohne Leerzeichen geschrieben: P – Mangohero1

+0

Danke, ich habe gerade editiert. :) :) – Alperen

+0

Editiert es richtig wie ich kommentiert! haha – Mangohero1