python justtest中一些小函数的整理,以备查用

#encoding:utf-8
import re
from tone2Pinyin import ConvertToneNumbersPinyin

args = "Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng"

# lineOut = ConvertToneNumbersPinyin(args)
# print lineOut

s = u"""Zhào Qián Sūn Lǐ Zhōu Wú Zhèng Wáng
赵 钱 孙 李 周 吴 郑 王
Féng Chén Chǔ Wèi Jiǎng Shěn Hán Yáng冯 陈 褚 卫 蒋 沈 韩 杨
Zhū Qin Yoú Xǔ Hé Lǚ Shi Zhāng
朱 秦 尤 许 何 吕 施 张"""

def convert_to_pinyin_num():
    words_pinyin_dic = {}
    pattern = re.compile(u"[\u4e00-\u9fa5]+")
    param_list = s.split()
    flag_point = 0
    for param in param_list:
        match = pattern.match(param)
        if not match:
            param = param.encode("utf-8")
            lineOut = ConvertToneNumbersPinyin(param)
            key_words = param_list[flag_point+8]
            print key_words
            value_pinyin_num = lineOut + "\n"
            words_pinyin_dic[key_words] = value_pinyin_num
        flag_point += 1
    return words_pinyin_dic
# convert_to_pinyin_num()
def write_file():
    words_pinyin_dic = convert_to_pinyin_num()
    with open("words_pinyin_num.txt",mode="a") as f:
        for key in words_pinyin_dic:
            print key,words_pinyin_dic[key]
            com_str ="\t".join((key,words_pinyin_dic[key]))
            print com_str
            f.write(com_str.encode("utf-8"))
# write_file()
def read_file():
    import codecs
    # fileObj = codecs.open("family_name_words_pin.txt",mode="wb",encoding="utf-8")
    with codecs.open("words_pinyin_num.txt",encoding="utf-8") as f:
        pattern = re.compile("[1-9]")
        for line in f.readlines():
            match = pattern.search(line)
            if match:
                print pattern.sub(" ",line)
                trim_num = pattern.sub(" ",line)
                # fileObj.write(trim_num)
    # fileObj.close()
# read_file()
def re_sub_fun():
    '''正则中的替换操作'''
    import codecs
    with codecs.open("words_pinyin_num.txt",encoding="utf-8") as f:
        for line in f.readlines():
            print re.sub("\d"," ",line,count=1)

# read_file()
def convert_pinyin_lower():
    '''字符串操作,大小写转换'''
    import os,codecs
    fileObj = open("multi_family_name.txt",mode="wb")
    with codecs.open("family_name_words_pin.txt") as f:
        for line in f.readlines():
            lower_line = line.lower()
            fileObj.write(lower_line)
    fileObj.close()
# convert_pinyin_lower()
def test_listdir_fun():
    '''测试listdir,函数,其他的类似遍历方法还有glob,以及os.walk()'''
    import os
    print os.listdir(".")

def str_find_fun():
    '''find函数,字符串中进行查找,查找失败则返回-1,
    所以不能直接用if str.find('*')来判断是否查询失败'''
    s = "谁了"
    flag = s.find("天")
    print flag
    if s.find("天") != -1:
        print "yes"
    # if s.find("天"):
    #     print "yes"
# str_find_fun()
def check_mulitfamilyname_in_omit():
    '''确定姓氏准确发音与高频词不同,即姓氏部分可能会被错误标音的字'''
    import codecs
    omit_words_set = set()
    multi_intersection_dic = {}
    high_freq_pinyin_dic = {}
    with codecs.open("data/omit_check_words.txt",encoding="utf-8") as f:
        for line in f.readlines():
            omit_words_set.add(line.strip())
    print len(omit_words_set)
    with codecs.open("data/multi_family_name.txt",encoding="utf-8") as f:
        for line in f.readlines():
            splited_line = line.strip().split("\t")
            if  splited_line[0] in omit_words_set:
                multi_intersection_dic[splited_line[0]] = splited_line[1]
    with codecs.open("data/high_frequence_single_word.txt",encoding="utf-16") as f:
        for line in f.readlines():
            splited_line = line.strip().split("\t")
            high_freq_pinyin_dic[splited_line[0]] = splited_line[1]
    i = 0
    temp_list = []
    for (k,v) in multi_intersection_dic.items():
        if (k,v) not in high_freq_pinyin_dic.items():
            i += 1
            com_str = "\t".join((k,v,high_freq_pinyin_dic[k]))
            com_str = com_str + "\n"
            temp_list.append(com_str)
            print k,v,high_freq_pinyin_dic[k]
    print len(temp_list)
    # with codecs.open("omit_not_eq_high_freq.txt",mode="wb",encoding="utf-8") as f:
    #     f.writelines(temp_list)
# check_mulitfamilyname_in_omit()
def gen_multi_pinyin():
    '''获取2,3,4,5,6多音字,且按顺序排列'''
    import os,codecs
    path = r"E:\SVN\chocolate_ime\doc"
    filename = os.path.join(path,"HZout_NoTone.txt")
    word_list = []
    with codecs.open(filename,mode="rb",encoding="utf-16") as f:
        for line in f.readlines():
            splited_line = line.split("\t")
            word_list.append(splited_line[0])
    multi_pinyin_num_dic = {}
    for word in set(word_list):
        multi_pinyin_num_dic[word] = word_list.count(word)#数据量为23721,利用list.count速度相当慢
    com_temp_list = []
    multi_pinyin_num_list = sorted(multi_pinyin_num_dic.items(),key=lambda x:x[1])#按照dic的value值进行排序,sorted返回数组
    for word_repeat_times_tuple  in multi_pinyin_num_list:
        if word_repeat_times_tuple[1] >= 2:
            com_str = "\t".join((word_repeat_times_tuple[0],str(word_repeat_times_tuple[1])))
            com_str = com_str + "\n"
            com_temp_list.append(com_str)
    print len(com_temp_list)
    with codecs.open("multi_repeat_times_sort.txt",mode="a",encoding="utf-8") as f:
        f.writelines(com_temp_list)
# gen_multi_pinyin()

def gen_multi_familyname_dic():
    import codecs
    multi_familyname_dic = {}
    with codecs.open("familyname_not_equal_high_freq.txt",encoding="utf8")as f:
        for line in f.readlines():
            # print len(line.split("\t"))
            splited_line = line.split("\t")
            multi_familyname_dic[splited_line[0]] = splited_line[1]
    print multi_familyname_dic
# gen_multi_familyname_dic()
def get_high_freq():
    '''max函数比较,两个参数,interator,key,对arr中的第三个参数进行比较,然后返回对应的list
    注意,此时若不用float进行转化,则会按字符串进行比较,及"22"小于"4",这个问题的不是第一次碰到了,
    当慎重才是'''
    arr = [[u'\u90fd', u'du', u'3093398\r\n'], [u'\u90fd', u'dou', u'18953009\r\n']]
    high_word_pinyin_freq_list = max(arr, key=lambda x: float(x[2]))
    print high_word_pinyin_freq_list
#get_high_freq()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值