2017-09-22 12 views
0

거대한 텍스트 파일에서 명사 또는 명사 그룹 만 추출하고 싶습니다. 아래의 python 코드는 제대로 작동하지만 마지막 줄의 명사 만 추출합니다. 나는 코드가 'APPEND'를 요구하지만 방법을 몰라 확신POS tagging with Python (루핑)을 사용하여 명사 추출

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() 

이 결과는 다음과 같다 (내가 파이썬 초보자입니다.) 다음의 명사 단어 아파트 수송 시내, 파일의 마지막 줄. 한 줄에 파일의 각 줄에 명사를 저장하고 싶습니다. 예를 들어, 입력 파일과 해당 결과는 다음과 같아야합니다.

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 

누군가 위의 코드를 수정하는 데 도움이되기를 바랍니다.

답변

1

for 루프의 줄 끝을 추가 한 다음 파일에 씁니다. 당신이 APPEND 사용하려면

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

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

는 :

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

목록 접근 방식을 사용하여 더 나을 : 또한

... result_list = [] for line in data: ... result_list.append(joined) output = open(r"outfile.csv", "w") output.write(str(result_list)) output.close() 

당신이 결과 목록을 사용하는 경우, 당신은이 글을 쓰는 방법을 사용할 수 있습니다 . 그렇지 않으면 모든 것이 공백없이 한 줄에 작성됩니다. P – Mangohero1

+0

고맙습니다. 방금 편집했습니다. :) :) – Alperen

+0

나는 그것을 주석으로 바르게 편집했다! 하하 – Mangohero1