fukuball / jieba-php

"結巴"中文分詞:做最好的 PHP 中文分詞、中文斷詞組件。 / "Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best PHP Chinese word segmentation module.
http://jieba-php.fukuball.com
MIT License
1.32k stars 260 forks source link

因为词典缓存导致内存无限制增加 #77

Open xiaofeng-ling opened 1 year ago

xiaofeng-ling commented 1 year ago

与问题 #60 一致

经过调试,发现是Jieba::$dag_cache和Jieba::$trie->cache两个缓存无限制增加导致的

原因似乎是新词发现导致的问题,特别是当分析大量文件的时候,如果词不在词典里面,会通过算法找出新词然后缓存起来以便后续使用,在cli模式下分析多个文本的时候会导致内存无限制增加

现在采用的解决方案是每处理一个文件后,清空这两个缓存,这样可以降低内存占用,但是缺点是之前缓存的新词直接失效,之后需要重新发现新词,对后续文本分析的性能和精确度有一定影响。 但是在我的应用中,我只需要对每个文件进行分词即可,并不需要考虑所有的文本集合,似乎这是目前可行的解决方案,但是否还会有其他影响目前尚且未知

drttcrh commented 2 months ago

@xiaofeng-ling Jieba::$trie->cache 这个参数我怎么没找到,可以给个demo吗?可以截图分享一下。cli模式,我测试了主要是因为每次都要Jieba::init(), Finalseg::init(), 然后都是使用static静态变量,导致内存一直增长,如果通过判断,只初始化一次,好像可以避免内存一直增加