Я также использую spacy в своем проекте для извлечения имен жертв, и я также получаю много имен, не являющихся жертвами, таких как полицейские, врачи, подозреваемый и т. Д. Такие инструменты, как spacy, очень полезны, но вам также нужно помочьчтобы определить, какой тип лица PERSON вы хотите извлечь. Чтобы отфильтровать имена, которые я хочу, я делаю следующее:
- Анализ статей и распознавание некоторых общих шаблонов. Обычно статьи из одних и тех же источников имеют одинаковые форматы. В вашем случае я проверил несколько статей с данного веб-сайта, и он соответствует форматам, таким как «Имя подозреваемого, возраст, был обвинен / арестован / другие синонимы» или «Имя подозреваемого, который был обвинен / арестован / другие синонимы». Это довольно распространенный формат для статей, связанных с преступностью. Конечно, может быть и другой формат, но вряд ли их будет слишком много, поскольку эти сайты обычно следуют определенному стандарту или статьи написаны несколькими авторами.
Какой шаблон вы видитеиз этого? Дело в том, что предложения с подозрительным именем часто делятся на три части. [1] первый - это имя, за которым следует запятая, [2] второй - это либо цифры (возраст), либо некоторое описание, начинающееся с «кто», за которым следует запятая, а [3] третий включает глаголы, похожие нана «аресты», такие как арест, заключение в тюрьму, обвинение и т. д.
В вашем примере: «[1] Эрен Эрдем , [2] , который потерял свое место в серединеНа выборах 2018 года , которые предоставили президенту Тайипу Эрдогану новые полномочия, [3] с июня он был заключен в тюрьму и обвинен в публикации незаконных прослушиваний, когда был редактором оппозиционной газеты в 2014 году.
Используйте регулярное выражение, чтобы перехватывать только фразы, имеющие этот шаблон. В Python:
импорт re для результата в re.finditer (r '(\ w + \ W + \ w +) {1,5}, \ swho \ s (\ w + \ W + \ w +) {0,20}, \ s (\ w + \ W +) {0,5} (арестован | заключен в тюрьму) \ s (\ w + \ W +) {0,10} ', текст, флаги = re.I): print (result.group ()) # передать это в spacy print (result.group (). split (",") [0]) # или this
Вы можете использовать машинное обучение, но всегда будетнекоторые результаты, которые требуют настройки. Вы также можете использовать скоринг. Если в статьях речь идет о подозреваемом, то сущность ЧЕЛОВЕК, которая встречается чаще всего, часто является самим подозреваемым, другие субъекты, вероятно, будут упомянуты только несколько раз, а иногда и один раз.