2013-10-20 5 views
-2

텍스트 파일에 문장 세트가 있고 CSV 파일에 열 머리글로 표시된 동사가 있습니다. 동사가 해당 문장에있는 경우 오른쪽 열 아래의 특정 셀에 '1'을 표시해야합니다. 예 :파이썬을 사용하여 csv의 특정 셀에 쓰기

내 문장은 다음과 같습니다. 나는이 영화를 좋아합니다.

내 csv 파일의 헤더에 like, hate 및 loathe가 있습니다.

은 그 때 나는 사전에

like  hate  loathe 
    1 

감사처럼 내 csv 파일이 필요합니다. 동사는 동사의 내 목록입니다

with open('verb.csv', 'wb') as csvn: 
    cwriter = csv.writer(csvn) 
    cwriter.writerow([d for d in verbs]) 

:

는 여기에 내가 시도 코드입니다. csv 파일에서 동사를 열 머리글로 인쇄합니다.

for l, label in file: 
    t = nltk.word_tokenize(l) 
    tt = nltk.pos_tag(t) 
    for pos in tt: 
     for p in pos[1]: 
      c = 0 
      if(p == 'V'): 
       w = pos[0] 
       for l in verbs: 
        if w == l: 
         print(c) 
         continue 
        else: 
         c+=1 

지금 W는 동사를 포함하고 나는 동사 목록에 일치하는 단어를 검색하고 위치를 획득,하지만 난 CSV 파일로에서 해당 위치를 표시 수있는 방법 단서가없는 수 1. 파이썬 버전은 2.7입니다.

+0

뭔가를 시도한 다음이 질문에 대한 파이썬 버전이 필요한지 묻습니다. goos 시작 지점은 python [docs] (http://docs.python.org/2/library/csv.html) 및이 [post] (http://stackoverflow.com/a/14693848/)를 참조하십시오. 1982962) 좋은 예가있다 –

+0

죄송합니다, 내 게시물을 편집하겠습니다. – GobSmack

답변

0

나는 카운터를 생성 한 후에 빈 목록을 만듭니다. 목록은 귀하의 n 동사와 길이가 같습니다. 그런 다음

c = 0 
emptylist = [""] * len(verbs) 

당신이 당신의 동사 목록을 통해 실행 (코드에서 작성하려는)는 L (가 인쇄 아니에요 확신, BTW?) 카운터 (C)를 사용하여 빈리스트 내에서의 위치로 . 다음 부분을 바꿀 것입니다 :

if w == l: 
    print(c) 
    emptylist[c] = 1 
    ## then write emptylist to the csv with csv.writerow(emtptylist) 
    continue 
+0

감사합니다. – GobSmack

0

코드 작업을 수행 할 때 점진적 단계를 권장합니다. 특정 부분을 작동시킨 다음 나머지 부분을 빌드하십시오. 예를 들어 여기에서 볼 수 있듯이 file으로 읽으려고하면 첫 번째 줄에 값 오류가 발생해야합니다 (단, csv 등으로 이미 구문 분석 된 경우는 예외).

실제로 아무 것도 쓰기 전에 결과 파일에 넣을 모든 출력을 생성해야합니다. 사전을 구축하고, 결과가 작동한다고 믿고, 결국에는 원하는 형식으로 모두 작성하십시오. 실제로 파일의 특정 열에 임의로 문자를 쓸 수는 없습니다. 추가 할 수는 있지만 결과물을 작성하여 끝내는 것이 좋습니다.

각 문장마다 한 줄 또는 전체 또는 한 줄을 넣을 지 여부는 확실하지 않습니다. 단어가 없거나 각 열에 0이 있으면 빈 줄을?

nltk에 익숙해 지거나 원하는 출력을 얻으려는 목표는 무엇입니까?

단어가 in 목록인지 테스트하는 것이 더 효율적일 것 같습니다. (if w in verbs은 중첩 루프보다 훨씬 효율적입니다.)

또한 루프 내에서 l의 값을 변경하고 있습니다. 다른 이름을 사용하십시오.

헤더를 쓸 때 목록을 분리하고 다시 목록 통합으로 어셈블 할 필요가 없습니다. 동사가 이미 목록 인 경우 cwriter.writerow(verbs)이 좋을 것입니다.

하나의 답변에서 해결해야 할 문제가 너무 많아서 다시 반복 할 것입니다. 아기 단계. 전체 코드 조각을 작성하기 전에 한 번에 하나의 기능을 작동 시키십시오 ... 어떤 값이로드되는지 보려면 print 문을 많이 사용하십시오.

행운을 빈다.

+0

각 문장마다 새 행이 필요하며 0 또는 공백이 필요합니다. 이 출력을이 형식으로 가져와 추가 처리에 사용할 수 있도록해야합니다. 나는 실제로 파이썬에 비교적 새로운 것이다. 그러나 나는 분명히 당신의 조언을 따르고 아기 단계를 취하고 당신에게 감사 할 것입니다. – GobSmack

관련 문제