Я использовал приведенный ниже код Python для извлечения именованных сущностей, присутствующих в тексте. Теперь мне нужно получить прилагательные из тех предложений в тексте, где есть именованный объект. то есть прилагательное, используемое с именованными объектами. Могу ли я изменить свой код, чтобы проверить, есть ли в дереве «JJ», если есть «NE», или есть ли другой подход?
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 ',' IN '), (' Speech ',' NN '), (', ',', '), Tree (' NE ', [(' Gautam ',' NNP ')]), (', ',', '), (' таким образом ',' RB '), (' опрошенный ' , 'VBD'), (',', ','), ('дал', 'VBD'), ('in', 'IN'), ('the', 'DT'), ('середина' , 'NN'), ('of', 'IN'), ('that', 'DT'), ('big', 'JJ'), ('сборка', 'NN'), ('of' , 'IN'), ('созерцательный', 'JJ'), ('sages' 'NNP'), ('a', 'DT'), ('полный', 'JJ'), ('и', 'CC'), ('правильный', 'NN'), ('ответ', 'NN'), ('in', 'IN'), ('слова', 'NNS'), ('согласный', 'JJ'), ('с', 'IN'), ('их', 'PRP $'), ('режим', 'NN'), ('of', 'IN'), ('жизнь' , 'NN'), ('.', '.')])
Хотя в этом предложении нет JJ перед NE. Как я могу использовать JJ с NE?
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