我有一个很大的(〜50k)术语表,这些关键字词/术语中的许多都有相应的缩写词/缩写。我需要一种找到缩写或扩展缩写(即MS-> Microsoft),然后用完整的扩展缩写+缩写(即Microsoft-> Microsoft(MS)或MS-> Microsoft(MS))替换的快速方法
我对spaCy还是很陌生,所以我的幼稚方法是使用spacy_lookup并同时使用缩写和扩展缩写作为关键字,然后再使用某种pipeline extension匹配,并用完整的扩展缩写+缩写替换。
在spaCy中是否有更好的标记和解析首字母缩写词/缩写的方法?
答案 0 :(得分: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)