【问题标题】:How to identify abbreviations/acronyms and expand them in spaCy?如何识别缩写/首字母缩略词并在 spaCy 中扩展它们?
【发布时间】:2018-09-29 17:24:45
【问题描述】:

我有一个很大的(~50k)术语列表,其中一些关键短语/术语具有相应的首字母缩略词/缩写。我需要一种快速的方法来查找缩写或扩展缩写(即 MS -> Microsoft ),然后将其替换为完整的扩展缩写 + 缩写(即 Microsoft -> Microsoft (MS) 或 MS -> Microsoft (MS) ) .

我对 spaCy 很陌生,所以我的幼稚方法是使用 spacy_lookup 并使用缩写和扩展缩写作为关键字,然后使用某种 pipeline extension 然后进行匹配并将它们替换为完整的扩展缩写 + 缩写。

有没有更好的方法来标记和解析 spaCy 中的首字母缩写词/缩写词?

【问题讨论】:

标签: python-3.x nlp spacy


【解决方案1】:

查看 GitHub 上的 scispacy,它实现了 this paper 中描述的首字母缩写词识别启发式算法,(另请参阅 here)。如果首字母缩略词在文本中以类似

的模式“引入”,则启发式有效

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)

【讨论】:

  • 这很棒.. 但是所有 scispacy 项目都在生物医学上。其他域也可以使用这样的缩写词吗?
  • @SandeepBhutani 如果按照我在答案中描述的方式引入首字母缩写词(无论域!),scispacy 使用的启发式方法将可以正常工作。 scispacy 正在借用一种语言模型来进行标记化(在我的回答中,en_core_web_en),因此它不应该在其行为中歪曲“生物医学”。我想(像往常一样),人们必须尝试测量首字母缩写词替换的精度/召回率,看看这样的配方是否适用于所选的语料库。
  • 谢谢。运行后得到它.. abbr 应该已经在 setence 中定义,区分大小写,应该与扩展等具有相同的字母。所以它本质上是基于规则的检测。实用的那种。但很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多