Python中的模拟退火算法分词(自然语言处理)

//根据标记,进行分割操作、可以是分句或者分词
def segment(text, segs):
    words= []
    last = 0
    for i in range(len(segs)):
        if segs[i] =='1':
        words.append(text[last:i+1])
        last = i+1
    words.append(text[last:])
    return words
//计算得分值
def evaluate(text, segs):
    words= segment(text, segs)
    text_size = len(words)
    lexicon_size = len(' '.join(list(set(words))))
    return text_size + lexicon_size
 
from random import randint
//改变某一个标记串的某一位(1变成0,0变成1)
def flip(segs, pos):
    return segs[:pos] + str(1-int(segs[pos])) + segs[pos+1:]
//根据整数N,随机改变N个位置,形成一个猜测的序列
def flip_n(segs, n):
    for i in range(n):
        segs = flip(segs, randint(0,len(segs)-1))
    return segs
//模拟退火算法
def anneal(text, segs, iterations, cooling_rate):
    temperature = float(len(segs))
    whiletemperature > 0.5:
        best_segs,best = segs, evaluate(text, segs)
        for i in range(iterations):
        guess= flip_n(segs, int(round(temperature)))
        score =evaluate(text, guess)
        if score < best://对比猜测的和目前的,那一种评价值比较小,选择那一种序列
        best,best_segs = score, guess
        score, segs = best,best_segs
        temperature = temperature / cooling_rate
        print evaluate(text, segs), segment(text, segs)
    print return segs
//示例
>>>text = "doyouseethekittyseethedoggydoyoulikethekittylikethedoggy"
>>>seg1= "0000000000000001000000000010000000000000000100000000000"
>>>anneal(text, seg1, 5000,1.2)
60['doyouseetheki', 'tty', 'see', 'thedoggy', 'doyouliketh', 'ekittylike', 'thedoggy']
58['doy', 'ouseetheki', 'ttysee', 'thedoggy', 'doy', 'o', 'ulikethekittylike', 'thedoggy']
56['doyou', 'seetheki', 'ttysee', 'thedoggy', 'doyou', 'liketh', 'ekittylike', 'thedoggy']
54['doyou', 'seethekit', 'tysee', 'thedoggy', 'doyou', 'likethekittylike', 'thedoggy']
120
53['doyou', 'seethekit', 'tysee', 'thedoggy', 'doyou', 'like', 'thekitty', 'like', 'thedoggy']
51['doyou', 'seethekittysee', 'thedoggy', 'doyou', 'like', 'thekitty', 'like', 'thedoggy']
42['doyou', 'see', 'thekitty', 'see', 'thedoggy', 'doyou', 'like', 'thekitty', 'like', 'thedoggy']
'0000100100000001001000000010000100010000000100010000000'

原文请看:https://www.cnblogs.com/createMoMo/archive/2013/05/14/3078296.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前端知识体系http://www.cnblogs.com/sb19871023/p/3894452.html 前端...
    秋风喵阅读 14,314评论 7 163
  • 77街剧场的嘉宾席上,高群书导演倚靠着细条藤椅的半圆形椅背,坐得舒服而惬意,就如他今天的穿着:暗黄的鸭舌帽下一副茶...
    冰融阅读 3,359评论 0 1
  • 感恩师姐卢姐和师哥Stan感召我快速的进入到这个宝贵的教练技术课堂体验中,也是我人生中最最为难忘的时刻。感恩我翻阅...
    快乐晴儿阅读 1,751评论 0 0
  • 文|嘎嘎 公众号|嘎嘎姑娘 ❀ 你还记得吗,很多年前,总有两个人,穿着校服,坐在阳光恰到好处洒落的篮球场,看...
    是嘎嘎啊阅读 3,392评论 0 1
  • 我发现我每次都在生活中有感触的时候,我准备写下来,最后要选中的题目往往都比较大,比如:了解世界规律这一类。而且我发...
    卢璐璐oOoO阅读 4,082评论 0 1

友情链接更多精彩内容