在Android Studio运行CoreNLP时遭遇非法字符错误求助
解决CoreNLP在Android Studio中运行时的路径非法字符错误
你碰到的这个Illegal char <:> at index 44: \edu\stanford\nlp\models\kbp\tokensregex\per:siblings.rules错误,本质是Windows文件系统不允许文件名包含冒号(:),而CoreNLP的部分规则文件(比如per:siblings.rules)正好带了这个字符,加载时就触发了路径解析异常。结合你提到的Jar包导入疑问,给你几个可行的解决思路:
1. 先确认Jar包导入是否正确
从你提供的截图来看,要确保满足这两点:
- 导入的CoreNLP核心Jar和模型Jar版本完全一致(比如都是4.5.4版本),版本不匹配也可能引发各种路径或依赖问题;
- 不要只导入核心Jar,必须包含对应的模型Jar(通常命名是
stanford-corenlp-x.x.x-models.jar),规则文件正是打包在这个模型Jar里的。
2. 针对冒号路径的解决方案
方案一:升级到CoreNLP最新稳定版本
CoreNLP后续版本(比如4.5.0+)已经优化了Windows环境下的路径处理,修复了这类带特殊字符的文件加载问题。你可以尝试替换成最新版本的Jar包,或者如果用Gradle/Maven的话,更新依赖版本:
// Gradle示例,替换成最新版本 implementation 'edu.stanford.nlp:stanford-corenlp:4.5.4' implementation 'edu.stanford.nlp:stanford-corenlp:4.5.4:models'
方案二:手动修改模型文件(应急方案)
如果暂时无法升级版本,可以手动处理模型Jar里的文件:
- 解压模型Jar包,找到所有带冒号的规则文件(比如
per:siblings.rules),把文件名里的冒号改成下划线(比如per_siblings.rules); - 找到Jar包中引用这些文件的配置(比如tokensregex的配置文件),同步修改里面的路径引用;
- 重新打包成Jar替换原来的模型Jar。不过这个方法比较繁琐,容易遗漏,优先推荐方案一。
方案三:调整CoreNLP的初始化配置
如果你不需要用到KBP(Knowledge Base Population)相关的功能,可以在初始化CoreNLP时,去掉对应的annotator,避免加载这些带冒号的规则文件。比如:
Properties props = new Properties(); // 只保留你需要的annotator,比如去掉"kbp" props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner"); StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
这样就能绕过加载那些有问题的规则文件,避免触发路径错误。
内容的提问来源于stack exchange,提问作者user1762438
相关产品推荐
相关产品推荐

