from Bio import trie
import string
def get_trie(dictfile='/usr/share/dict/american-english'):
tr = trie.trie()
with open(dictfile) as f:
for line in f:
word = line.rstrip()
try:
word = word.encode(encoding='ascii', errors='ignore')
tr[word] = len(word)
assert tr.has_key(word), "Missing %s" % word
except UnicodeDecodeError:
pass
return tr
def get_trie_word(tr, s):
for end in reversed(range(len(s))):
word = s[:end + 1]
if tr.has_key(word):
return word, s[end + 1: ]
return None, s
def main(s):
tr = get_trie()
while s:
word, s = get_trie_word(tr, s)
print word
if __name__ == '__main__':
s = "Imageclassificationmethodscan beroughlydividedinto two broad families of approaches:"
s = s.strip(string.punctuation)
s = s.replace(" ", '')
s = s.lower()
main(s)
这是一个在亚洲NLP经常发生的问题。如果你有字典,那么你可以使用这个http://code.google.com/p/mini-segmenter/(免责声明:我写的,希望你不介意)。在
请注意,搜索空间可能非常大,因为英文字母表中的字符数肯定比中文/日语音节长。在
使用trie的贪婪方法
使用Biopython(
pip install biopython
)尝试此操作:结果
^{pr2}$注意事项
在英语中有一些堕落的例子,这是行不通的。您需要使用回溯来处理这些问题,但这应该可以让您开始。在
强制性试验
相关问题 更多 >
编程相关推荐