首页 > 解决方案 > 如何在 Spacy 中用连字符标记单词

问题描述

我想使用 spacy 将 bs-it 标记为 ["bs","it"],因为我将它与 rasa 一起使用。我得到的输出是[“bs-it”]。有人可以帮我吗?

标签: tokenizespacy

解决方案


您可以将自定义规则添加到 spaCy 的标记器。spaCy 的分词器将连字符的单词视为单个token. 为了改变这一点,您可以添加自定义标记化规则。在你的情况下,你想标记一个infixie 出现在两个单词之间的东西,这些通常是连字符或下划线。

import re
import spacy
from spacy.tokenizer import Tokenizer

infix_re = re.compile(r'[-]')

def custom_tokenizer(nlp):
    return Tokenizer(nlp.vocab,infix_finditer=infix_re.finditer)

nlp = spacy.load("en_core_web_sm")
nlp.tokenizer = custom_tokenizer(nlp)
doc = nlp("bs-it")
print([t.text for t in doc])

输出

['bs', '-', 'it']

推荐阅读