我们正在尝试使用从此站点https://pypi.python.org/pypi/datrie
下载的python的datrie包import string
import datrie
import re
import codecs
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
sys.stdin = codecs.getreader('utf-8')(sys.stdin)
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
sys.stderr = codecs.getwriter('utf-8')(sys.stderr)
trie = datrie.Trie(ranges = [(u'\u0000', u'\u9FFF')])
n = 0
dict = {}
for line in sys.stdin:
line = line.strip('\r\n')
#line = line.decode('utf8','ignore')
dict[line] = True
print "dict load over: %d" % (len(dict))
print >>sys.stderr, "insert"
for str,value in dict.iteritems():
trie[str] = True
if str not in trie:
#print str.encode('utf8','ignore')
print >> sys.stderr, str
print >> sys.stderr, repr(str)
print "trie load over: %d" % (len(trie))
这里是插入后无法在trie中找到的输出样本字 显然,unicode字的范围是有效的。
颖礼仿古烟盒折扣
u'\u9896\u793c\u4eff\u53e4\u70df\u76d2\u6298\u6263'
答案 0 :(得分:0)
以下是可用的解决方案。
>>> import datrie
>>> trie = datrie.Trie(ranges=[(u'\x00', u'\xff')])
>>> key="颖礼仿古烟盒折扣"
>>> trie[key.decode('latin1')]=42
>>> trie[key.decode('latin1')]
42
>>> trie.keys()
[u'\xe9\xa2\x96\xe7\xa4\xbc\xe4\xbb\xbf\xe5\x8f\xa4\xe7\x83\x9f\xe7\x9b\x92\xe6\x8a\x98\xe6\x89\xa3']