spacy tokenizer:有没有办法将regex用作update_exc的自定义异常中的键

时间:2019-12-27 12:00:30

标签: spacy

可以向spacy标记程序添加自定义异常。这些异常工作正常。 但是,据我所知,可以仅将字符串用作匹配这些异常的键。这样做是这样的:

  57208090
    #scheduledJob
      ✓ should schedule job
    #run
run called
      ✓ should run server


  2 passing (12ms)

----------------|----------|----------|----------|----------|-------------------|
File            |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------------|----------|----------|----------|----------|-------------------|
All files       |      100 |      100 |      100 |      100 |                   |
 server.js      |      100 |      100 |      100 |      100 |                   |
 server.test.js |      100 |      100 |      100 |      100 |                   |
----------------|----------|----------|----------|----------|-------------------|

是否可以添加正则表达式键的例外,例如匹配电话号码?

类似的东西(以粗体突出显示):

import spacy
from spacy.tokens import Doc, Span, Token
from spacy.util import update_exc
from spacy.lang.tokenizer_exceptions import BASE_EXCEPTIONS
from spacy.symbols import ORTH, NORM, LEMMA, POS, TAG

CUSTOM_EXCEPTIONS = {
    # prevent '3g' to be splitted into ['3', 'g']
    "3g": [{ORTH: "3g", LEMMA: "3g"}],
}
spacy.lang.tokenizer_exceptions.BASE_EXCEPTIONS = update_exc(BASE_EXCEPTIONS, CUSTOM_EXCEPTIONS)

CUSTOM_EXCEPTIONS = {
    # prevent '3g' to be splitted into ['3', 'g']
    "3g": [{ORTH: "3g", LEMMA: "3g"}],

    r'([\(]?\+[\(]?\d{2}[\)]?[ ]?\d{2} \d{2} \d{2} \d{2})': [{LEMMA: match_result} for match_result in match_results]

我发现的唯一线索是: https://github.com/explosion/spaCy/issues/840

在tokenizer_exceptions.py的修订版中,有一些方法可以使用正则表达式作为令牌生成器异常的键(但是,我还没有找到这样做的示例)

但是在当前的修订中,至少初步分析还没有显示出执行s

的任何方法。

那么有没有办法解决这个任务?

(输入:正则表达式是例外的键,输出-包含空格的电话号码)

1 个答案:

答案 0 :(得分:0)

否,没有办法使用正则表达式作为令牌生成器异常。标记生成器仅在字符串完全匹配时才查找异常,这主要是出于速度方面的考虑。这种示例的另一个困难是令牌生成器异常当前不能包含空格。 (计划在将来的spacy版本中支持空间,但不支持正则表达式,因为它仍然太慢。)

我认为最好的方法是在管道的开头添加一个自定义管道组件,该组件使用重新令牌化器https://spacy.io/api/doc#retokenize来重新令牌化文档。重新令牌化时,您可以提供任何必要的属性(例如引理)。