首页 > 其他 > 详细

【文本挖掘】模拟退火英文分词

时间:2015-02-15 14:53:35      阅读:238      评论:0      收藏:0      [点我收藏+]

大概原理是找到文本中重复项最多的文本作为词典,代价函数为词典的累计词长和文本分词数之和,迭代找到代价函数最小值所对应的词典和分词结果。方法简单,跑出来的结果也挺有意思。

 1 from random import randint
 2 
 3 
 4 def segment(text,segs):
 5     words=[]
 6     last=0
 7     for i in range(len(segs)):
 8         if segs[i]==1:
 9             words.append(text[last:i+1])
10             last=i+1
11     words.append(text[last:])
12     return words
13 
14 def evaluate(text,segs):
15     words=segment(text, segs)
16     text_size=len(words)
17     lexicon_size=len(‘‘.join(list(set(words))))
18     return text_size+lexicon_size
19 
20 def filp(segs,pos):
21     return segs[:pos]+str(1-int(segs[pos]))+segs[pos+1:]
22 
23 def filp_n(segs,n):
24     for i in range(n):
25         segs=filp(segs,randint(0,len(segs)-1))
26     return segs
27 
28 def anneal(text,segs,iterations,cooling_rate):
29     temperature=float(len(segs))
30     while temperature>0.5:
31         best_segs,best=segs,evaluate(text, segs)
32         for i in range(iterations):
33             guess=filp_n(segs,int(round(temperature)))
34             score=evaluate(text,guess)
35             if score<best:
36                 best,best_segs=score,guess
37         score,segs=best,best_segs
38         temperature=temperature/cooling_rate
39         print  temperature,evaluate(text,segs),segment(text,segs)
40     print ----------END--------------------
41     return segs

 

【文本挖掘】模拟退火英文分词

原文:http://www.cnblogs.com/colipso/p/4292894.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!