2017-09-08 5 views
2

파이썬에서 'nltk'를 사용하여 pos 태그를 사용하고 있으며 아래 코드는 인쇄 할 때 완벽하게 작동합니다.파이썬에서 함수를 작성하면 마지막 문자열 (파이썬) 만 저장됩니다.

import nltk 
import pos_tag 
import nltk.tokenize 
import numpy 

f = open(r'C:\Users\sample_data.txt') 
data = f.readlines() 

#Parse the text file for NER with POS Tagging 
for line in data: 
    tokens = nltk.word_tokenize(line) 
    tagged = nltk.pos_tag(tokens) 
    #print (tagged) 

output = open(r"C:\Users\output3.csv", "w") 
output.write(str(tagged)) 
f.close() 

위의 코드를 인쇄 할 때 결과는 다음과 같습니다. 정확히 원하는 것입니다.

[('This', 'DT'), ('is', 'VBZ'), ('a', 'DT'), ('simple', 'JJ'), ('sentence', 'NN')] 
[('I', 'PRP'), ('love', 'VBP'), ('this', 'DT'), ('company', 'NN'), ('.', '.'), ('This', 'DT'), ('company', 'NN'), ('is', 'VBZ'), ('so', 'RB'), ('good', 'JJ'), ('.', '.')] 
[('I', 'PRP'), ('am', 'VBP'), ('not', 'RB'), ('inovlved', 'VBN'), ('with', 'IN'), ('this', 'DT'), ('work', 'NN'), ('.', '.'), ('So', 'RB'), ('hard', 'JJ'), ('!', '.')] 
[('What', 'WP'), ('are', 'VBP'), ('you', 'PRP'), ('doing', 'VBG'), ('?', '.'), ('Are', 'NNP'), ('you', 'PRP'), ('nut', 'RB'), ('?', '.')] 
[('Can', 'MD'), ('I', 'PRP'), ('borrow', 'VB'), ('your', 'PRP$'), ('jar', 'NN'), ('?', '.'), ('Just', 'NNP'), ('for', 'IN'), ('today', 'NN'), ('.', '.')] 

하지만 그것은 코드의 마지막 세 줄을 사용하여 작성할 때, 그것은 텍스트 파일의 마지막 문자열을 저장한다 (즉, [('수', 'MD'), ('I', 'PRP $'), ('병', 'NN'), ('?', '.'), ('그냥', ' , 'NNP'), ('for', 'IN'), ('today', 'NN'), ('.', '.')]).

전체 결과를 txt 또는 csv 파일에 저장하고 각 []의 한 문자열을 txt 또는 csv 파일의 한 줄에 저장해야합니다.

저는 정말 파이썬이 처음이므로 도움을 주시면 감사하겠습니다.

+2

'tagged = nltk.pos_tag (토큰)'은 데이터의 각 행에 대한 태그를 재정의합니다. 결국, 당신은 마지막 줄 만 저장하고 있습니다. –

답변

2

당신은 목록의 각 행을 저장 한 다음 전체 목록을 작성해야 : tagged_list에서

tagged_list = [] 
#Parse the text file for NER with POS Tagging 
for line in data: 
    tokens = nltk.word_tokenize(line) 
    tagged_list.append(str(nltk.pos_tag(tokens))) 

output = open(r"C:\Users\output3.csv", "w") 
output.write('\n'.join(tagged_list)) 
output.close() 

당신이 모든 라인 작성에 추가합니다. '\n'.join(tagged)으로 작성하면 '\ n'으로 구분됩니다 (즉 각각 다른 행에 있음)

+0

정말 고마워요! 그것은 완벽하게 작동합니다. 하나의 사소한 오류는 조인 직후에 괄호 안에 태그 대신 tagged_list를 쓰는 것입니다. 정말 고맙습니다! – Emily

+0

오른쪽! 고마워! –

0

들여 쓰기 오류가 있습니다.

import nltk 
import pos_tag 
import nltk.tokenize 
import numpy 

f = open(r'C:\Users\sample_data.txt') 
data = f.readlines() 

#Parse the text file for NER with POS Tagging 
for line in data: 
    tokens = nltk.word_tokenize(line) 
    tagged = nltk.pos_tag(tokens) 
    #print (tagged) 

    output = open(r"C:\Users\output3.csv", "a") 
    output.write(str(tagged)+'\n') 
f.close() 
output.close() 
0

편집은 : 원래 코드에서 당신은 루프에서 output.write(str(tagged))를 호출 할 필요가 당신에게 원래의 질문에 대답합니다.

다른 답변이 질문에 대답 할 경우에도, 나는 당신이 결국 자동으로 자원을 닫을 수 때마다 자원을 처리 할 때 with를 사용하여 구현

  • 시도에 일부 변경을 제안하고자
  • 파일이 열려되면 당신은 단순히 f 변수를 반복 할 수

최종 결과는 같을 것이다 :

import nltk 

# file will be closed once out of the scope 
with open(r'C:\Users\sample_data.txt') as f: 
    with open(r'C:\Users\output3.csv', 'w') as output: 
     for line in f: 
      tokens = nltk.word_tokenize(line) 
      tagged = nltk.pos_tag(tokens) 
      output.write(str(tagged)+'\n') 
관련 문제