Извлечь текст из неструктурированных медицинских документов для НЛП - PullRequest
1 голос
/ 30 января 2020

У меня много неструктурированных медицинских документов во всевозможных форматах. Какой лучший способ разобрать все хорошие предложения для использования в НЛП?

В настоящее время я использую SpaCy для этого, но даже при многопроцессорной обработке это довольно медленно, и парсер предложений по умолчанию не работать 100% времени. Вот пример того, как я пытаюсь получить хорошие предложения с SpaCy:

def get_good_sents(texts, batch_size, n_process):
    nlp = spacy.load("en_core_web_sm", disable=[
        'ner',
        'entity_linker',
        'textcat',
        'entity_ruler',
        'sentencizer',
        'merge_noun_chunks',
        'merge_entities',
        'merge_subtokens',
    ])
    pipe = nlp.pipe(texts, batch_size=batch_size, n_process=n_process)

    rows = []
    for doc in pipe:
        clean_text = []
        for sent in doc.sents:
            struct = [token.pos_ for token in sent]
            subject = any(x in struct for x in ['NOUN', 'PRON'])
            action = any(x in struct for x in ['VERB', 'ADJ', 'AUX'])

            if subject and action :
                clean_text.append(sent.text)
        rows.append(' '.join(clean_text).replace('\n', ' ').replace('\r', ''))

    return rows

Пример некоторых текстовых выдержек

Необработанный текст:

TITLE
Patient Name:
Has a heart Condition.
Is 70 Years old.

Ожидаемый результат:

Has a heart Condition.
Is 70 Years old.

Этот пример не очень хорош, потому что у меня есть тонны разных документов в разных форматах. Они действительно могут сильно отличаться. В основном это сводится к тому, что я просто хочу раздеть материал котельной и просто получить фактический свободный текст.

1 Ответ

2 голосов
/ 31 января 2020

Основываясь на комментариях из вышеприведенного обсуждения, я очень уверен, что spaCy не даст вам очень хороших результатов просто потому, что он очень сильно привязан к ожиданию правильного грамматического предложения.

В По крайней мере, при нынешнем подходе к поиску «правильно помеченных слов» в каждой строке я бы ожидал, что это не очень хорошо сработает, поскольку пометка предложения правильно уже связана с приемлемым форматом ввода; настало время процитировать одну из моих любимых концепций в машинном обучении .

В зависимости от точности, которую вы хотите достичь, я бы лично применил защитный подход Regex, в котором вы вручную сортируете заголовки (строки, содержащие менее 4 слов, строки, заканчивающиеся двоеточием / точкой с запятой и т. д. c.), хотя это потребует значительно больших усилий.

Другое, более прямое решение - взять другие распространенные шаблонные инструменты работают с , хотя большинство из них предназначено для удаления шаблонного содержимого из HTML содержимого, и, следовательно, легче использовать информацию тегов.

...