У меня много неструктурированных медицинских документов во всевозможных форматах. Какой лучший способ разобрать все хорошие предложения для использования в НЛП?
В настоящее время я использую 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.
Этот пример не очень хорош, потому что у меня есть тонны разных документов в разных форматах. Они действительно могут сильно отличаться. В основном это сводится к тому, что я просто хочу раздеть материал котельной и просто получить фактический свободный текст.