leizongmin / node-segment

基于Node.js的中文分词模块

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

RangeError: Maximum call stack size exceeded

peakji opened this issue · comments

Hi! 感谢开源这么棒的分词工具供大家学习〜

我今天尝试生成了一个70万词的字典,loadDict没有问题,但随便doSegment一个短语后,直接报错栈爆了...

能贴详细的出错堆栈信息上来么?

感谢回复~
出错起始在DictTokenizer.js的getChunks。字典很大时,290行处var chunks = getChunks(wordpos, nextcur);的递归太深了。

报错信息如下:

/lib/module/DictTokenizer.js:282
  for (var i in words) {
                ^
RangeError: Maximum call stack size exceeded

能否发一份你生成的“ 70万词的字典 ”以及你 测试用的文本 到我的邮箱?这样我也方便调试
邮箱: leizongmin@gmail.com

测试用的就是项目里的test.js,后来随便试了几个都不行,估计与输入关系不大。
字典是我随便从搜狗语料库切的一堆无意义词,只是用来做效率测试~ 可以从这里下载:http://www.sogou.com/labs/dl/c.html (gmail附件容量太小发不了...)

我测试了下,目前字典的极限大小应该是25w词。要突破这个限制估计必须改动逻辑了

我随便生成100W+的无意义词,测试也没有出错呐。
你测试用的文本 以及 词典

你就发个25W词的(能引起出错就行,25W估计也就10M空间)
还有具体的测试文本

辛苦啦!我生成了一份小一点的字典,我这边同样出错。见邮箱附件~
测试用的就是项目里的test.js,无改动。

如有什么我能帮忙的请一定告诉我;-)

Bug已修复。
是由于你的字典文件中有一个空白的词条|0x00000008|900000,导致分出的单词中有一个是空白的,于是在getChunks()函数中就不断地嵌套调用。

3ffded6

这个问题与“ 词库的极限容量 ”无关

原来是这样!哈哈我丢人了=___=

你也木神马丢人的,这是node-segment的一个Bu个,应该是我觉得惭愧。

可能是你在转换词库的过程中,有些特殊字符(或者GBK编码神马的)转成UTF8后就变成了空白字符导致的。
我一开始就问你要你的词库,早给我就早解决嘛。

嗯嗯,一开始我是想测试效率,词都弄成了很长的无意义回文词和子串,于是字典巨大...
刚才我看了,确实是我的词典生成脚本的问题。

性能很赞,分词效果不错!学习啦〜