Аннотируйте имена авторов, используя REGEXNER из библиотеки stanfordnlp - PullRequest
0 голосов
/ 15 апреля 2020

Моя цель состоит в том, чтобы комментировать имена авторов из научных статей c с лицом PERSON. Меня особенно интересуют имена, которые соответствуют этому формату (имя автора и др. Дата). Например, я хотел бы, чтобы в этом предложении (Minot et al. 2000) => было отмечено, что Minot ЧЕЛОВЕК. Я использую адаптированную версию кода, найденную на официальной странице команды stanford nlp:

import stanfordnlp

from stanfordnlp.server import CoreNLPClient
# example text
print('---')
print('input text')
print('')

text = "In practice, its scope is broad and includes the analysis of a diverse set of samples such as gut microbiome (Qin et al., 2010), (Minot et al., 2011), environmental (Mizuno et al., 2013) or clinical (Willner et al., 2009), (Negredo et al., 2011), (McMullan et al., 2012) samples."

# set up the client
print('---')
print('starting up Java Stanford CoreNLP Server...')
#Properties dictionary
prop={'regexner.mapping': 'rgxrules.txt', 'annotators': 'tokenize,ssplit,pos,lemma,ner,regexner'}
# set up the client


with CoreNLPClient(properties=prop,timeout=100000, memory='16G',be_quiet=False ) as client:
    # submit the request to the server
    ann = client.annotate(text)
    # get the first sentence
    sentence = ann.sentence[0]

После запуска кода я получаю следующие ложные срабатывания и ложные отрицания: Негредо не помечается как PERSON, а скорее O, и Minot как CITY, потому что это один из американских городов, но в этом конкретном предложении он должен быть помечен именем автора.

Моя попытка решить эту проблему состояла в том, чтобы добавить эту строку в rgxrules. TXT-файл, который я передаю в corenlpclient. Вот строка, которая у меня есть в этом файле:

[[A-Z][a-z]] /et/ /al\./\tPERSON

Это не решает проблему, которую вы можете проверить, если вы запускаете код. Также я не знаю, как добавить тот факт, что мне нужно только слово, которое соответствует «[[AZ] [az]]» и стоит перед et al. быть помеченным ЛИЦОМ, а не целым предложением «Minot et al.» например.

Любая идея, как я могу решить эту проблему.

Заранее спасибо.

1 Ответ

1 голос
/ 16 апреля 2020

С точки зрения соответствия java регулярных выражений, я уверен, что вы хотите что-то вроде

[A-Za-z]+ et al[.]

Однако я не знаю ни одного способа избежать маркировки et al. например, если у вас есть знак внимания. Что произойдет, если вы затем добавите еще одну строку в файл регулярных выражений, которая заменит et al. на O? Вероятно, нужно будет сказать, что PERSON является допустимой перезаписью для O

...