2012-01-31 3 views
0

안녕하세요 저는 태그가 지정된 코퍼스에서 고유 명사를 빼내고 있습니다. 예를 들어 nltk 태그가있는 corpus brown에서 "NP"로 태그 된 단어 만 추출하려고합니다.파이썬의 태그가있는 코퍼스에서 추출하기

내 코드 :

import nltk 
    from nltk.corpus import brown 
    f = brown.raw('ca01') 
    print nltk.corpus.brown.tagged_words() 
    w=[nltk.tag.str2tuple(t) for t in f.split()] 
    print w 

하지만이 단어를 istead 표시되지 않는 것은 단지

[]

샘플 출력을 보여주고있다 : 왜

[('The', 'AT'), ('Fulton', 'NP-TL'), ...] 
    [] 

입니다? ?

감사합니다.

나는 난 단지 PRIT f.split() .. 그럼 내가

   [('The', 'AT'), ('Fulton', 'NP-TL'), ('County', 'NN-TL'), ('Grand', 'JJ-TL'), ('Jury', 'NN-TL'), ('said', 'VBD'), ('Friday', 'NR'), ('an', 'AT'), ('investigation', 'NN'), ('of', 'IN'), ("Atlanta's", 'NP$'), ('recent', 'JJ'), ('primary', 'NN'), ('election', 'NN'), ('produced', 'VBD'), ('``', '``'), ('no', 'AT'), ('evidence', 'NN'), ("''", "''"), ('that', 'CS'), ('any', 'DTI'), ('irregularities', 'NNS'), ('took', 'VBD'), ('place', 'NN'), ('.', '.'), ('The', 'AT'), ('jury', 'NN'), ('further', 'RBR'), ('said', 'VBD'), ('in', 'IN'), ('term-end', 'NN'), ('presentments', 'NNS'), ('that', 'CS'), ('the', 'AT'), ('City', 'NN-TL')..... 

답변

4

당신이 우리에게 주신 것을 실제로 말할 수는 없지만 단계별로 문제를 시도해 보셨습니까? 어떤 상황에서도 t.split('/')[1] == 'NP'이 (가) 사실로 평가되는 것 같습니다. 정확히 f.split()

  • 당신의 조건 당신은 나에게 보이는 당신이 준 출력의 작은 샘플에서, 실제로 올바른 있는지 확인 포함 무엇을보고

    1. 인쇄/디버그 : 그래서 당신은으로 시작해야 더 많은 것을 찾고 : if t.split('/')[1].startswith('NP')하지만 정말 말할 수 없습니다.

    편집 :

    좋아, 그 무엇에 f.split() 인쇄 다음 t sicne 예외가해야하는 튜플과 튜플 나던은 split() 방법이 정말이다 첫번째 경우. 그래서 당신은 나를 궁금하게 만들었고 nltk을 설치하고 '갈색'자료를 다운로드하고 코드를 시도했습니다.

    import nltk 
        from nltk.corpus import brown 
        f = brown.raw('ca01') 
        print f.split() 
    
        ['The/at', 'Fulton/np-tl', 'County/nn-tl', 'Grand/jj-tl', 'Jury/nn-tl', 'said/vbd', 'Friday/nr', 'an/at', 'investigation/nn', 'of/in', "Atlanta's/np$", 'recent/jj', 'primary/nn', 'election/nn', 'produced/vbd', '``/``', 'no/at', 'evidence/nn', "''/''", 'that/cs', 'any/dti', 'irregularities/nns', 'took/vbd', 'place/nn', './.', 'The/at', 'jury/nn', 'further/rbr', 'said/vbd', 'in/in', 'term-end/nn', 'presentments/nns', 'that/cs', 'the/at', 'City/nn-tl', 'Executive/jj-tl', 'Committee/nn-tl', ',/,', 'which/wdt', 'had/hvd', 'over-all/jj', 'charge/nn', 'of/in', 'the/at', 'election/nn', ',/,', '``/``', 'deserves/vbz', 'the/at', 'praise/nn', 'and/cc', 'thanks/nns', 'of/in', 'the/at', 'City/nn-tl' .....] 
    

    그래서 난 당신이 결과를 얻기 위해이 무슨 짓을했는지 없습니다 ideea 그러나 그것은 잘못되었습니다 : 이제 첫째, 나에게 내가 할 경우. 이제 그룹에서 볼 수 있듯이 두 번째 부분은 소문자로되어 코드가 실패한 것입니다. 당신이 그렇다면 :

    w=[nltk.tag.str2tuple(t) for t in f.split() if t.split('/')[1].lower() == 'np'] 
    

    이 당신에게 결과를 얻을 것이다 : 당신은 내가 요구 것과 같은 정보를 게시하기 전에 나중에 참조 할 수 있도록 한 번 확인을 위해 지금

    [('September-October', 'NP'), ('Durwood', 'NP'), ('Pye', 'NP'), ('Ivan', 'NP'), ('Allen', 'NP'), ('Jr.', 'NP'), ('Fulton', 'NP'), ('Atlanta', 'NP'), ('Fulton', 'NP'), ('Fulton', 'NP'), ('Jan.', 'NP'), ('Fulton', 'NP'), ('Bellwood', 'NP'), ('Alpharetta', 'NP'), ('William', 'NP'), ('B.', 'NP'), ('Hartsfield', 'NP'), ('Pearl', 'NP'), ('Williams', 'NP'), ('Hartsfield', 'NP'), ('Aug.', 'NP'), ('William', 'NP'), ('Berry', 'NP'), ('Jr.', 'NP'), ('Mrs.', 'NP'), ('J.', 'NP'), ('M.', 'NP'), ('Cheshire', 'NP'), ('Griffin', 'NP'), ('Opelika', 'NP'), ('Ala.', 'NP'), ('Hartsfield', 'NP'), ('E.', 'NP'), ('Pelham', 'NP'), ('Henry', 'NP'), ('L.', 'NP'), ('Bowden', 'NP'), ('Hartsfield', 'NP'), ('Atlanta', 'NP'), ('Jan.', 'NP'), ('Ivan', 'NP'), ....] 
    

    를 그냥 다음 올바른 아니라면 때문에 그것은 길을 잃어 버리고 그것은 당신이나 당신을 도우려고 노력하는 사람들을 돕지 않을 것입니다. 비평가가 아니라 건설적인 조언으로 :)

    +0

    내가 2 번을 시도하면 나와 같은 대답을 보여준다. f.split에 대한 결과는 위에 나와 있습니다. – fara

    0

    하나는 t.split('/')[1] == 'NP' 항상 false로 평가되는 것을 상상 얻을.

    +0

    ok.but 그럼 NP 단어를 추출하는 방법? – fara

    +0

    @fara : 당신이 말해 줘요. 그것이 당신의 질문이라면, 그것에 대해 새로운 질문을하십시오. – Marcin

    관련 문제