Datrie中国語のサポートが足りませんか?
1680 ワード
trieのpythonパッケージを探して、性能が悪くないことを望んで、中国語をサポートします.pytrieはpython実装であり、hashデータ構造に基づいているので、まずpassを探して、datrieを見つけて、よく見えますが、C実装のdouble array trieデータ構造は、できるはずですが、使用してから少し問題があることに気づきました.私も使用が間違っているのか、それとも彼の原因なのか分かりません.上のテストコードを見てください.役に立つものを教えてください.
まず英語を見てみましょう.
正常な出力:
中国語のテストコード:
出力:
これは問題があります.「の」と「の地位」はtrieツリーの中で、「地位」もtrieの中で判断されます.これは間違っています.
so. これが私が今直面している問題です.datrieは中国語のサポートはどうですか.
また、datrieが使用できない場合、他にpython 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データ構造はありますか?