斯坦福核心NLP使用PTB Tokenizer进行标记化。但是,我想实现自己的tokenizer。作为其中的一部分,在我们指定注释器的属性文件中,我没有设置tokenize,因为我想自己编写Tokenizer并将输出的令牌放入
CoreAnnotations.TokensAnnotation.class
通过set
方法,以便ssplit稍后会使用它们。但是,当我尝试运行它时,程序失败说ssplit无法在没有标记器的情况下出现。我想知道是否有任何实现自定义Tokenizer的程序?
答案 0 :(得分:0)
确保创建一个使用自定义标记化的Annotator(Annotator接口位于edu / stanford / nlp / pipeline中);对于这个例子,我们将调用你的自定义注释器MyTokenizerAnnotator,并假设它在org.foo包中
构建StanfordCoreNLP管道时,请务必将其添加到属性中:
props.set("customAnnotatorClass.mytokenize" , "org.foo.MyTokenizerAnnotator")
当您为管道设置注释器时,而不是“tokenize”将“my tokenize”设置为
props.set("annotators", "mytokenize, ssplit, pos, lemma")
确保将Annotator.TOKENIZE_REQUIREMENT添加到设置MyTokenizerAnnotator的requirementsSatisfied()方法返回,这将告诉管道您的自定义标记生成器满足标记化要求并将停止ssplit投诉
供您参考,以下是一些相关类的javadoc,如果您要构建自己的tokenizer,您一定要看看TokenizerAnnotator.java的实现:
http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/pipeline/Annotator.html
http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/pipeline/TokenizerAnnotator.html
如果您需要任何进一步的帮助,请与我们联系!