使用RestSharp调用Stanford CoreNLP服务时小写人名无法识别为PERSON的问题求助
问题根因
你遇到的问题由两个配置错误共同导致:
- 标注器执行顺序错误:Stanford CoreNLP的标注器严格按照传入的顺序执行,且存在强依赖关系:
truecase(大小写校正)依赖tokenize(分词)和ssplit(分句)的输出结果才能正常运行。你C#代码中配置的标注器顺序为truecase,tokenize,ssplit,ner,将truecase放在了分词、分句之前,导致大小写校正逻辑没有正常生效,NER模块拿到的还是原始小写文本,无法识别人名。 - 未开启NER使用校正后文本的配置:就算
truecase正常执行,默认情况下NER模块还是会使用原始输入文本进行识别,需要手动开启配置让NER读取大小写校正后的结果。
解决方案
步骤1:修正标注器顺序
将标注器顺序调整为符合依赖要求的顺序:tokenize,ssplit,truecase,ner
步骤2:添加NER适配truecase的配置
在properties参数中新增"ner.applyTrueCase": true配置项,强制NER使用校正后的文本识别实体。
修正后的C#代码示例
var client = new RestClient(@"http://localhost:9000/") { Timeout = 5000 // default 100 s }; var request = new RestRequest(Method.POST) { RequestFormat = DataFormat.Json }; // 修正标注顺序,新增ner.applyTrueCase配置 request.AddParameter("properties", @"{""annotators"":""tokenize,ssplit,truecase,ner"", ""date"": ""2021-07-23T11:29:23"", ""ner.applyTrueCase"": true}", ParameterType.QueryString); request.AddParameter("pipelineLanguage", "en", ParameterType.QueryString); request.AddHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); request.AddBody(@"hello john smith" ); var response = client.Execute(request);
修改后重新调用即可识别小写输入的人名实体,无需手动处理首字母大写。
内容的提问来源于stack exchange,提问作者cs0815
相关产品推荐
相关产品推荐

