spacy tokenizer:有没有办法在 update_exc 的自定义异常中使用正则表达式作为键
spacy tokenizer: is there a way to use regex as a key in custom exceptions for update_exc
可以向 spacy 分词器添加自定义异常。这些异常工作正常。
但是,据我所知,可以只使用字符串作为键来匹配这些异常。这样做的:
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)
有没有办法添加正则表达式键入的异常,例如匹配 phone 号码?
类似这样的内容(以粗体突出显示):
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 的修订版中,有一些方法可以使用正则表达式作为标记器异常的键(但是,我还没有找到任何这样做的例子)
但在目前的修订中,至少初步分析没有显示任何方法
那么有没有办法解决这个任务呢?
(输入:正则表达式作为异常的键,输出 - phone 内部有空格的数字)
不,没有办法将正则表达式作为分词器例外。分词器只查找与字符串完全匹配的异常,主要是出于速度原因。这种示例的另一个困难是分词器异常目前不能包含空格。 (计划在未来版本的 spacy 中支持空格,但不支持正则表达式,这仍然太慢。)
我认为最好的方法是在管道的开头添加一个自定义管道组件,该组件使用 retokenizer 重新标记文档:https://spacy.io/api/doc#retokenize。您可以在重新标记时提供任何必需的属性,例如引理。
可以向 spacy 分词器添加自定义异常。这些异常工作正常。 但是,据我所知,可以只使用字符串作为键来匹配这些异常。这样做的:
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)
有没有办法添加正则表达式键入的异常,例如匹配 phone 号码?
类似这样的内容(以粗体突出显示):
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 的修订版中,有一些方法可以使用正则表达式作为标记器异常的键(但是,我还没有找到任何这样做的例子)
但在目前的修订中,至少初步分析没有显示任何方法
那么有没有办法解决这个任务呢?
(输入:正则表达式作为异常的键,输出 - phone 内部有空格的数字)
不,没有办法将正则表达式作为分词器例外。分词器只查找与字符串完全匹配的异常,主要是出于速度原因。这种示例的另一个困难是分词器异常目前不能包含空格。 (计划在未来版本的 spacy 中支持空格,但不支持正则表达式,这仍然太慢。)
我认为最好的方法是在管道的开头添加一个自定义管道组件,该组件使用 retokenizer 重新标记文档:https://spacy.io/api/doc#retokenize。您可以在重新标记时提供任何必需的属性,例如引理。