问题描述:用StanfordSegmenter进行中文分词,输入如下代码后报错TypeError: argument of type 'NoneType' is not iterable
from nltk.tokenize import StanfordSegmenter
segmenter = StanfordSegmenter(
path_to_sihan_corpora_dict="E:\stanford_nlp\stanford-segmenter-2018-10-16\data",
path_to_model="E:\stanford_nlp\stanford-segmenter-2018-10-16\data\pku.gz",
path_to_dict="E:\stanford_nlp\stanford-segmenter-2018-10-16\data\dict-chris6.ser.gz")
str=u"语料库以电子计算机为载体承载语言知识的基础资源,但并不等于语言知识。"
result = segmenter.segment(str)
print(result)
详细的报错信息为:
解决方法:
StanfordSegmenter()中传参java_class, 因为https://github.com/nltk/nltk/blob/develop/nltk/tokenize/stanford_segmenter.py的第153行self._java_class = 'edu.stanford.nlp.ie.crf.CRFClassifier'指定了中文模型时的java_class参数。如果是阿拉伯语,java_class则为edu.stanford.nlp.international.arabic.process.ArabicSegmenter 。
另外,在Stanfordnlp的官网https://github.com/stanfordnlp/CoreNLP/issues/484解决了该问题。
修改后的结果如下:
参考文章:
1. http://www.52nlp.cn/Python自然语言处理实践-在NLTK中使用斯坦福中文分词器
2. https://stackoverflow.com/questions/44793697/python-3-5-nltk-stanford-segmenter-windows-10