Open xiaofeng-ling opened 1 year ago
与问题 #60 一致
经过调试,发现是Jieba::$dag_cache和Jieba::$trie->cache两个缓存无限制增加导致的
原因似乎是新词发现导致的问题,特别是当分析大量文件的时候,如果词不在词典里面,会通过算法找出新词然后缓存起来以便后续使用,在cli模式下分析多个文本的时候会导致内存无限制增加
现在采用的解决方案是每处理一个文件后,清空这两个缓存,这样可以降低内存占用,但是缺点是之前缓存的新词直接失效,之后需要重新发现新词,对后续文本分析的性能和精确度有一定影响。 但是在我的应用中,我只需要对每个文件进行分词即可,并不需要考虑所有的文本集合,似乎这是目前可行的解决方案,但是否还会有其他影响目前尚且未知
@xiaofeng-ling Jieba::$trie->cache 这个参数我怎么没找到,可以给个demo吗?可以截图分享一下。cli模式,我测试了主要是因为每次都要Jieba::init(), Finalseg::init(), 然后都是使用static静态变量,导致内存一直增长,如果通过判断,只初始化一次,好像可以避免内存一直增加
与问题 #60 一致
经过调试,发现是Jieba::$dag_cache和Jieba::$trie->cache两个缓存无限制增加导致的
原因似乎是新词发现导致的问题,特别是当分析大量文件的时候,如果词不在词典里面,会通过算法找出新词然后缓存起来以便后续使用,在cli模式下分析多个文本的时候会导致内存无限制增加
现在采用的解决方案是每处理一个文件后,清空这两个缓存,这样可以降低内存占用,但是缺点是之前缓存的新词直接失效,之后需要重新发现新词,对后续文本分析的性能和精确度有一定影响。 但是在我的应用中,我只需要对每个文件进行分词即可,并不需要考虑所有的文本集合,似乎这是目前可行的解决方案,但是否还会有其他影响目前尚且未知