Что вам нужно, так это библиотека обработки естественного языка. Вы пытаетесь определить подмножество имен собственных. Если имена являются основным источником имен собственных, то будет легко, если в них будет смешано большое количество других имен собственных, чем будет сложнее. Если вы пишете в JAVA, посмотрите OpenNLP или C # SharpNLP. После извлечения всех имен существительных вы, вероятно, можете использовать Wordnet для удаления большинства имен, не являющихся именами. Возможно, вы сможете использовать wordnet для определения частей имен, таких как «Джон», а затем искать соседние токены, чтобы подсосать другие части имени. У вас будут проблемы с чем-то вроде «John Smith Industries». Вам придется взглянуть на свои базовые данные, чтобы узнать, есть ли функции, которые вы можете использовать, чтобы помочь сузить проблему.
Использование решения НЛП - единственная реальная надежная техника, которую я видел для подобных проблем. У вас все еще могут быть проблемы, так как 200 страниц на самом деле довольно маленькие. В идеале у вас было бы больше текста и вы могли бы использовать больше статистических методов, чтобы помочь устранить неоднозначность между именами и именами.