Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于DoubleArrayTrie的默认初始化大小 #984

Closed
1 task done
wawa8900 opened this issue Sep 28, 2018 · 2 comments
Closed
1 task done

关于DoubleArrayTrie的默认初始化大小 #984

wawa8900 opened this issue Sep 28, 2018 · 2 comments

Comments

@wawa8900
Copy link

注意事项

请确认下列注意事项:

  • 我已仔细阅读下列文档,都没有找到答案:
  • 我已经通过Googleissue区检索功能搜索了我的问题,也没有找到答案。
  • 我明白开源社区是出于兴趣爱好聚集起来的自由社区,不承担任何责任或义务。我会礼貌发言,向每一个帮助我的人表示感谢。
  • 我在此括号内输入x打钩,代表上述事项确认完毕。

版本号

当前最新版本号是:1.6.8
我使用的版本是:portable-1.6.6

我的问题

image
请问初始化时,初期大小必须是 65536*32这么大吗,如果要匹配的词不是很多(几个到几百个不等),也必须设定这么大吗。(程序中需要用到很多这种小字典,而且字典会频繁的变化)
我改成65536后,有时候用Searcher匹配的时候报ArrayIndexOutOfBoundsException的异常。

复现问题

1.用【潘家园街道】构建一个词典
2.用构建的词典匹配附件的这篇文章
3.用dart.getSearcher(text, 0)匹配,会在这个地方异常
image

doc.txt

@tiandiweizun
Copy link

如果几个,是不应该用doubleArrayTrie的,直接遍历indexof,如果觉的不是特别多(100以下),可以使用其他数据结构,比如BinTrie或者原始的DoubleArrayTrie,但是HanLP的DoubleArrayTrie在所有的双数组树种检索是最快的,因为他直接把unicode当做index,而不是使用map保存char to index

@hankcs
Copy link
Owner

hankcs commented Sep 29, 2018

  1. 在修改代码前请保证理解原理,三思,谨慎
  2. 双数组大小至少是size + 65535
  3. 现在优化了构建后自动shrink到最低内存,与从磁盘加载效果一致。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants