何博士你好,十分抱歉由于错误发帖给你带来了困扰,但是我有一个比较急的问题希望解决

在《自然语言处理入门》的书中,运行第六章crfpp_train_hanlp_load.py时报错TypeError:Ambiguous overloads found for constructor。
具体错误是会出现
可能是比较基础的问题,可是运行第六章代码时会报错TypeError:Ambiguous overloads found for constructor

具体是

TypeError: Ambiguous overloads found for constructor com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer(NoneType) between:
public com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer(java.lang.String) throws java.io.IOException
public com.hankcs.hanlp.model.crf.CRFLexicalAnalyzer(com.hankcs.hanlp.model.crf.CRFSegmenter)

at JPMethod::findOverload(native\common\jp_method.cpp:214)
at JPMethod::findOverload(native\common\jp_method.cpp:245)
at PyJPClass::newInstance(native\python\pyjp_class.cpp:300)

由于在互联网上找了很久都没找到相关的错误,故来求助何博士,希望博士能指点迷津,十分感谢

1 Like

十分感谢,谢谢何博士!!!

刚刚运行了一下,在cmd执行crf的命令之后再运营该py文件会出现以下提示,请问是什么问题呢

segmenter = CRFSegmenter(model_txt_path)

File “D:\Softwares\Anaconda1\lib\site-packages\jpype_jobject.py”, line 95, in init
jv = self.class.javaclass.newInstance(*args)

java.lang.IllegalArgumentException: 错误的模型类型: 传入的不是分词模型,而是 POS 模型

无法复现。请确认model_txt_path是类似如下的文件。crf-cws-model.txt

已确认了路径下是类似文件,但仍然出现这样的问题;现在将路径换成您提供的文件后仍然出现相同的问题,有点摸不着头脑。

hanlp update看看版本是不是最新

update之后是1.7.6的版本,运行之后还是相同的问题,脑子炸了

把这个文件另存为uft8编码试试

原本就是UTF-8的编码方式(包括自己通过crf得到的和您发的txt),另存为UTF-8之后仍然是同样的错误,可以请问一下这两种模型有什么区别吗?

你可以diff一下区别。请删除同名的bin文件后,在下行下断点排查问题:

或者用Linux,一了百了。

谢谢何博士,好像找到问题了,把bin文件删除之后您的文档跑得起来了。现在问题好像是用crf训练出来的模型(就是我电脑上跑出来的crf-cws-model.txt)好像和您的有一点不一样,比如本应是BEMS的地方只有BEM缺了S,0 B后边跟的数据也有乱码0JG6TCJY32TBRZYN%7BUGV3Z3

你的语料库也要用utf8储存。

2 Likes

十分感谢,问题以解决