Я работаю в Text Mining, и моя работа сосредоточена на биомедицинских объектах (генах, белках, лекарствах и заболеваниях). Я хотел бы поделиться с вами некоторыми вопросами.
Теперь моя цель — найти биомедицинские объекты в биомедицинских текстах (из Medline) и с помощью словарей терминов я могу идентифицировать каждый найденный объект с помощью его уникального идентификатора.
Для хранения текста, словарей и результатов я использую MongoDB (база данных, отличная от SQL). Каждая аннотация разбита на предложения, и каждое предложение хранится в новой записи (со списком токенов, фрагментов и тегов частей речи). Чтобы найти сущности, я получаю все предложения и для каждого создаю регулярное выражение для каждого термина в словаре (на Python):
for term in dicitonary:
matches = re.finditer(r'(' + term + ')', sentence)
for m in matches:
ini = m.start()
end = m.end()
result.append(ini, end, dictionary.get_identification[term])
Но это очень медленно, у меня есть несколько подмножеств из 150 000 аннотаций (> 1 000 000 предложений).
Для меня действительно интересно использовать мягкое сопоставление для извлечения большего количества сущностей, терминология которых не совсем соответствует моему словарю, но это может увеличить время работы.
Я думаю, что моя проблема заключается в том, чтобы делать много регулярных выражений (у меня есть словарь с 300 000 статей) для каждого предложения, потому что мне нужно найти термины в предложении. Как решить эту проблему без алгоритма машинного обучения? А с алгоритмами ML? Теперь я могу гибко менять язык программирования, базы данных...
Спасибо большое!!!
С уважением,
Алекс.