Как создать новую сущность и использовать ее, чтобы найти сущность в моих тестовых данных? Как заставить мой токениз работать? - PullRequest
0 голосов
/ 29 июня 2018

Я хотел бы создать новую сущность: давайте назовем это «лекарством», а затем обучим его, используя мои тела. Оттуда идентифицируют все сущности «медицины». Почему-то мой код не работает, кто-нибудь может мне помочь?

import nltk


test= input("Please enter your file name")
test1= input("Please enter your second file name")

with open(test, "r") as file:  
    new = file.read().splitlines()


with open(test1, "r") as file2:
    new1= file2.read().splitlines()


for s in new:
    for x in new1:
        sample = s.replace('value', x)

        sample1 = ''.join(str(v) for v in sample)

        print(sample1)


        sentences = nltk.sent_tokenize(sample1)
        tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
        tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]
        chunked_sentences = nltk.ne_chunk_sents(tagged_sentences, binary=True)


        print(sentences)

def extract_entity_names(t):
    entity_names = []

    if hasattr(t, 'label') and t.label:
        if t.label() == 'NE':
            entity_names.append(' '.join([child[0] for child in t]))
        else:
            for child in t:
                entity_names.extend(extract_entity_names(child))

    return entity_names

1 Ответ

0 голосов
/ 29 июня 2018

Как создать новую сущность и использовать ее для поиска сущности в моих тестовых данных?

Распознаватели именованных объектов являются вероятностными, нейронными или линейными моделями. В вашем коде

chunked_sentences = nltk.ne_chunk_sents(tagged_sentences, binary=True)

делает это предсказание. Поэтому, если вы хотите, чтобы он распознавал новые типы сущностей, вы должны сначала обучить классификатор аннотированным данным, содержащим новый тип сущности.

Почему-то мой код не работает,

Как я уже говорил, вы не обучали модель NLTK собственным данным, поэтому она не работает.

Как заставить мой токениз работать?

Tokenizer извлекает только жетоны слов, что делается в вашем коде этой строкой

tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]

Но токенайзер не предсказывает именованную сущность напрямую.

Если вы хотите обучить модель для предсказания индивидуально названного объекта, такого как лекарство, с помощью NLTK, попробуйте этот учебник.

Из моего личного опыта NLTK может не подойти для этого, посмотрите Spacy.

...