2014-01-31 4 views
0

아래 주어진 파이썬 코드를 사용하여 텍스트에있는 명명 된 엔티티를 추출했습니다. 이제는 텍스트에있는 문장에서 형용사를 구해야합니다. 즉 명명 된 개체와 함께 사용되는 형용사. 'NE'가있는 경우 트리에 'JJ'가 있는지 또는 다른 방법이 있는지 확인하도록 코드를 변경할 수 있습니까? 명명 된 엔티티와 함께 ​​사용되는 형용사

def tokenize(text): 
sentences = nltk.sent_tokenize(text) 
sentences = [nltk.word_tokenize(sent) for sent in sentences] 
sentences = [nltk.pos_tag(sent) for sent in sentences] 
return sentences 

text=open("file.txt","r").read() 
sentences=tokenize(text) 
chunk_sent=nltk.batch_ne_chunk(sentences,binary=True) 
print chunk_sent[1] 

출력 :

트리 ('S', [(" '", "POS"), ("완수', 'NNP') ('IN', '에서) (',', ',', ',', ')') ',' '' '' '' '' '' '' '' '' '' , 'VBD'), ('', 'VBD'), ('', '' '' ''RBD ' ('그', 'DT'), ('빅', 'JJ'), '' '' '' '' '' '' '' '' '' ''), '' '' '' '' '' '' '' '' '' '' '' '' ''NNP '' '' '' '' '' '', '', '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''), ('단어', 'NNS'), (자음 ','JJ '), ('함께 ','IN '), ('그들의'', '') '' '' '' '' '' '' '' '' '' '' '' ')

이 문장은 NE 이전에 JJ가 없습니다. NE와 함께 사용되는 JJ는 어떻게 얻을 수 있습니까?

def ne(tree): 
    names = [] 
    if hasattr(tree, 'node') and tree.node: 
     if tree.node == 'NE': 
     names.append(' '.join([child[0] for child in tree])) 
    else: 
     for child in tree: 
      names.extend(ne(child)) 

return names 

names = [] 
for item in chunk_sent: 
    names.extend(ne(item)) 
print names 
+0

그 어떤 언어인가? – Rob

+0

@Rob은 Python처럼 보입니다 – qujck

+0

예 Python 코드입니다. – user3182194

답변

0
>>> from nltk.corpus import brown 
>>> from nltk import batch_ne_chunk as bnc 
>>> from nltk.tree import Tree 
>>> sentences = brown.tagged_sents()[0:5] 
>>> chunk_sents = bnc(sentences) 
>>> 
>>> for sent in chunk_sents: 
...  for i,j in zip(sent[:-1], sent[1:]): 
...    if type(j) is Tree and i[1].startswith("JJ"): 
...      print i,j 
... 
('Grand', 'JJ-TL') (PERSON Jury/NN-TL) 
('Executive', 'JJ-TL') (ORGANIZATION Committee/NN-TL) 
+0

thanks. 이것은 효과가 있었다. – user3182194