Как извлечь из новой статьи имя человека, совершившего преступление? - PullRequest
0 голосов
/ 17 октября 2019

Я могу извлечь имена людей, используя модель Spacy NER, но она включает в себя адвоката / полицию / или всех, кто является человеком. Моя проблема заключается в том, чтобы извлечь имя человека, который обвиняется / осужден / или совершилпреступление основано на новостной статье.

, например, нижеприведенная статья https://www.channelnewsasia.com/news/world/turkey-frees-opposition-figure-pending-terrorism-trial---anadolu-11095480

АНКАРА: Турецкий суд в понедельник постановил освободить под залог бывшего оппозиционного депутата, пока его судятОбвинения, связанные с терроризмом, сообщает государственное информационное агентство Anadolu.

Эрен Эрдем, который потерял свое место на выборах в середине 2018 года, которые предоставили президенту Тайипу Эрдогану новые полномочия, с июня находится в тюрьме и обвиняется в публикации незаконных документов. прослушивание телефонных разговоров в 2014 году, когда он был редактором оппозиционной газеты.

Он отрицает обвинения в оказании помощи последователям американского священнослужителя Фетхулла Гулена, обвиняемого в организации неудавшегося путча 2016 года.

Эрен Эрдем являетсяглавный обвиняемый, и мне нужно только это имя, но модель Spacy извлекает все имена людей TayЙип Эрдоган (президент) Фетхуллах Гюлен Энис Бербероглу Туван Гумрукку и т. д.

Мне нужно имя преступника, а не президента или полиции.

Можем ли мы сделать это с помощью Python / NER?

Ответы [ 2 ]

1 голос
/ 29 октября 2019

Я также использую spacy в своем проекте для извлечения имен жертв, и я также получаю много имен, не являющихся жертвами, таких как полицейские, врачи, подозреваемый и т. Д. Такие инструменты, как spacy, очень полезны, но вам также нужно помочьчтобы определить, какой тип лица PERSON вы хотите извлечь. Чтобы отфильтровать имена, которые я хочу, я делаю следующее:

  1. Анализ статей и распознавание некоторых общих шаблонов. Обычно статьи из одних и тех же источников имеют одинаковые форматы. В вашем случае я проверил несколько статей с данного веб-сайта, и он соответствует форматам, таким как «Имя подозреваемого, возраст, был обвинен / арестован / другие синонимы» или «Имя подозреваемого, который был обвинен / арестован / другие синонимы». Это довольно распространенный формат для статей, связанных с преступностью. Конечно, может быть и другой формат, но вряд ли их будет слишком много, поскольку эти сайты обычно следуют определенному стандарту или статьи написаны несколькими авторами.

Какой шаблон вы видитеиз этого? Дело в том, что предложения с подозрительным именем часто делятся на три части. [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

Вы можете использовать машинное обучение, но всегда будетнекоторые результаты, которые требуют настройки. Вы также можете использовать скоринг. Если в статьях речь идет о подозреваемом, то сущность ЧЕЛОВЕК, которая встречается чаще всего, часто является самим подозреваемым, другие субъекты, вероятно, будут упомянуты только несколько раз, а иногда и один раз.

1 голос
/ 25 октября 2019

Во-первых, вы должны спросить себя, как какой-то читатель текста способен идентифицировать преступника. Собственное имя, представляющее преступника, принимает функцию аргумента глагола (пусть это будет связочный глагол, как в «Он преступник», или семантически более сложный глагол, такой как «человек также совершил убийство 2 года назад»). Эта функция аргумента («субъект» в случае примеров) прекрасно идентифицирует преступную сущность. Вам необходимо:

  1. определить предложение, содержащее преступника, включая так называемую рамку подкатегоризации глагола (с указанием аргументов, например, "SUBJECT", "OBJECT" и т. Д.).
  2. Анализ предложения, чтобы аргументы были доступны (используя nltk или spaCy) и используя NER
  3. , извлекающий сущность, которая распознается NER и подкатегоризируется глаголом в аргументе. позиция, при которой роль преступника присваивается сущности
  4. , если необходимо, выполняя разрешение анафоры, когда используется личное местоимение, которое необходимо сопоставить с сущностью, к которой относится местоимение (вы можете представить это какчто-то вроде ссылочной цепочки местоимений).

Действительно, не существует нестандартной модели, это скорее лингвистический конвейер с реализациями для каждого отдельного шага, который ведет вас туда. Для чего-то более подробного, вам действительно нужно вставить некоторый код для прямых вопросов в конвейер реализации.

Вы можете использовать машинное обучение, но для этого вам все равно нужно выполнить шаги 1 и 2, так что лучше сначала попробуйте тешаги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...