Я не знаком с перечисленными конкретными службами, но в области обработки естественного языка разработан ряд методов, позволяющих извлекать информацию такого рода из общего текста. Как сказал Шон, если у вас есть подходящие термины, нетрудно найти эти термины в контексте некоторых других сущностей, а затем использовать результаты этого поиска, чтобы определить, насколько вы уверены, что извлеченный термин является действительным объектом интерес.
OpenNLP - отличный проект, если вы хотите поиграть с обработкой естественного языка. Упомянутые вами возможности, вероятно, лучше всего реализовать с помощью Named Entity Recognizer (NER) (алгоритмы, которые обычно определяют собственные имена, а иногда и даты) и / или устранения неоднозначности слов (WSD) (например, слово «банк»). имеет разные значения в зависимости от контекста, и это может быть очень важно при извлечении информации из текста. Учитывая предложения: «самолет накренился налево», «сугроб был высок» и «они ограбили банк», вы можете увидеть, как неоднозначность может сыграть важную роль в понимании языка)
Методы, как правило, основаны друг на друге, и NER является одной из более сложных задач, поэтому для успешного выполнения NER вам, как правило, потребуются точные токенизаторы (токенайзеры на естественном языке, обратите внимание - статистические подходы, как правило, работают лучше всего), Строковые элементы (алгоритмы, которые связывают похожие слова с общими корнями: таким образом, такие слова, как informant и informer, обрабатываются одинаково), определение предложения («Мистер Джонс был высоким.» - это только одно предложение, поэтому вы не можете просто проверить пунктуацию), тегеры части речи (POS-тегеры) и WSD.
Существует порт Python (части) OpenNLP под названием NLTK (http://nltk.sourceforge.net), но у меня пока нет особого опыта с этим. Большая часть моей работы была с портами Java и C #, которые работают хорошо.
Все эти алгоритмы, конечно же, зависят от языка, и для их запуска может потребоваться значительное время (хотя, как правило, это быстрее, чем чтение материала, который вы обрабатываете). Поскольку современное состояние в значительной степени основано на статистических методах, существует также значительный коэффициент ошибок, который необходимо принимать во внимание. Кроме того, поскольку частота ошибок влияет на все этапы, а что-то вроде NER требует многочисленных этапов обработки ((tokenize -> обнаружение предложений -> POS-тег -> WSD -> NER), составление коэффициентов ошибок.