spaCy Аббревиатура / Сокращение Обработка - PullRequest
0 голосов
/ 29 сентября 2018

У меня большой (~ 50 тыс.) Список терминов, и некоторые из этих ключевых фраз / терминов имеют соответствующие сокращения / аббревиатуры.Мне нужен быстрый способ найти аббревиатуру или расширенную аббревиатуру (т.е. MS -> Microsoft), а затем заменить ее на полную расширенную аббревиатуру + аббревиатуру (т.е. Microsoft -> Microsoft (MS) или MS -> Microsoft (MS)).

Я очень плохо знаком с spaCy, поэтому мой наивный подход заключался в том, чтобы использовать spacy_lookup и использовать как сокращение, так и расширенное сокращение в качестве ключевых слов, а затем использовать какой-то вид расширение конвейера , чтобы затем пройти через совпадения и заменить их полностью развернутой аббревиатурой + аббревиатурой.

Есть ли лучший способ пометки и разрешения аббревиатур / аббревиатур в spaCy?

1 Ответ

0 голосов
/ 19 августа 2019

Проверьте scispacy на GitHub, который реализует эвристику идентификации аббревиатуры, описанную в этой статье , (см. Также здесь ).Эвристика работает, если аббревиатуры «вводятся» в текст с помощью шаблона, подобного

StackOverflow (SO), - это сайт вопросов и ответов для профессиональных программистов и программистов-энтузиастов.ТАК круто!

Рабочий способ заменить все аббревиатуры в фрагменте текста их длинной формой может быть

import spacy
from scispacy.abbreviation import AbbreviationDetector

nlp = spacy.load("en_core_web_sm")

abbreviation_pipe = AbbreviationDetector(nlp)
nlp.add_pipe(abbreviation_pipe)

text = "StackOverflow (SO) is a question and answer site for professional and enthusiast programmers. SO rocks!"

def replace_acronyms(text):
    doc = nlp(text)
    altered_tok = [tok.text for tok in doc]
    for abrv in doc._.abbreviations:
        altered_tok[abrv.start] = str(abrv._.long_form)

    return(" ".join(altered_tok))

replace_acronyms(text)
...