datrie中文支持不够?

要找一个trie的python包,希望性能不错,支持中文。pytrie是python实现,而且是基于hash数据结构的,先pass,找了下,发现datrie , 看起来是不错, C实现的 double array trie数据结构,应该可以的,用上才发现有点问题,我也不清楚是用的不对,还是其他原因。上点测试代码看看,有用过的请指点一下。

先看看英文的:

#coding:utf-8

import datrie
import string

t1 = datrie.Trie(string.ascii_lowercase)
t1[u'abc'] = 1
t1[u'bcd'] = 2
t1[u'b'] = 3
assert not u'cd' in t1
assert not u'a' in t1
assert u'abc' in t1
assert not u'abcd' in t1
print t1.items()

输出很正常:

[(u'abc', 1), (u'b', 3), (u'bcd', 2)]
可以看出, bcd 和 b 在trie树里,cd 不会被判断在树里,符合逻辑


中文 的测试代码:

t2 = datrie.Trie([u'\u4e00', u'\u9fff']) #chinese unicode range
w1 = '地位'.decode('utf-8')
w2 = '的地位'.decode('utf-8')
w3 = '极高的地位'.decode('utf-8')
w4 = '极高'.decode('utf-8')
w5 = '的'.decode('utf-8')

t2[w2] = 1
t2[w4] = 2
t2[w5] = 3
print 'w1 %s in t2 is '%w1, w1 in t2
print 'w3 %s in t2 is '%w3, w3 in t2

assert not w1 in t2
assert w2 in t2
assert not w3 in t2
print t2.items()


输出:

w1 地位 in t2 is  True
w3 极高的地位 in t2 is  False
Traceback (most recent call last):
  File "test_datrie.py", line 30, in <module>
    assert not w1 in t2
AssertionError

这个就有问题了,“ 的” 和 “的地位” 在trie树中, “地位” 也被判断为在trie中,这就不对了


so。 这就是我目前碰到的问题,datrie对中文支持如何?

另,如果datrie不可用,还有其他可以用的python trie数据结构吗

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值