我正在为我正在训练的 NER 模型预处理一些文本,并且我经常遇到这个角色。这个字符不会被删除strip()
:
>>> 'Hello world!\u200b'.strip()
'Hello world!\u200b'
Run Code Online (Sandbox Code Playgroud)
它不被视为正则表达式的空格:
>>> re.sub('\s+', ' ', "hello\u200bworld!")
'hello\u200bworld!'
Run Code Online (Sandbox Code Playgroud)
并且 spaCy 的标记器不会在其上拆分标记:
>>> [t.text for t in nlp("hello\u200bworld!")]
['hello\u200bworld', '!']
Run Code Online (Sandbox Code Playgroud)
那么,我应该如何处理呢?我可以简单地替换它,但是我不想为这个角色做一个特例,而是替换所有具有相似特征的角色。
谢谢。
我有一个 HTML 文档,我想使用 spaCy 对其进行标记,同时将 HTML 标记保留为单个标记。这是我的代码:
import spacy
from spacy.symbols import ORTH
nlp = spacy.load('en', vectors=False, parser=False, entity=False)
nlp.tokenizer.add_special_case(u'<i>', [{ORTH: u'<i>'}])
nlp.tokenizer.add_special_case(u'</i>', [{ORTH: u'</i>'}])
doc = nlp('Hello, <i>world</i> !')
print([e.text for e in doc])
Run Code Online (Sandbox Code Playgroud)
输出是:
['Hello', ',', '<', 'i', '>', 'world</i', '>', '!']
Run Code Online (Sandbox Code Playgroud)
如果我在标签周围放置空格,如下所示:
doc = nlp('Hello, <i> world </i> !')
Run Code Online (Sandbox Code Playgroud)
输出是我想要的:
['Hello', ',', '<i>', 'world', '</i>', '!']
Run Code Online (Sandbox Code Playgroud)
但我想避免对 HTML 进行复杂的预处理。
知道我该如何解决这个问题吗?
我已经在spaCy中使用自定义令牌生成器训练了自定义NER模型。我想保存不带分词器的NER模型。我在spaCy支持论坛中尝试了以下代码:
import spacy
nlp = spacy.load("en")
nlp.tokenizer = some_custom_tokenizer
# Train the NER model...
nlp.tokenizer = None
nlp.to_disk('/tmp/my_model', disable=['tokenizer'])
Run Code Online (Sandbox Code Playgroud)
当我尝试加载它时,管道是空的,而且令人惊讶的是它具有默认的spaCy标记器。
nlp = spacy.blank('en').from_disk('/tmp/model', disable=['tokenizer'])
Run Code Online (Sandbox Code Playgroud)
知道如何在没有标记器的情况下加载模型,但要获得完整的管道吗?谢谢