您当前的位置:首页 > 计算机 > 编程开发 > Python

python 中文分词和拼音首字母

时间:11-13来源:作者:点击数:

DP原理是令p[i]为s[i : n-1]的最优解,初始化为p[n]=0,转移公式为:

p[i]=max( freq(s[i : i+k-1] ) + p[i+k] )        1<=k<=n-i

代码如下:

update at 2011.5.12: 使用了defaultdict简化了代码

# coding: utf-8
 
import collections
d=collections.defaultdict(lambda:0)
 
def init(dictfile):
    f=open(dictfile,'r')
    while 1:
        line=f.readline()
        if not line: break
        word, freq = line.split('\t')
        d[word.decode('gbk')]=int(freq)
    f.close()
 
def fenci(s):
    l=len(s)
    p=[0 for i in range(l+1)]
    t=[1 for i in range(l)]
    for i in range(l-1,-1,-1):
        for k in range(1,l-i+1):
            if(d[s[i:i+k]]+p[i+k] > p[i]):
                p[i]=d[s[i:i+k]]+p[i+k] 
                t[i]=k
    print 'sum:',p[0]
    i=0
    while i<l:
        print s[i:i+t[i]].encode('utf8'), # 'gbk' for win
        i=i+t[i]
 
 
if __name__ == '__main__':
    init('dict.txt')
    s="科学研究需要大量的资金但社会资源有限需要政府调控所以需要政府的限制"
    s=s.decode('utf8')
    fenci(s)

显示结果为:

sum: 33505
科学 研究 需要 大量 的 资金 但 社会 资源 有限 需要 政府 调控 所以 需要 政府 的 限制

顺便贴一个以前写的求拼音首字母的小脚本:

# coding: utf-8
 
a=[ i.decode('utf8').encode('gbk') for i in
     ['澳', '怖', '错', '堕', '贰', '咐', '过',
      '祸', '祸', '骏', '阔', '络', '穆', '诺',
      '沤', '瀑', '群', '弱', '所', '唾',
      '唾', '唾', '误', '褕', '孕', '座',] ]
 
def firstpy(s):
    s=s.encode('gbk')
    i=0
    while i<26 and a[i]<s:
        i+=1
    return '%c' % (97+i)
 
if __name__=='__main__':
    s='判断字符串首字母'.decode('utf8')
    for i in range(len(s)):
        print firstpy(s[i]),

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门