#!/usr/bin/pythonImportNLTK fromRandomImportRandintdefsegment (text, segs):#participleWords =[] last=0 forIinchRange (len (segs)):ifSegs[i] = ='1': Words.append (text[last:i+1]) last= I+1words.append (text[last:])returnwordsdefevaluate (text, segs):#RatingsWords =segment (text, segs) text_size=Len (words) lexicon_size= SUM (len (word) + 1 forWordinchset (words))returnText_size +lexicon_sizedefFlip (Segs, POS):returnsegs[:p OS] + str (1-int (segs[pos)) + segs[pos+1:]defflip_n (Segs, N):#Random perturbation forIinchrange (N): Segs= Flip (segs, randint (0, Len (segs)-1)) returnSegsdefanneal (text, Segs, iterations, cooling_rate): Temperature=float (len (segs)) whileTemperature > 0.5: #returns: Reduced score, optimized segmentation resultsBest_segs, best =Segs, evaluate (text, segs) forIinchRange (iterations): Guess=flip_n (segs, int (round (temperature))) score=evaluate (text, guess)ifScore <Best:best, Best_segs=score, guess score, Segs=Best , Best_segs temperature= Temperature/cooling_ratePrint(Evaluate (text, Segs), segment (text, segs))Print() returnSegsif __name__=='__main__': Text="Doyouseethekittyseethedoggydoyoulikethekittylikethedoggy"SEG1="0000000000000001000000000010000000000000000100000000000"anneal (text, SEG1,500, 1.2)
Python nltk simulated annealing participle