如何在spaCy pipline中的标记化程序之前添加组件?

时间:2019-09-05 04:15:10

标签: python spacy

我想在将字符串传递给令牌生成器之前对其进行预处理。

例如,在令牌生成器之前添加一个大写字母。

"apple" -> "APPLE" -> doc

换句话说,我想将此组件放在管道中的分词器的前面。

def capitalizer(text: str) -> str:
  return text.upper()

1 个答案:

答案 0 :(得分:1)

不可能在管道中的令牌生成器之前添加组件,因为令牌生成器作为初始组件具有特殊状态,该初始组件采用字符串并返回Doc。 (所有其他组件都使用文档并返回文档。)通常,我认为最好在spacy之外对文本进行预处理。

但是,您可以创建一个自定义令牌生成器来进行一些预处理,因为您所需要的只是一个接受字符串并返回Doc的组件。临时修改管道非常容易,但是要使修改完全集成到要保存和重新加载模型的情况下,可以将其保存到磁盘上则比较困难。这是一个无法保存到磁盘的最低版本:

import os

def makepython3():
    """This is a script to transform all the solutions into 
    Python 3 solutions."""
    files = os.listdir('exercises')

    exfolder = 'exercises'
    ex3folder = 'exercisespy3'

    if not os.path.exists(ex3folder):
        os.mkdir(ex3folder)

    for f in files:
        os.system('cp {} {}'.format(exfolder+os.sep+f, ex3folder+os.sep+f))
        if f.endswith('.py'):
            os.system('"C:\Users\HP\AppData\Local\Programs\Python\Python37-32\Tools\scripts\2to3.py" -w -n --no-diffs {}'.format(ex3folder+os.sep+f))

    print('All done!')

if __name__ == '__main__':
    makepython3()