spaCy:自定义中缀正则表达式规则在 `:` 上拆分 mailto:johndoe@gmail.com 之类的模式未始终如一地应用
spaCy: custom infix regex rule to split on `:` for patterns like mailto:johndoe@gmail.com is not applied consistently
使用默认分词器,spaCy 将 mailto:johndoe@gmail.com
视为一个单独的分词。
我尝试了以下方法:
nlp = spacy.load('en_core_web_lg')
infixes = nlp.Defaults.infixes + (r'(?<=mailto):(?=\w+)', )
nlp.tokenizer.infix_finditer = spacy.util.compile_infix_regex(infixes).finditer
但是,上面的自定义规则似乎并没有按照一致的方式执行我想执行的操作。例如,如果我将分词器应用于 mailto:johndoe@gmail.c
,它会执行我想要的操作:
nlp("mailto:johndoe@gmail.c")
# [mailto, :, johndoe@gmail.c]
但是,如果我将分词器应用到 mailto:johndoe@gmail.com
,它不会按预期工作。
nlp("mailto:johndoe@gmail.com")
# [mailto:johndoe@gmail.com]
我想知道是否有办法解决这种不一致?
URLs 有一个分词器异常模式,它将 mailto:johndoe@gmail.com
之类的东西作为一个分词匹配。它知道顶级域至少有两个字母,所以它匹配 gmail.co
和 gmail.com
但不匹配 gmail.c
.
您可以通过设置覆盖它:
nlp.tokenizer.token_match = None
那么你应该得到:
[t.text for t in nlp("mailto:johndoe@gmail.com")]
# ['mailto', ':', 'johndoe@gmail.com']
[t.text for t in nlp("mailto:johndoe@gmail.c")]
# ['mailto', ':', 'johndoe@gmail.c']
如果您希望 URL 标记化为除 mailto:
之外的默认标记化,您可以将 URL_PATTERN
修改为 lang/tokenizer_exceptions.py
(另请参阅如何 TOKEN_MATCH
在它的正下方定义)并使用它而不是 None
.
使用默认分词器,spaCy 将 mailto:johndoe@gmail.com
视为一个单独的分词。
我尝试了以下方法:
nlp = spacy.load('en_core_web_lg')
infixes = nlp.Defaults.infixes + (r'(?<=mailto):(?=\w+)', )
nlp.tokenizer.infix_finditer = spacy.util.compile_infix_regex(infixes).finditer
但是,上面的自定义规则似乎并没有按照一致的方式执行我想执行的操作。例如,如果我将分词器应用于 mailto:johndoe@gmail.c
,它会执行我想要的操作:
nlp("mailto:johndoe@gmail.c")
# [mailto, :, johndoe@gmail.c]
但是,如果我将分词器应用到 mailto:johndoe@gmail.com
,它不会按预期工作。
nlp("mailto:johndoe@gmail.com")
# [mailto:johndoe@gmail.com]
我想知道是否有办法解决这种不一致?
URLs 有一个分词器异常模式,它将 mailto:johndoe@gmail.com
之类的东西作为一个分词匹配。它知道顶级域至少有两个字母,所以它匹配 gmail.co
和 gmail.com
但不匹配 gmail.c
.
您可以通过设置覆盖它:
nlp.tokenizer.token_match = None
那么你应该得到:
[t.text for t in nlp("mailto:johndoe@gmail.com")]
# ['mailto', ':', 'johndoe@gmail.com']
[t.text for t in nlp("mailto:johndoe@gmail.c")]
# ['mailto', ':', 'johndoe@gmail.c']
如果您希望 URL 标记化为除 mailto:
之外的默认标记化,您可以将 URL_PATTERN
修改为 lang/tokenizer_exceptions.py
(另请参阅如何 TOKEN_MATCH
在它的正下方定义)并使用它而不是 None
.